问答
YouTube Data API 的 captions.download 下载别人视频的字幕,为什么报 403?
简短回答
因为 captions.download 要求调用者对视频有编辑权限,别人上传的视频换什么 OAuth 授权范围都是 403。不属于你的公开视频,可以用 YouTube 视频字幕接口拿带时间戳的字幕文本,每个视频 $0.004,不需要 OAuth,也不用建 Google Cloud 项目。
OAuth 流程做好了,申请了 youtube.force-ssl 权限,captions.list 也能看到英文字幕轨,可一调 captions.download 就是 403 forbidden。代码没写错。Google 的 captions.download 文档写得很明白:这个方法要求用户对视频有编辑权限。登录了的观众并不是编辑者,所以别人的视频永远下不了。
官方 API 允许做什么
| 方法 | 配额消耗 | 能用在别人的视频上吗 |
|---|---|---|
captions.list |
50 单位 | 能,列出字幕轨 |
captions.download |
200 单位 | 不能,只限编辑者 |
列出来只能证明字幕轨存在,拿不到一个字。消耗数字来自 Google 的配额表。
任何公开视频都能拿到文字
YouTube 视频字幕对有字幕的公开视频都有效,不管是谁上传的。传视频 ID,想要的话再传一个优先语言:
curl -s -G "https://api.okdata.online/v1/youtube/videos/transcript/get" \
-H "Authorization: Bearer $OKDATA_API_KEY" \
-d id=dQw4w9WgXcQ \
-d lang=en
返回的对象里有 video_id、lang、text(完整字幕)和 segments,每段带 start、end,单位是秒。这里没有字幕文件格式可选,播放器要 SRT 或 VTT 的话,用分段自己拼。
| 数量 | 费用 |
|---|---|
| 1 个视频 | $0.004 |
| 50 个视频 | $0.20 |
| 1,000 个视频 | $4.00 |
不用配置 OAuth 授权页,不用建 Google Cloud 项目,也不用盯着配额。按返回的字幕计费;没有字幕的视频返回 not_found,不收钱。
和官方字幕文件的区别
- 拿到的是文字和时间,不是带样式的原始字幕文件。
lang只是偏好,实际拿到哪种语言看返回的lang。- 返回结果不标明字幕是作者上传的还是自动生成的。
- 只支持公开视频,私享视频拿不到。
什么时候用官方 API 更对
- 自己的频道,或者你代运营、有编辑权限的客户频道。 这时
captions.download能用,给的是原始格式,还能用tfmt转格式,配额内免费。 - 只想知道有没有字幕轨。
captions.list就能回答,不用下载任何东西。 - 视频根本没有字幕。 两条路都没用,只能对你有权使用的音频跑 Whisper 之类的语音识别。
更新于