# YouTube Data API 的 captions.download 下载别人视频的字幕，为什么报 403？

> YouTube Data API 只允许视频的编辑者下载字幕，别人的视频必然 403。改用什么接口拿这些字幕，费用和代码。

网页版：https://okdata.online/zh/answers/youtube-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 文档](https://developers.google.com/youtube/v3/docs/captions/download)写得很明白：这个方法要求用户对视频有编辑权限。登录了的观众并不是编辑者，所以别人的视频永远下不了。

## 官方 API 允许做什么

| 方法 | 配额消耗 | 能用在别人的视频上吗 |
|---|---|---|
| `captions.list` | 50 单位 | 能，列出字幕轨 |
| `captions.download` | 200 单位 | 不能，只限编辑者 |

列出来只能证明字幕轨存在，拿不到一个字。消耗数字来自 Google 的[配额表](https://developers.google.com/youtube/v3/determine_quota_cost)。

## 任何公开视频都能拿到文字

[YouTube 视频字幕](/zh/apis/youtube/videos/transcript/get/)对有字幕的公开视频都有效，不管是谁上传的。传视频 ID，想要的话再传一个优先语言：

```bash
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 之类的语音识别。

批量处理的做法见[视频转文字方案](/zh/solutions/transcripts/)，全部错误码见[错误说明](/zh/docs/errors/)。

## 用到的接口

- [YouTube 视频字幕](https://okdata.online/zh/apis/youtube/videos/transcript/get/) `youtube.videos.transcript.get`：$0.004/次

更新于 2026-11-12
