]> jfr.im git - yt-dlp.git/commitdiff
[plutotv] Extract subtitles from manifests
authorpukkandan <redacted>
Wed, 5 May 2021 18:50:28 +0000 (00:20 +0530)
committerpukkandan <redacted>
Thu, 6 May 2021 14:58:56 +0000 (20:28 +0530)
yt_dlp/extractor/plutotv.py

index a057524130c08bd3acf0c31712b2919486c3a67c..4ec2626bc80102ecc6eb77ce290e97429d28b01f 100644 (file)
@@ -78,9 +78,8 @@ class PlutoTVIE(InfoExtractor):
         },
     ]
 
-    def _to_ad_free_formats(self, video_id, formats):
-        ad_free_formats = []
-        m3u8_urls = set()
+    def _to_ad_free_formats(self, video_id, formats, subtitles):
+        ad_free_formats, ad_free_subtitles, m3u8_urls = [], {}, set()
         for format in formats:
             res = self._download_webpage(
                 format.get('url'), video_id, note='Downloading m3u8 playlist',
@@ -96,27 +95,32 @@ def _to_ad_free_formats(self, video_id, formats):
                 compat_urlparse.urljoin(first_segment_url.group(1), '0-end/master.m3u8'))
 
         for m3u8_url in m3u8_urls:
-            ad_free_formats.extend(
-                self._extract_m3u8_formats(
-                    m3u8_url, video_id, 'mp4', 'm3u8_native',
-                    m3u8_id='hls', fatal=False))
-        self._sort_formats(ad_free_formats)
-        return ad_free_formats
+            fmts, subs = self._extract_m3u8_formats_and_subtitles(
+                m3u8_url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
+            ad_free_formats.extend(fmts)
+            ad_free_subtitles = self._merge_subtitles(ad_free_subtitles, subs)
+        return ad_free_formats, ad_free_subtitles
 
     def _get_video_info(self, video_json, slug, series_name=None):
         video_id = video_json.get('_id', slug)
-        formats = []
+        formats, subtitles = [], {}
         for video_url in try_get(video_json, lambda x: x['stitched']['urls'], list) or []:
             if video_url.get('type') != 'hls':
                 continue
             url = url_or_none(video_url.get('url'))
-            formats.extend(
-                self._extract_m3u8_formats(
-                    url, video_id, 'mp4', 'm3u8_native',
-                    m3u8_id='hls', fatal=False))
+
+            fmts, subs = self._extract_m3u8_formats_and_subtitles(
+                url, video_id, 'mp4', 'm3u8_native', m3u8_id='hls', fatal=False)
+            formats.extend(fmts)
+            subtitles = self._merge_subtitles(subtitles, subs)
+
+        formats, subtitles = self._to_ad_free_formats(video_id, formats, subtitles)
+        self._sort_formats(formats)
+
         info = {
             'id': video_id,
-            'formats': self._to_ad_free_formats(video_id, formats),
+            'formats': formats,
+            'subtitles': subtitles,
             'title': video_json.get('name'),
             'description': video_json.get('description'),
             'duration': float_or_none(video_json.get('duration'), scale=1000),