[YoutubeDL] Generalize best/worst format match behavior

This commit is contained in:
Sergey M․ 2015-04-30 21:06:51 +06:00
parent 4d72df4031
commit e01c56f9e1

View File

@ -914,22 +914,16 @@ def select_format(self, format_spec, available_formats):
if not available_formats: if not available_formats:
return None return None
if format_spec == 'best' or format_spec is None: if format_spec in ['best', 'worst', None]:
format_idx = 0 if format_spec == 'worst' else -1
audiovideo_formats = [ audiovideo_formats = [
f for f in available_formats f for f in available_formats
if f.get('vcodec') != 'none' and f.get('acodec') != 'none'] if f.get('vcodec') != 'none' and f.get('acodec') != 'none']
if audiovideo_formats: if audiovideo_formats:
return audiovideo_formats[-1] return audiovideo_formats[format_idx]
# for audio only urls, 'best' selects the best audio format # for audio only urls, select the best/worst audio format
elif all(f.get('acodec') != 'none' for f in available_formats): elif all(f.get('acodec') != 'none' for f in available_formats):
return available_formats[-1] return available_formats[format_idx]
elif format_spec == 'worst':
audiovideo_formats = [
f for f in available_formats
if f.get('vcodec') != 'none' and f.get('acodec') != 'none']
if audiovideo_formats:
return audiovideo_formats[0]
return available_formats[0]
elif format_spec == 'bestaudio': elif format_spec == 'bestaudio':
audio_formats = [ audio_formats = [
f for f in available_formats f for f in available_formats