about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPhilipp Hagemeister <phihag@phihag.de>2014-01-22 14:47:29 +0100
committerPhilipp Hagemeister <phihag@phihag.de>2014-01-22 14:47:29 +0100
commitba7678f9cc1099313f3fa9221538116a24e8e627 (patch)
treee1e6d6d3ba3e72e7870392d857f102236a0ab5e2
parenta70c83768e30c99479af04c7cb229545743a9134 (diff)
downloadyoutube-dl-ba7678f9cc1099313f3fa9221538116a24e8e627.tar.gz
youtube-dl-ba7678f9cc1099313f3fa9221538116a24e8e627.tar.xz
youtube-dl-ba7678f9cc1099313f3fa9221538116a24e8e627.zip
Add -f bestaudio (Fixes #2163)
-rw-r--r--test/test_YoutubeDL.py30
-rw-r--r--youtube_dl/YoutubeDL.py12
-rw-r--r--youtube_dl/__init__.py2
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',