mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-04 08:57:08 -05:00 
			
		
		
		
	[YoutubeDL] Allow selection by more extensions
This commit is contained in:
		@@ -8,6 +8,8 @@ import sys
 | 
			
		||||
import unittest
 | 
			
		||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 | 
			
		||||
 | 
			
		||||
import copy
 | 
			
		||||
 | 
			
		||||
from test.helper import FakeYDL, assertRegexpMatches
 | 
			
		||||
from youtube_dl import YoutubeDL
 | 
			
		||||
from youtube_dl.extractor import YoutubeIE
 | 
			
		||||
@@ -192,6 +194,37 @@ class TestFormatSelection(unittest.TestCase):
 | 
			
		||||
        downloaded = ydl.downloaded_info_dicts[0]
 | 
			
		||||
        self.assertEqual(downloaded['format_id'], 'vid-high')
 | 
			
		||||
 | 
			
		||||
    def test_format_selection_audio_exts(self):
 | 
			
		||||
        formats = [
 | 
			
		||||
            {'format_id': 'mp3-64', 'ext': 'mp3', 'abr': 64, 'url': 'http://_', 'vcodec': 'none'},
 | 
			
		||||
            {'format_id': 'ogg-64', 'ext': 'ogg', 'abr': 64, 'url': 'http://_', 'vcodec': 'none'},
 | 
			
		||||
            {'format_id': 'aac-64', 'ext': 'aac', 'abr': 64, 'url': 'http://_', 'vcodec': 'none'},
 | 
			
		||||
            {'format_id': 'mp3-32', 'ext': 'mp3', 'abr': 32, 'url': 'http://_', 'vcodec': 'none'},
 | 
			
		||||
            {'format_id': 'aac-32', 'ext': 'aac', 'abr': 32, 'url': 'http://_', 'vcodec': 'none'},
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
        info_dict = _make_result(formats)
 | 
			
		||||
        ydl = YDL({'format': 'best'})
 | 
			
		||||
        ie = YoutubeIE(ydl)
 | 
			
		||||
        ie._sort_formats(info_dict['formats'])
 | 
			
		||||
        ydl.process_ie_result(copy.deepcopy(info_dict))
 | 
			
		||||
        downloaded = ydl.downloaded_info_dicts[0]
 | 
			
		||||
        self.assertEqual(downloaded['format_id'], 'aac-64')
 | 
			
		||||
 | 
			
		||||
        ydl = YDL({'format': 'mp3'})
 | 
			
		||||
        ie = YoutubeIE(ydl)
 | 
			
		||||
        ie._sort_formats(info_dict['formats'])
 | 
			
		||||
        ydl.process_ie_result(copy.deepcopy(info_dict))
 | 
			
		||||
        downloaded = ydl.downloaded_info_dicts[0]
 | 
			
		||||
        self.assertEqual(downloaded['format_id'], 'mp3-64')
 | 
			
		||||
 | 
			
		||||
        ydl = YDL({'prefer_free_formats': True})
 | 
			
		||||
        ie = YoutubeIE(ydl)
 | 
			
		||||
        ie._sort_formats(info_dict['formats'])
 | 
			
		||||
        ydl.process_ie_result(copy.deepcopy(info_dict))
 | 
			
		||||
        downloaded = ydl.downloaded_info_dicts[0]
 | 
			
		||||
        self.assertEqual(downloaded['format_id'], 'ogg-64')
 | 
			
		||||
 | 
			
		||||
    def test_format_selection_video(self):
 | 
			
		||||
        formats = [
 | 
			
		||||
            {'format_id': 'dash-video-low', 'ext': 'mp4', 'preference': 1, 'acodec': 'none', 'url': '_'},
 | 
			
		||||
 
 | 
			
		||||
@@ -786,7 +786,7 @@ class YoutubeDL(object):
 | 
			
		||||
            if video_formats:
 | 
			
		||||
                return video_formats[0]
 | 
			
		||||
        else:
 | 
			
		||||
            extensions = ['mp4', 'flv', 'webm', '3gp', 'm4a']
 | 
			
		||||
            extensions = ['mp4', 'flv', 'webm', '3gp', 'm4a', 'mp3', 'ogg', 'aac', 'wav']
 | 
			
		||||
            if format_spec in extensions:
 | 
			
		||||
                filter_f = lambda f: f['ext'] == format_spec
 | 
			
		||||
            else:
 | 
			
		||||
 
 | 
			
		||||
@@ -267,10 +267,12 @@ def parseOpts(overrideArguments=None):
 | 
			
		||||
        action='store', dest='format', metavar='FORMAT', default=None,
 | 
			
		||||
        help=(
 | 
			
		||||
            'video format code, specify the order of preference using'
 | 
			
		||||
            ' slashes: -f 22/17/18 .  -f mp4 , -f m4a and  -f flv  are also'
 | 
			
		||||
            ' supported. You can also use the special names "best",'
 | 
			
		||||
            ' "bestvideo", "bestaudio", "worst", "worstvideo" and'
 | 
			
		||||
            ' "worstaudio". By default, youtube-dl will pick the best quality.'
 | 
			
		||||
            ' slashes, as in -f 22/17/18 . '
 | 
			
		||||
            ' Instead of format codes, you can select by extension for the '
 | 
			
		||||
            'extensions aac, m4a, mp3, mp4, ogg, wav, webm. '
 | 
			
		||||
            'You can also use the special names "best",'
 | 
			
		||||
            ' "bestvideo", "bestaudio", "worst". '
 | 
			
		||||
            ' By default, youtube-dl will pick the best quality.'
 | 
			
		||||
            ' Use commas to download multiple audio formats, such as'
 | 
			
		||||
            ' -f  136/137/mp4/bestvideo,140/m4a/bestaudio.'
 | 
			
		||||
            ' You can merge the video and audio of two formats into a single'
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user