aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/test_YoutubeDL.py17
-rw-r--r--youtube_dl/YoutubeDL.py7
2 files changed, 20 insertions, 4 deletions
diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py
index 2073bc4df..f8cd1bdce 100644
--- a/test/test_YoutubeDL.py
+++ b/test/test_YoutubeDL.py
@@ -96,9 +96,10 @@ class TestFormatSelection(unittest.TestCase):
def test_format_selection(self):
formats = [
- {u'format_id': u'35'},
- {u'format_id': u'47'},
- {u'format_id': u'2'},
+ {u'format_id': u'35', u'ext': u'mp4'},
+ {u'format_id': u'45', u'ext': u'webm'},
+ {u'format_id': u'47', u'ext': u'webm'},
+ {u'format_id': u'2', u'ext': u'flv'},
]
info_dict = {u'formats': formats, u'extractor': u'test'}
@@ -117,6 +118,16 @@ class TestFormatSelection(unittest.TestCase):
downloaded = ydl.downloaded_info_dicts[0]
self.assertEqual(downloaded['format_id'], u'2')
+ ydl = YDL({'format': u'webm/mp4'})
+ ydl.process_ie_result(info_dict)
+ downloaded = ydl.downloaded_info_dicts[0]
+ self.assertEqual(downloaded['format_id'], u'47')
+
+ ydl = YDL({'format': u'3gp/40/mp4'})
+ ydl.process_ie_result(info_dict)
+ downloaded = ydl.downloaded_info_dicts[0]
+ self.assertEqual(downloaded['format_id'], u'35')
+
if __name__ == '__main__':
unittest.main()
diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py
index bc69214e7..32f21e21a 100644
--- a/youtube_dl/YoutubeDL.py
+++ b/youtube_dl/YoutubeDL.py
@@ -454,7 +454,12 @@ class YoutubeDL(object):
elif format_spec == 'worst':
return available_formats[0]
else:
- matches = list(filter(lambda f:f['format_id'] == format_spec ,available_formats))
+ extensions = [u'mp4', u'flv', u'webm', u'3gp']
+ if format_spec in extensions:
+ filter_f = lambda f: f['ext'] == format_spec
+ else:
+ filter_f = lambda f: f['format_id'] == format_spec
+ matches = list(filter(filter_f ,available_formats))
if matches:
return matches[-1]
return None