]> jfr.im git - yt-dlp.git/commitdiff
[extractor/bilibili] Fix for downloading wrong subtitles (#6358)
authorLXYan2333 <redacted>
Sat, 4 Mar 2023 14:44:48 +0000 (22:44 +0800)
committerGitHub <redacted>
Sat, 4 Mar 2023 14:44:48 +0000 (20:14 +0530)
Closes #6357
Authored by: LXYan2333

yt_dlp/extractor/bilibili.py

index 2252840b3aabdf9ab56d9249d529162bf965f084..c344397792f44fdcd355aacbb227c4c3702e65cc 100644 (file)
@@ -81,7 +81,7 @@ def json2srt(self, json_data):
                          f'{line["content"]}\n\n')
         return srt_data
 
-    def _get_subtitles(self, video_id, initial_state, cid):
+    def _get_subtitles(self, video_id, aid, cid):
         subtitles = {
             'danmaku': [{
                 'ext': 'xml',
@@ -89,7 +89,8 @@ def _get_subtitles(self, video_id, initial_state, cid):
             }]
         }
 
-        for s in traverse_obj(initial_state, ('videoData', 'subtitle', 'list')) or []:
+        video_info_json = self._download_json(f'https://api.bilibili.com/x/player/v2?aid={aid}&cid={cid}', video_id)
+        for s in traverse_obj(video_info_json, ('data', 'subtitle', 'subtitles', ...)):
             subtitles.setdefault(s['lan'], []).append({
                 'ext': 'srt',
                 'data': self.json2srt(self._download_json(s['subtitle_url'], video_id))
@@ -331,7 +332,7 @@ def _real_extract(self, url):
             'timestamp': traverse_obj(initial_state, ('videoData', 'pubdate')),
             'duration': float_or_none(play_info.get('timelength'), scale=1000),
             'chapters': self._get_chapters(aid, cid),
-            'subtitles': self.extract_subtitles(video_id, initial_state, cid),
+            'subtitles': self.extract_subtitles(video_id, aid, cid),
             '__post_extractor': self.extract_comments(aid),
             'http_headers': {'Referer': url},
         }