mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	[wistia] improve format extraction and extract subtitles(closes #22590)
This commit is contained in:
		| @@ -13,8 +13,7 @@ from ..utils import ( | ||||
|  | ||||
| class WistiaIE(InfoExtractor): | ||||
|     _VALID_URL = r'(?:wistia:|https?://(?:fast\.)?wistia\.(?:net|com)/embed/(?:iframe|medias)/)(?P<id>[a-z0-9]{10})' | ||||
|     _API_URL = 'http://fast.wistia.com/embed/medias/%s.json' | ||||
|     _IFRAME_URL = 'http://fast.wistia.net/embed/iframe/%s' | ||||
|     _EMBED_BASE_URL = 'http://fast.wistia.com/embed/' | ||||
|  | ||||
|     _TESTS = [{ | ||||
|         'url': 'http://fast.wistia.net/embed/iframe/sh7fpupwlt', | ||||
| @@ -67,10 +66,10 @@ class WistiaIE(InfoExtractor): | ||||
|         video_id = self._match_id(url) | ||||
|  | ||||
|         data_json = self._download_json( | ||||
|             self._API_URL % video_id, video_id, | ||||
|             self._EMBED_BASE_URL + 'medias/%s.json' % video_id, video_id, | ||||
|             # Some videos require this. | ||||
|             headers={ | ||||
|                 'Referer': url if url.startswith('http') else self._IFRAME_URL % video_id, | ||||
|                 'Referer': url if url.startswith('http') else self._EMBED_BASE_URL + 'iframe/' + video_id, | ||||
|             }) | ||||
|  | ||||
|         if data_json.get('error'): | ||||
| @@ -95,27 +94,61 @@ class WistiaIE(InfoExtractor): | ||||
|                     'url': aurl, | ||||
|                     'width': int_or_none(a.get('width')), | ||||
|                     'height': int_or_none(a.get('height')), | ||||
|                     'filesize': int_or_none(a.get('size')), | ||||
|                 }) | ||||
|             else: | ||||
|                 aext = a.get('ext') | ||||
|                 is_m3u8 = a.get('container') == 'm3u8' or aext == 'm3u8' | ||||
|                 formats.append({ | ||||
|                     'format_id': atype, | ||||
|                 display_name = a.get('display_name') | ||||
|                 format_id = atype | ||||
|                 if atype and atype.endswith('_video') and display_name: | ||||
|                     format_id = '%s-%s' % (atype[:-6], display_name) | ||||
|                 f = { | ||||
|                     'format_id': format_id, | ||||
|                     'url': aurl, | ||||
|                     'tbr': int_or_none(a.get('bitrate')), | ||||
|                     'vbr': int_or_none(a.get('opt_vbitrate')), | ||||
|                     'width': int_or_none(a.get('width')), | ||||
|                     'height': int_or_none(a.get('height')), | ||||
|                     'filesize': int_or_none(a.get('size')), | ||||
|                     'vcodec': a.get('codec'), | ||||
|                     'container': a.get('container'), | ||||
|                     'ext': 'mp4' if is_m3u8 else aext, | ||||
|                     'protocol': 'm3u8' if is_m3u8 else None, | ||||
|                     'tbr': int_or_none(a.get('bitrate')) or None, | ||||
|                     'preference': 1 if atype == 'original' else None, | ||||
|                 }) | ||||
|                 } | ||||
|                 if display_name == 'Audio': | ||||
|                     f.update({ | ||||
|                         'vcodec': 'none', | ||||
|                     }) | ||||
|                 else: | ||||
|                     f.update({ | ||||
|                         'width': int_or_none(a.get('width')), | ||||
|                         'height': int_or_none(a.get('height')), | ||||
|                         'vcodec': a.get('codec'), | ||||
|                     }) | ||||
|                 if a.get('container') == 'm3u8' or aext == 'm3u8': | ||||
|                     ts_f = f.copy() | ||||
|                     ts_f.update({ | ||||
|                         'ext': 'ts', | ||||
|                         'format_id': f['format_id'].replace('hls-', 'ts-'), | ||||
|                         'url': f['url'].replace('.bin', '.ts'), | ||||
|                     }) | ||||
|                     formats.append(ts_f) | ||||
|                     f.update({ | ||||
|                         'ext': 'mp4', | ||||
|                         'protocol': 'm3u8_native', | ||||
|                     }) | ||||
|                 else: | ||||
|                     f.update({ | ||||
|                         'container': a.get('container'), | ||||
|                         'ext': aext, | ||||
|                         'filesize': int_or_none(a.get('size')), | ||||
|                     }) | ||||
|                 formats.append(f) | ||||
|  | ||||
|         self._sort_formats(formats) | ||||
|  | ||||
|         subtitles = {} | ||||
|         for caption in data.get('captions', []): | ||||
|             language = caption.get('language') | ||||
|             if not language: | ||||
|                 continue | ||||
|             subtitles[language] = [{ | ||||
|                 'url': self._EMBED_BASE_URL + 'captions/' + video_id + '.vtt?language=' + language, | ||||
|             }] | ||||
|  | ||||
|         return { | ||||
|             'id': video_id, | ||||
|             'title': title, | ||||
| @@ -124,4 +157,5 @@ class WistiaIE(InfoExtractor): | ||||
|             'thumbnails': thumbnails, | ||||
|             'duration': float_or_none(data.get('duration')), | ||||
|             'timestamp': int_or_none(data.get('createdAt')), | ||||
|             'subtitles': subtitles, | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Remita Amine
					Remita Amine