You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:25:41