Browse Source

Allow to use the extension for the format selection

The best format with the extension is downloaded.
Jaime Marquínez Ferrándiz 12 năm trước cách đây
mục cha
commit
49e86983e7
2 tập tin đã thay đổi với 20 bổ sung4 xóa
  1. 14 3
      test/test_YoutubeDL.py
  2. 6 1
      youtube_dl/YoutubeDL.py

+ 14 - 3
test/test_YoutubeDL.py

@@ -96,9 +96,10 @@ class TestFormatSelection(unittest.TestCase):
 
 
     def test_format_selection(self):
     def test_format_selection(self):
         formats = [
         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'}
         info_dict = {u'formats': formats, u'extractor': u'test'}
 
 
@@ -117,6 +118,16 @@ class TestFormatSelection(unittest.TestCase):
         downloaded = ydl.downloaded_info_dicts[0]
         downloaded = ydl.downloaded_info_dicts[0]
         self.assertEqual(downloaded['format_id'], u'2')
         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__':
 if __name__ == '__main__':
     unittest.main()
     unittest.main()

+ 6 - 1
youtube_dl/YoutubeDL.py

@@ -454,7 +454,12 @@ class YoutubeDL(object):
         elif format_spec == 'worst':
         elif format_spec == 'worst':
             return available_formats[0]
             return available_formats[0]
         else:
         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:
             if matches:
                 return matches[-1]
                 return matches[-1]
         return None
         return None