From 47b8bf207b1206466f1aeaaf0c8ffec91be2fed0 Mon Sep 17 00:00:00 2001 From: Felix S Date: Sun, 27 Mar 2022 09:35:14 +0000 Subject: [PATCH] [go,viu] Extract subtitles from the m3u8 manifest (#3219) Authored by: fstirlitz --- yt_dlp/extractor/go.py | 8 +++++--- yt_dlp/extractor/viu.py | 3 +-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/yt_dlp/extractor/go.py b/yt_dlp/extractor/go.py index 2ccc6df21..f92e16600 100644 --- a/yt_dlp/extractor/go.py +++ b/yt_dlp/extractor/go.py @@ -217,6 +217,7 @@ def _real_extract(self, url): title = video_data['title'] formats = [] + subtitles = {} for asset in video_data.get('assets', {}).get('asset', []): asset_url = asset.get('value') if not asset_url: @@ -256,8 +257,10 @@ def _real_extract(self, url): error_message = ', '.join([error['message'] for error in errors]) raise ExtractorError('%s said: %s' % (self.IE_NAME, error_message), expected=True) asset_url += '?' + entitlement['uplynkData']['sessionKey'] - formats.extend(self._extract_m3u8_formats( - asset_url, video_id, 'mp4', m3u8_id=format_id or 'hls', fatal=False)) + fmts, subs = self._extract_m3u8_formats_and_subtitles( + asset_url, video_id, 'mp4', m3u8_id=format_id or 'hls', fatal=False) + formats.extend(fmts) + self._merge_subtitles(subs, target=subtitles) else: f = { 'format_id': format_id, @@ -281,7 +284,6 @@ def _real_extract(self, url): formats.append(f) self._sort_formats(formats) - subtitles = {} for cc in video_data.get('closedcaption', {}).get('src', []): cc_url = cc.get('value') if not cc_url: diff --git a/yt_dlp/extractor/viu.py b/yt_dlp/extractor/viu.py index abd553f18..b0a1fca68 100644 --- a/yt_dlp/extractor/viu.py +++ b/yt_dlp/extractor/viu.py @@ -88,10 +88,9 @@ def _real_extract(self, url): # r'(/hlsc_)[a-z]+(\d+\.m3u8)', # r'\1whe\2', video_data['href']) m3u8_url = video_data['href'] - formats = self._extract_m3u8_formats(m3u8_url, video_id, 'mp4') + formats, subtitles = self._extract_m3u8_formats_and_subtitles(m3u8_url, video_id, 'mp4') self._sort_formats(formats) - subtitles = {} for key, value in video_data.items(): mobj = re.match(r'^subtitle_(?P[^_]+)_(?P(vtt|srt))', key) if not mobj: