Pytube更新后字幕语言代码格式变更,如何用通配符匹配字幕?
解决Pytube更新后字幕通配符匹配的问题
我之前刚踩过这个坑!Pytube更新后YouTube返回的字幕代码格式确实变了:手动上传的字幕会带一串唯一后缀,自动生成的则是a.语言代码的格式,原来的get_by_language_code因为是精确匹配,自然没法用了。这里分享几个亲测好用的解决办法:
方法一:前缀匹配通用字幕
写个简单的遍历筛选函数,就能实现类似通配符的效果,覆盖手动和自动生成的字幕:
from pytube import YouTube video_link = r'https://www.youtube.com/watch?v=w7daiJHfjoY' yt = YouTube(video_link) def get_caption_by_lang(yt, target_lang): # 遍历所有字幕项,匹配目标语言的前缀 for caption_code, caption in yt.captions.items(): # 匹配手动字幕(格式如de.xxx)或自动生成字幕(格式如a.de) if caption_code.startswith(f"{target_lang}.") or caption_code == f"a.{target_lang}": return caption # 找不到对应字幕时返回None return None # 获取德语字幕示例 german_caption = get_caption_by_lang(yt, 'de') if german_caption: print(f"成功找到字幕:{german_caption.lang}") # 生成SRT格式的字幕文本 print(german_caption.generate_srt_captions()) else: print("未找到目标语言的字幕")
方法二:优先选择手动上传的字幕
如果想优先获取准确率更高的人工上传字幕,可以调整筛选逻辑,先找手动字幕,找不到再 fallback 到自动生成的:
def get_preferred_caption(yt, target_lang): # 优先遍历手动上传的字幕(带后缀的格式) for caption_code, caption in yt.captions.items(): if caption_code.startswith(f"{target_lang}."): print("使用人工上传字幕") return caption # 手动字幕不存在时,再找自动生成的 for caption_code, caption in yt.captions.items(): if caption_code == f"a.{target_lang}": print("使用自动生成字幕") return caption return None german_caption = get_preferred_caption(yt, 'de')
补充说明
那个带后缀的字幕代码确实不是固定的,每个视频的手动字幕都会有唯一的后缀标识,所以必须用这种前缀匹配的方式定位。以后如果Pytube的API格式再变,只需要调整匹配规则就行,核心思路就是遍历筛选~
内容的提问来源于stack exchange,提问作者codingsnake99
相关产品推荐
相关产品推荐

