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

YouTube V3 API查询视频字幕存在性结果与播放器实际显示不一致问题

问题根因

你观察到的差异不是YouTube侧的bug,是YouTube Data API的返回逻辑和前端播放器的展示逻辑不一致导致的:

  • API返回的captions.list接口结果包含所有后台已生成的字幕资源,不管前端是否开放展示
  • 前端播放器只会展示创作者允许公开、且识别质量达标的字幕

从你拿到的返回结果可以看到该字幕的trackKind为asr,属于平台自动语音识别生成的字幕,两种情况会导致这类字幕不在前端展示:

  1. 视频创作者主动在后台关闭了「自动字幕展示」开关,属于创作者的内容隐私设置,该标记不会通过公开API返回
  2. 该自动字幕的识别准确率低于YouTube的最低展示阈值,平台自动隐藏避免误导用户

代码优化建议

你当前的判断逻辑只校验了字幕资源是否存在,如果你要判断的是用户可在播放器前端看到的字幕,可以增加字段过滤逻辑:

def get_youtube_caption_info(client, video_id):
    caption_request = client.captions().list(
            part='snippet,id',
            videoId=video_id,
        )
    caption_response = caption_request.execute()
    items = caption_response.get('items', [])
    if not items:
        return False
    for item in items:
        snippet = item.get('snippet', {})
        # 过滤掉草稿、非投放状态的字幕
        if snippet.get('status') == 'serving' and not snippet.get('isDraft'):
            # 如果你要完全对齐前端展示逻辑,可以额外过滤掉无名称的asr字幕,或者结合其他公开字段判断
            return True
    return False

如果你原本的需求就是判断视频是否生成过任何字幕(含后台未公开的),原有代码逻辑没有问题。

内容的提问来源于stack exchange,提问作者Brodan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:57:04