@ -137,6 +137,7 @@ class YoutubeDL(object):
nooverwrites : Prevent overwriting files .
playliststart : Playlist item to start at .
playlistend : Playlist item to end at .
playlist_items : Specific indices of playlist to download .
playlistreverse : Download playlist items in reverse order .
matchtitle : Download only matching titles .
rejecttitle : Reject downloads for matching titles .
@ -703,24 +704,51 @@ class YoutubeDL(object):
if playlistend == - 1 :
playlistend = None
playlistitems_str = self . params . get ( ' playlist_items ' , None )
playlistitems = None
if playlistitems_str is not None :
def iter_playlistitems ( format ) :
for string_segment in format . split ( ' , ' ) :
if ' - ' in string_segment :
start , end = string_segment . split ( ' - ' )
for item in range ( int ( start ) , int ( end ) + 1 ) :
yield int ( item )
else :
yield int ( string_segment )
playlistitems = iter_playlistitems ( playlistitems_str )
ie_entries = ie_result [ ' entries ' ]
if isinstance ( ie_entries , list ) :
n_all_entries = len ( ie_entries )
entries = ie_entries [ playliststart : playlistend ]
if playlistitems :
entries = [ ie_entries [ i - 1 ] for i in playlistitems ]
else :
entries = ie_entries [ playliststart : playlistend ]
n_entries = len ( entries )
self . to_screen (
" [ %s ] playlist %s : Collected %d video ids (downloading %d of them) " %
( ie_result [ ' extractor ' ] , playlist , n_all_entries , n_entries ) )
elif isinstance ( ie_entries , PagedList ) :
entries = ie_entries . getslice (
playliststart , playlistend )
if playlistitems :
entries = [ ]
for item in playlistitems :
entries . extend ( ie_entries . getslice (
item - 1 , item
) )
else :
entries = ie_entries . getslice (
playliststart , playlistend )
n_entries = len ( entries )
self . to_screen (
" [ %s ] playlist %s : Downloading %d videos " %
( ie_result [ ' extractor ' ] , playlist , n_entries ) )
else : # iterable
entries = list ( itertools . islice (
ie_entries , playliststart , playlistend ) )
if playlistitems :
entry_list = list ( ie_entries )
entries = [ entry_list [ i - 1 ] for i in playlistitems ]
else :
entries = list ( itertools . islice (
ie_entries , playliststart , playlistend ) )
n_entries = len ( entries )
self . to_screen (
" [ %s ] playlist %s : Downloading %d videos " %