Make 'best' format only match non-DASH formats (closes #5554)

Otherwise it's impossible to only download non-DASH formats, for example `best[height=?480]/best` would download a DASH video if it's the only one with height=480, instead for falling back to the second format specifier.
For audio only urls (soundcloud, bandcamp ...), the best audio will be downloaded as before.
totalwebcasting
Jaime Marquínez Ferrándiz 10 years ago
parent 965cb8d530
commit 8dd5418803

@ -237,7 +237,7 @@ class TestFormatSelection(unittest.TestCase):
f2['url'] = 'url:' + f2id
info_dict = _make_result([f1, f2], extractor='youtube')
ydl = YDL()
ydl = YDL({'format': 'best/bestvideo'})
yie = YoutubeIE(ydl)
yie._sort_formats(info_dict['formats'])
ydl.process_ie_result(info_dict)
@ -245,7 +245,7 @@ class TestFormatSelection(unittest.TestCase):
self.assertEqual(downloaded['format_id'], f1id)
info_dict = _make_result([f2, f1], extractor='youtube')
ydl = YDL()
ydl = YDL({'format': 'best/bestvideo'})
yie = YoutubeIE(ydl)
yie._sort_formats(info_dict['formats'])
ydl.process_ie_result(info_dict)

@ -915,6 +915,13 @@ class YoutubeDL(object):
return None
if format_spec == 'best' or format_spec is None:
audiovideo_formats = [
f for f in available_formats
if f.get('vcodec') != 'none' and f.get('acodec') != 'none']
if audiovideo_formats:
return audiovideo_formats[-1]
# for audio only urls, 'best' selects the best audio format
elif all(f.get('acodec') != 'none' for f in available_formats):
return available_formats[-1]
elif format_spec == 'worst':
audiovideo_formats = [

Loading…
Cancel
Save