Allow to use the extension for the format selection
authorJaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com>
Mon, 21 Oct 2013 11:31:55 +0000 (13:31 +0200)
committerJaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com>
Mon, 21 Oct 2013 11:31:55 +0000 (13:31 +0200)
The best format with the extension is downloaded.

test/test_YoutubeDL.py
youtube_dl/YoutubeDL.py

index 2073bc4dfee0f96b8419b615c968ac2ae4ab3de5..f8cd1bdce9a64ac87ec83ab15130148f580a5291 100644 (file)
@@ -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()
index bc69214e75e5bf98eb9e3abc07d64b6d729fb970..32f21e21afb91680a7157fc34d62da3a704bd5c3 100644 (file)
@@ -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