aboutsummaryrefslogtreecommitdiff
path: root/youtube_dl
diff options
context:
space:
mode:
authordirkf <fieldhouse@gmx.net>2025-01-06 01:24:30 +0000
committerdirkf <fieldhouse@gmx.net>2025-01-06 01:24:30 +0000
commit00ad2b8ca12d4f9b830ed83876d0d1ab3d698675 (patch)
treefcfa28c569cf4d9e2521bbf121793ac5378ce235 /youtube_dl
parentab7c61ca29ed1d1216d463d01794eb112a9144d5 (diff)
[YouTube] Refactor subtitle processing
* move to internal function * use `traverse-obj()`
Diffstat (limited to 'youtube_dl')
-rw-r--r--youtube_dl/extractor/youtube.py46
1 files changed, 24 insertions, 22 deletions
diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py
index e9603d155..56957a661 100644
--- a/youtube_dl/extractor/youtube.py
+++ b/youtube_dl/extractor/youtube.py
@@ -2415,9 +2415,9 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
'is_live': is_live,
}
- pctr = try_get(
+ pctr = traverse_obj(
player_response,
- lambda x: x['captions']['playerCaptionsTracklistRenderer'], dict)
+ ('captions', 'playerCaptionsTracklistRenderer', T(dict)))
if pctr:
def process_language(container, base_url, lang_code, query):
lang_subs = []
@@ -2431,28 +2431,30 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
})
container[lang_code] = lang_subs
- subtitles = {}
- for caption_track in (pctr.get('captionTracks') or []):
- base_url = caption_track.get('baseUrl')
- if not base_url:
- continue
- if caption_track.get('kind') != 'asr':
- lang_code = caption_track.get('languageCode')
- if not lang_code:
+ def process_subtitles():
+ subtitles = {}
+ for caption_track in traverse_obj(pctr, (
+ 'captionTracks', lambda _, v: v.get('baseUrl'))):
+ if not base_url:
continue
- process_language(
- subtitles, base_url, lang_code, {})
- continue
- automatic_captions = {}
- for translation_language in (pctr.get('translationLanguages') or []):
- translation_language_code = translation_language.get('languageCode')
- if not translation_language_code:
+ if caption_track.get('kind') != 'asr':
+ lang_code = caption_track.get('languageCode')
+ if not lang_code:
+ continue
+ process_language(
+ subtitles, base_url, lang_code, {})
continue
- process_language(
- automatic_captions, base_url, translation_language_code,
- {'tlang': translation_language_code})
- info['automatic_captions'] = automatic_captions
- info['subtitles'] = subtitles
+ automatic_captions = {}
+ for translation_language in traverse_obj(pctr, (
+ 'translationLanguages', lambda _, v: v.get('languageCode'))):
+ translation_language_code = translation_language['languageCode']
+ process_language(
+ automatic_captions, base_url, translation_language_code,
+ {'tlang': translation_language_code})
+ info['automatic_captions'] = automatic_captions
+ info['subtitles'] = subtitles
+
+ process_subtitles()
parsed_url = compat_urllib_parse_urlparse(url)
for component in (parsed_url.fragment, parsed_url.query):