diff options
| -rw-r--r-- | test/test_YoutubeDL.py | 30 | ||||
| -rw-r--r-- | youtube_dl/YoutubeDL.py | 12 | ||||
| -rw-r--r-- | youtube_dl/__init__.py | 2 | 
3 files changed, 43 insertions, 1 deletions
| diff --git a/test/test_YoutubeDL.py b/test/test_YoutubeDL.py index 01de10e31..3adb9f344 100644 --- a/test/test_YoutubeDL.py +++ b/test/test_YoutubeDL.py @@ -150,6 +150,36 @@ class TestFormatSelection(unittest.TestCase):          downloaded = ydl.downloaded_info_dicts[0]          self.assertEqual(downloaded['format_id'], u'35') +    def test_format_selection_audio(self): +        formats = [ +            {u'format_id': u'audio-low', u'ext': u'webm', 'preference': 1, 'vcodec': 'none'}, +            {u'format_id': u'audio-mid', u'ext': u'webm', 'preference': 2, 'vcodec': 'none'}, +            {u'format_id': u'audio-high', u'ext': u'flv', 'preference': 3, 'vcodec': 'none'}, +            {u'format_id': u'vid', u'ext': u'mp4', 'preference': 4}, +        ] +        info_dict = {u'formats': formats, u'extractor': u'test'} + +        ydl = YDL({'format': u'bestaudio'}) +        ydl.process_ie_result(info_dict.copy()) +        downloaded = ydl.downloaded_info_dicts[0] +        self.assertEqual(downloaded['format_id'], u'audio-high') + +        ydl = YDL({'format': u'worstaudio'}) +        ydl.process_ie_result(info_dict.copy()) +        downloaded = ydl.downloaded_info_dicts[0] +        self.assertEqual(downloaded['format_id'], u'audio-low') + +        formats = [ +            {u'format_id': u'vid-low', u'ext': u'mp4', 'preference': 1}, +            {u'format_id': u'vid-high', u'ext': u'mp4', 'preference': 2}, +        ] +        info_dict = {u'formats': formats, u'extractor': u'test'} + +        ydl = YDL({'format': u'bestaudio/worstaudio/best'}) +        ydl.process_ie_result(info_dict.copy()) +        downloaded = ydl.downloaded_info_dicts[0] +        self.assertEqual(downloaded['format_id'], u'vid-high') +      def test_youtube_format_selection(self):          order = [              '38', '37', '46', '22', '45', '35', '44', '18', '34', '43', '6', '5', '36', '17', '13', diff --git a/youtube_dl/YoutubeDL.py b/youtube_dl/YoutubeDL.py index c6430d367..9f15616fa 100644 --- a/youtube_dl/YoutubeDL.py +++ b/youtube_dl/YoutubeDL.py @@ -637,6 +637,18 @@ class YoutubeDL(object):              return available_formats[-1]          elif format_spec == 'worst':              return available_formats[0] +        elif format_spec == 'bestaudio': +            audio_formats = [ +                f for f in available_formats +                if f.get('vcodec') == 'none'] +            if audio_formats: +                return audio_formats[-1] +        elif format_spec == 'worstaudio': +            audio_formats = [ +                f for f in available_formats +                if f.get('vcodec') == 'none'] +            if audio_formats: +                return audio_formats[0]          else:              extensions = ['mp4', 'flv', 'webm', '3gp']              if format_spec in extensions: diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 44047888d..4db97ad3c 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -257,7 +257,7 @@ def parseOpts(overrideArguments=None):      video_format.add_option('-f', '--format',              action='store', dest='format', metavar='FORMAT', default='best', -            help='video format code, specify the order of preference using slashes: "-f 22/17/18". "-f mp4" and "-f flv" are also supported') +            help='video format code, specify the order of preference using slashes: "-f 22/17/18". "-f mp4" and "-f flv" are also supported. You can also use the special names "best", "bestaudio", and "worst"')      video_format.add_option('--all-formats',              action='store_const', dest='format', help='download all available video formats', const='all')      video_format.add_option('--prefer-free-formats', | 
