YouTube V3 API查询视频字幕存在性结果与播放器实际显示不一致问题
问题根因
你观察到的差异不是YouTube侧的bug,是YouTube Data API的返回逻辑和前端播放器的展示逻辑不一致导致的:
- API返回的
captions.list接口结果包含所有后台已生成的字幕资源,不管前端是否开放展示 - 前端播放器只会展示创作者允许公开、且识别质量达标的字幕
从你拿到的返回结果可以看到该字幕的trackKind为asr,属于平台自动语音识别生成的字幕,两种情况会导致这类字幕不在前端展示:
- 视频创作者主动在后台关闭了「自动字幕展示」开关,属于创作者的内容隐私设置,该标记不会通过公开API返回
- 该自动字幕的识别准确率低于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
相关产品推荐
相关产品推荐

