mirror of
				https://gitlab.com/ytdl-org/youtube-dl.git
				synced 2025-11-03 23:17:07 -05:00 
			
		
		
		
	Merge pull request #1341 from xanadu/master
add support for "-f mp4" for YouTube
This commit is contained in:
		@@ -192,7 +192,7 @@ def parseOpts(overrideArguments=None):
 | 
			
		||||
 | 
			
		||||
    video_format.add_option('-f', '--format',
 | 
			
		||||
            action='store', dest='format', metavar='FORMAT',
 | 
			
		||||
            help='video format code, specifiy the order of preference using slashes: "-f 22/17/18"')
 | 
			
		||||
            help='video format code, specifiy the order of preference using slashes: "-f 22/17/18". "-f mp4" and "-f flv" are also supported')
 | 
			
		||||
    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',
 | 
			
		||||
 
 | 
			
		||||
@@ -153,8 +153,9 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
			
		||||
                     $"""
 | 
			
		||||
    _NEXT_URL_RE = r'[\?&]next_url=([^&]+)'
 | 
			
		||||
    # Listed in order of quality
 | 
			
		||||
    _available_formats = ['38', '37', '46', '22', '45', '35', '44', '34', '18', '43', '6', '5', '17', '13',
 | 
			
		||||
                          '95', '94', '93', '92', '132', '151',
 | 
			
		||||
    _available_formats = ['38', '37', '46', '22', '45', '35', '44', '34', '18', '43', '6', '5', '36', '17', '13',
 | 
			
		||||
                          # Apple HTTP Live Streaming
 | 
			
		||||
                          '96', '95', '94', '93', '92', '132', '151',
 | 
			
		||||
                          # 3D
 | 
			
		||||
                          '85', '84', '102', '83', '101', '82', '100',
 | 
			
		||||
                          # Dash video
 | 
			
		||||
@@ -163,8 +164,10 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
			
		||||
                          # Dash audio
 | 
			
		||||
                          '141', '172', '140', '171', '139',
 | 
			
		||||
                          ]
 | 
			
		||||
    _available_formats_prefer_free = ['38', '46', '37', '45', '22', '44', '35', '43', '34', '18', '6', '5', '17', '13',
 | 
			
		||||
                                      '95', '94', '93', '92', '132', '151',
 | 
			
		||||
    _available_formats_prefer_free = ['38', '46', '37', '45', '22', '44', '35', '43', '34', '18', '6', '5', '36', '17', '13',
 | 
			
		||||
                                      # Apple HTTP Live Streaming
 | 
			
		||||
                                      '96', '95', '94', '93', '92', '132', '151',
 | 
			
		||||
                                      # 3D
 | 
			
		||||
                                      '85', '102', '84', '101', '83', '100', '82',
 | 
			
		||||
                                      # Dash video
 | 
			
		||||
                                      '138', '248', '137', '247', '136', '246', '245',
 | 
			
		||||
@@ -172,11 +175,18 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
			
		||||
                                      # Dash audio
 | 
			
		||||
                                      '172', '141', '171', '140', '139',
 | 
			
		||||
                                      ]
 | 
			
		||||
    _video_formats_map = {
 | 
			
		||||
        'flv': ['35', '34', '6', '5'],
 | 
			
		||||
        '3gp': ['36', '17', '13'],
 | 
			
		||||
        'mp4': ['38', '37', '22', '18'],
 | 
			
		||||
        'webm': ['46', '45', '44', '43'],
 | 
			
		||||
    }
 | 
			
		||||
    _video_extensions = {
 | 
			
		||||
        '13': '3gp',
 | 
			
		||||
        '17': 'mp4',
 | 
			
		||||
        '17': '3gp',
 | 
			
		||||
        '18': 'mp4',
 | 
			
		||||
        '22': 'mp4',
 | 
			
		||||
        '36': '3gp',
 | 
			
		||||
        '37': 'mp4',
 | 
			
		||||
        '38': 'mp4',
 | 
			
		||||
        '43': 'webm',
 | 
			
		||||
@@ -193,7 +203,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
			
		||||
        '101': 'webm',
 | 
			
		||||
        '102': 'webm',
 | 
			
		||||
 | 
			
		||||
        # videos that use m3u8
 | 
			
		||||
        # Apple HTTP Live Streaming
 | 
			
		||||
        '92': 'mp4',
 | 
			
		||||
        '93': 'mp4',
 | 
			
		||||
        '94': 'mp4',
 | 
			
		||||
@@ -234,6 +244,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
			
		||||
        '22': '720x1280',
 | 
			
		||||
        '34': '360x640',
 | 
			
		||||
        '35': '480x854',
 | 
			
		||||
        '36': '240x320',
 | 
			
		||||
        '37': '1080x1920',
 | 
			
		||||
        '38': '3072x4096',
 | 
			
		||||
        '43': '360x640',
 | 
			
		||||
@@ -597,13 +608,25 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
			
		||||
            video_url_list = [(f, url_map[f]) for f in existing_formats] # All formats
 | 
			
		||||
        else:
 | 
			
		||||
            # Specific formats. We pick the first in a slash-delimeted sequence.
 | 
			
		||||
            # For example, if '1/2/3/4' is requested and '2' and '4' are available, we pick '2'.
 | 
			
		||||
            # Format can be specified as itag or 'mp4' or 'flv' etc. We pick the highest quality
 | 
			
		||||
            # available in the specified format. For example,
 | 
			
		||||
            # if '1/2/3/4' is requested and '2' and '4' are available, we pick '2'.
 | 
			
		||||
            # if '1/mp4/3/4' is requested and '1' and '5' (is a mp4) are available, we pick '1'.
 | 
			
		||||
            # if '1/mp4/3/4' is requested and '4' and '5' (is a mp4) are available, we pick '5'.
 | 
			
		||||
            req_formats = req_format.split('/')
 | 
			
		||||
            video_url_list = None
 | 
			
		||||
            for rf in req_formats:
 | 
			
		||||
                if rf in url_map:
 | 
			
		||||
                    video_url_list = [(rf, url_map[rf])]
 | 
			
		||||
                    break
 | 
			
		||||
                if rf in self._video_formats_map:
 | 
			
		||||
                    for srf in self._video_formats_map[rf]:
 | 
			
		||||
                        if srf in url_map:
 | 
			
		||||
                            video_url_list = [(srf, url_map[srf])]
 | 
			
		||||
                            break
 | 
			
		||||
                    else:
 | 
			
		||||
                        continue
 | 
			
		||||
                    break
 | 
			
		||||
            if video_url_list is None:
 | 
			
		||||
                raise ExtractorError(u'requested format not available')
 | 
			
		||||
        return video_url_list
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user