فهرست منبع

Allow to use the extension for the format selection

The best format with the extension is downloaded.
Jaime Marquínez Ferrándiz 12 سال پیش
والد
کامیت
49e86983e7
2فایلهای تغییر یافته به همراه20 افزوده شده و 4 حذف شده
  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):
         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()

+ 6 - 1
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