[youtube] Simplify format specification
This commit is contained in:
		| @@ -150,151 +150,68 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | |||||||
|                      (?(1).+)?                                                # if we found the ID, everything can follow |                      (?(1).+)?                                                # if we found the ID, everything can follow | ||||||
|                      $""" |                      $""" | ||||||
|     _NEXT_URL_RE = r'[\?&]next_url=([^&]+)' |     _NEXT_URL_RE = r'[\?&]next_url=([^&]+)' | ||||||
|     # Listed in order of quality |     _formats = { | ||||||
|     _available_formats = ['38', '37', '46', '22', '45', '35', '44', '34', '18', '43', '6', '5', '36', '17', '13', |         '5': {'ext': 'flv', 'width': 400, 'height': 240}, | ||||||
|                           # Apple HTTP Live Streaming |         '6': {'ext': 'flv', 'width': 450, 'height': 270}, | ||||||
|                           '96', '95', '94', '93', '92', '132', '151', |         '13': {'ext': '3gp'}, | ||||||
|                           # 3D |         '17': {'ext': '3gp', 'width': 176, 'height': 144}, | ||||||
|                           '85', '84', '102', '83', '101', '82', '100', |         '18': {'ext': 'mp4', 'width': 640, 'height': 360}, | ||||||
|                           # Dash video |         '22': {'ext': 'mp4', 'width': 1280, 'height': 720}, | ||||||
|                           '138', '137', '248', '136', '247', '135', '246', |         '34': {'ext': 'flv', 'width': 640, 'height': 360}, | ||||||
|                           '245', '244', '134', '243', '133', '242', '160', |         '35': {'ext': 'flv', 'width': 854, 'height': 480}, | ||||||
|                           # Dash audio |         '36': {'ext': '3gp', 'width': 320, 'height': 240}, | ||||||
|                           '141', '172', '140', '171', '139', |         '37': {'ext': 'mp4', 'width': 1920, 'height': 1080}, | ||||||
|                           ] |         '38': {'ext': 'mp4', 'width': 4096, 'height': 3072}, | ||||||
|     _video_extensions = { |         '43': {'ext': 'webm', 'width': 640, 'height': 360}, | ||||||
|         '13': '3gp', |         '44': {'ext': 'webm', 'width': 854, 'height': 480}, | ||||||
|         '17': '3gp', |         '45': {'ext': 'webm', 'width': 1280, 'height': 720}, | ||||||
|         '18': 'mp4', |         '46': {'ext': 'webm', 'width': 1920, 'height': 1080}, | ||||||
|         '22': 'mp4', |  | ||||||
|         '36': '3gp', |  | ||||||
|         '37': 'mp4', |  | ||||||
|         '38': 'mp4', |  | ||||||
|         '43': 'webm', |  | ||||||
|         '44': 'webm', |  | ||||||
|         '45': 'webm', |  | ||||||
|         '46': 'webm', |  | ||||||
|  |  | ||||||
|         # 3d videos |         # 3d videos | ||||||
|         '82': 'mp4', |         '82': {'ext': 'mp4', 'height': 360, 'resolution': '360p', 'format_note': '3D', 'preference': -20}, | ||||||
|         '83': 'mp4', |         '83': {'ext': 'mp4', 'height': 480, 'resolution': '480p', 'format_note': '3D', 'preference': -20}, | ||||||
|         '84': 'mp4', |         '84': {'ext': 'mp4', 'height': 720, 'resolution': '720p', 'format_note': '3D', 'preference': -20}, | ||||||
|         '85': 'mp4', |         '85': {'ext': 'mp4', 'height': 1080, 'resolution': '1080p', 'format_note': '3D', 'preference': -20}, | ||||||
|         '100': 'webm', |         '100': {'ext': 'webm', 'height': 360, 'resolution': '360p', 'format_note': '3D', 'preference': -20}, | ||||||
|         '101': 'webm', |         '101': {'ext': 'webm', 'height': 480, 'resolution': '480p', 'format_note': '3D', 'preference': -20}, | ||||||
|         '102': 'webm', |         '102': {'ext': 'webm', 'height': 720, 'resolution': '720p', 'format_note': '3D', 'preference': -20}, | ||||||
|  |  | ||||||
|         # Apple HTTP Live Streaming |         # Apple HTTP Live Streaming | ||||||
|         '92': 'mp4', |         '92': {'ext': 'mp4', 'height': 240, 'resolution': '240p', 'format_note': 'HLS', 'preference': -10}, | ||||||
|         '93': 'mp4', |         '93': {'ext': 'mp4', 'height': 360, 'resolution': '360p', 'format_note': 'HLS', 'preference': -10}, | ||||||
|         '94': 'mp4', |         '94': {'ext': 'mp4', 'height': 480, 'resolution': '480p', 'format_note': 'HLS', 'preference': -10}, | ||||||
|         '95': 'mp4', |         '95': {'ext': 'mp4', 'height': 720, 'resolution': '720p', 'format_note': 'HLS', 'preference': -10}, | ||||||
|         '96': 'mp4', |         '96': {'ext': 'mp4', 'height': 1080, 'resolution': '1080p', 'format_note': 'HLS', 'preference': -10}, | ||||||
|         '132': 'mp4', |         '132': {'ext': 'mp4', 'height': 240, 'resolution': '240p', 'format_note': 'HLS', 'preference': -10}, | ||||||
|         '151': 'mp4', |         '151': {'ext': 'mp4', 'height': 72, 'resolution': '72p', 'format_note': 'HLS', 'preference': -10}, | ||||||
|  |  | ||||||
|         # Dash mp4 |         # DASH mp4 video | ||||||
|         '133': 'mp4', |         '133': {'ext': 'mp4', 'height': 240, 'resolution': '240p', 'format_note': 'DASH video', 'preference': -40}, | ||||||
|         '134': 'mp4', |         '134': {'ext': 'mp4', 'height': 360, 'resolution': '360p', 'format_note': 'DASH video', 'preference': -40}, | ||||||
|         '135': 'mp4', |         '135': {'ext': 'mp4', 'height': 480, 'resolution': '480p', 'format_note': 'DASH video', 'preference': -40}, | ||||||
|         '136': 'mp4', |         '136': {'ext': 'mp4', 'height': 720, 'resolution': '720p', 'format_note': 'DASH video', 'preference': -40}, | ||||||
|         '137': 'mp4', |         '137': {'ext': 'mp4', 'height': 1080, 'resolution': '1080p', 'format_note': 'DASH video', 'preference': -40}, | ||||||
|         '138': 'mp4', |         '138': {'ext': 'mp4', 'height': 1081, 'resolution': '>1080p', 'format_note': 'DASH video', 'preference': -40}, | ||||||
|         '160': 'mp4', |         '160': {'ext': 'mp4', 'height': 192, 'resolution': '192p', 'format_note': 'DASH video', 'preference': -40}, | ||||||
|  |  | ||||||
|         # Dash mp4 audio |         # Dash mp4 audio | ||||||
|         '139': 'm4a', |         '139': {'ext': 'm4a', 'format_note': 'DASH audio', 'vcodec': 'none', 'abr': 48, 'preference': -50}, | ||||||
|         '140': 'm4a', |         '140': {'ext': 'm4a', 'format_note': 'DASH audio', 'vcodec': 'none', 'abr': 128, 'preference': -50}, | ||||||
|         '141': 'm4a', |         '141': {'ext': 'm4a', 'format_note': 'DASH audio', 'vcodec': 'none', 'abr': 256, 'preference': -50}, | ||||||
|  |  | ||||||
|         # Dash webm |         # Dash webm | ||||||
|         '171': 'webm', |         '242': {'ext': 'webm', 'height': 240, 'resolution': '240p', 'format_note': 'DASH webm', 'preference': -40}, | ||||||
|         '172': 'webm', |         '243': {'ext': 'webm', 'height': 360, 'resolution': '360p', 'format_note': 'DASH webm', 'preference': -40}, | ||||||
|         '242': 'webm', |         '244': {'ext': 'webm', 'height': 480, 'resolution': '480p', 'format_note': 'DASH webm', 'preference': -40}, | ||||||
|         '243': 'webm', |         '245': {'ext': 'webm', 'height': 480, 'resolution': '480p', 'format_note': 'DASH webm', 'preference': -40}, | ||||||
|         '244': 'webm', |         '246': {'ext': 'webm', 'height': 480, 'resolution': '480p', 'format_note': 'DASH webm', 'preference': -40}, | ||||||
|         '245': 'webm', |         '247': {'ext': 'webm', 'height': 720, 'resolution': '720p', 'format_note': 'DASH webm', 'preference': -40}, | ||||||
|         '246': 'webm', |         '248': {'ext': 'webm', 'height': 1080, 'resolution': '1080p', 'format_note': 'DASH webm', 'preference': -40}, | ||||||
|         '247': 'webm', |  | ||||||
|         '248': 'webm', |         # Dash webm audio | ||||||
|     } |         '171': {'ext': 'webm', 'vcodec': 'none', 'format_note': 'DASH webm audio', 'abr': 48, 'preference': -50}, | ||||||
|     _video_dimensions = { |         '172': {'ext': 'webm', 'vcodec': 'none', 'format_note': 'DASH webm audio', 'abr': 256, 'preference': -50}, | ||||||
|         '5': {'width': 400, 'height': 240}, |  | ||||||
|         '6': {}, |  | ||||||
|         '13': {}, |  | ||||||
|         '17': {'width': 176, 'height': 144}, |  | ||||||
|         '18': {'width': 640, 'height': 360}, |  | ||||||
|         '22': {'width': 1280, 'height': 720}, |  | ||||||
|         '34': {'width': 640, 'height': 360}, |  | ||||||
|         '35': {'width': 854, 'height': 480}, |  | ||||||
|         '36': {'width': 320, 'height': 240}, |  | ||||||
|         '37': {'width': 1920, 'height': 1080}, |  | ||||||
|         '38': {'width': 4096, 'height': 3072}, |  | ||||||
|         '43': {'width': 640, 'height': 360}, |  | ||||||
|         '44': {'width': 854, 'height': 480}, |  | ||||||
|         '45': {'width': 1280, 'height': 720}, |  | ||||||
|         '46': {'width': 1920, 'height': 1080}, |  | ||||||
|         '82': {'height': 360, 'display': '360p'}, |  | ||||||
|         '83': {'height': 480, 'display': '480p'}, |  | ||||||
|         '84': {'height': 720, 'display': '720p'}, |  | ||||||
|         '85': {'height': 1080, 'display': '1080p'}, |  | ||||||
|         '92': {'height': 240, 'display': '240p'}, |  | ||||||
|         '93': {'height': 360, 'display': '360p'}, |  | ||||||
|         '94': {'height': 480, 'display': '480p'}, |  | ||||||
|         '95': {'height': 720, 'display': '720p'}, |  | ||||||
|         '96': {'height': 1080, 'display': '1080p'}, |  | ||||||
|         '100': {'height': 360, 'display': '360p'}, |  | ||||||
|         '101': {'height': 480, 'display': '480p'}, |  | ||||||
|         '102': {'height': 720, 'display': '720p'}, |  | ||||||
|         '132': {'height': 240, 'display': '240p'}, |  | ||||||
|         '151': {'height': 72, 'display': '72p'}, |  | ||||||
|         '133': {'height': 240, 'display': '240p'}, |  | ||||||
|         '134': {'height': 360, 'display': '360p'}, |  | ||||||
|         '135': {'height': 480, 'display': '480p'}, |  | ||||||
|         '136': {'height': 720, 'display': '720p'}, |  | ||||||
|         '137': {'height': 1080, 'display': '1080p'}, |  | ||||||
|         '138': {'height': 1081, 'display': '>1080p'}, |  | ||||||
|         '139': {'display': '48k'}, |  | ||||||
|         '140': {'display': '128k'}, |  | ||||||
|         '141': {'display': '256k'}, |  | ||||||
|         '160': {'height': 192, 'display': '192p'}, |  | ||||||
|         '171': {'display': '128k'}, |  | ||||||
|         '172': {'display': '256k'}, |  | ||||||
|         '242': {'height': 240, 'display': '240p'}, |  | ||||||
|         '243': {'height': 360, 'display': '360p'}, |  | ||||||
|         '244': {'height': 480, 'display': '480p'}, |  | ||||||
|         '245': {'height': 480, 'display': '480p'}, |  | ||||||
|         '246': {'height': 480, 'display': '480p'}, |  | ||||||
|         '247': {'height': 720, 'display': '720p'}, |  | ||||||
|         '248': {'height': 1080, 'display': '1080p'}, |  | ||||||
|     } |  | ||||||
|     _special_itags = { |  | ||||||
|         '82': '3D', |  | ||||||
|         '83': '3D', |  | ||||||
|         '84': '3D', |  | ||||||
|         '85': '3D', |  | ||||||
|         '100': '3D', |  | ||||||
|         '101': '3D', |  | ||||||
|         '102': '3D', |  | ||||||
|         '133': 'DASH Video', |  | ||||||
|         '134': 'DASH Video', |  | ||||||
|         '135': 'DASH Video', |  | ||||||
|         '136': 'DASH Video', |  | ||||||
|         '137': 'DASH Video', |  | ||||||
|         '138': 'DASH Video', |  | ||||||
|         '139': 'DASH Audio', |  | ||||||
|         '140': 'DASH Audio', |  | ||||||
|         '141': 'DASH Audio', |  | ||||||
|         '160': 'DASH Video', |  | ||||||
|         '171': 'DASH Audio', |  | ||||||
|         '172': 'DASH Audio', |  | ||||||
|         '242': 'DASH Video', |  | ||||||
|         '243': 'DASH Video', |  | ||||||
|         '244': 'DASH Video', |  | ||||||
|         '245': 'DASH Video', |  | ||||||
|         '246': 'DASH Video', |  | ||||||
|         '247': 'DASH Video', |  | ||||||
|         '248': 'DASH Video', |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     IE_NAME = u'youtube' |     IE_NAME = u'youtube' | ||||||
| @@ -1148,7 +1065,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | |||||||
|         Transform a dictionary in the format {itag:url} to a list of (itag, url) |         Transform a dictionary in the format {itag:url} to a list of (itag, url) | ||||||
|         with the requested formats. |         with the requested formats. | ||||||
|         """ |         """ | ||||||
|         existing_formats = [x for x in self._available_formats if x in url_map] |         existing_formats = [x for x in self._formats if x in url_map] | ||||||
|         if len(existing_formats) == 0: |         if len(existing_formats) == 0: | ||||||
|             raise ExtractorError(u'no known formats available for video') |             raise ExtractorError(u'no known formats available for video') | ||||||
|         video_url_list = [(f, url_map[f]) for f in existing_formats] # All formats |         video_url_list = [(f, url_map[f]) for f in existing_formats] # All formats | ||||||
| @@ -1410,28 +1327,13 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | |||||||
|  |  | ||||||
|         formats = [] |         formats = [] | ||||||
|         for itag, video_real_url in video_url_list: |         for itag, video_real_url in video_url_list: | ||||||
|             # Extension |             dct = { | ||||||
|             video_extension = self._video_extensions.get(itag, 'flv') |                 'format_id': itag, | ||||||
|             resolution = self._video_dimensions.get(itag, {}).get('display') |                 'url': video_real_url, | ||||||
|             width = self._video_dimensions.get(itag, {}).get('width') |                 'player_url': player_url, | ||||||
|             height = self._video_dimensions.get(itag, {}).get('height') |             } | ||||||
|             note = self._special_itags.get(itag) |             dct.update(self._formats[itag]) | ||||||
|  |             formats.append(dct) | ||||||
|             video_format = '{0} - {1}{2}'.format(itag if itag else video_extension, |  | ||||||
|                                               '%dx%d' % (width, height) if width is not None and height is not None else (resolution if resolution is not None else '???'), |  | ||||||
|                                               ' ('+self._special_itags[itag]+')' if itag in self._special_itags else '') |  | ||||||
|  |  | ||||||
|             formats.append({ |  | ||||||
|                 'url':         video_real_url, |  | ||||||
|                 'ext':         video_extension, |  | ||||||
|                 'format':      video_format, |  | ||||||
|                 'format_id':   itag, |  | ||||||
|                 'player_url':  player_url, |  | ||||||
|                 '_resolution': resolution, |  | ||||||
|                 'width':       width, |  | ||||||
|                 'height':      height, |  | ||||||
|                 'format_note': note, |  | ||||||
|             }) |  | ||||||
|  |  | ||||||
|         self._sort_formats(formats) |         self._sort_formats(formats) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Philipp Hagemeister
					Philipp Hagemeister