Allow to use the extension for the format selection

The best format with the extension is downloaded.
This commit is contained in:
Jaime Marquínez Ferrándiz 2013-10-21 13:31:55 +02:00
parent a9c58ad945
commit 49e86983e7
2 changed files with 20 additions and 4 deletions

View file

@ -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'35', u'ext': u'mp4'},
{u'format_id': u'47'}, {u'format_id': u'45', u'ext': u'webm'},
{u'format_id': u'2'}, {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()

View file

@ -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