# YouTube 报 TranscriptsDisabled 是什么意思，还能拿到字幕吗？

> youtube-transcript-api 为什么报 TranscriptsDisabled，怎么分清 YouTube 视频真没字幕还是请求被拦了，以及没字幕的视频怎么处理。

网页版：https://okdata.online/zh/answers/youtube-transcripts-disabled/

**简短回答：**TranscriptsDisabled 的意思是库没找到能读的字幕轨。要分清视频真没字幕还是请求被拦，换一个来源再查一次：YouTube 视频字幕接口有字幕就返回全文，$0.004；视频确实没有字幕时返回 not_found，不扣费。

跑一批 200 个视频，有 30 个报 `TranscriptsDisabled`。其中一部分确实没有字幕；另一部分在浏览器里明明能看到 CC 按钮，youtube-transcript-api 的 issue 里也有人反馈过一模一样的情况。决定怎么处理之前，得先把这两类分开。

## 两种完全不同的原因

1. **视频本来就没有字幕轨。** 作者关掉了字幕，或者 YouTube 还没生成自动字幕（新视频常常要等一阵），又或者整条视频只有音乐没有人声。不存在的字幕，什么工具都拿不到。
2. **请求被区别对待了。** YouTube 把你的 IP 当成可疑来源时，你的代码拿到的页面看起来就像一个没字幕的视频。报错写的是禁用，问题其实出在请求上。

## 花很少的钱复查一遍

把同一个视频交给 [YouTube 视频字幕](/zh/apis/youtube/videos/transcript/get/)。请求不是从你的 IP 发出去的，结果反映的就是视频本身：

```bash
curl -s -G "https://api.okdata.online/v1/youtube/videos/transcript/get" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  -d id=VIDEO_ID -d fields=lang,text
```

没有字幕的视频会这样返回，`charged: false` 说的就是不扣费：

```json
{ "code": "not_found", "message": "No YouTube transcript with that ID was found.", "request_id": "…", "charged": false, "retry": "no" }
```

| 结果 | 费用 |
|---|---|
| 拿到字幕 | $0.004 |
| `not_found`，没有字幕 | 0 |
| 任何错误（限流、超时、上游失败） | 0 |

所以复查那 30 个视频最多花 $0.12，真没字幕的每多一个就少花一份。

## 真没字幕的视频怎么办

- **刚发布的视频**：隔一天再查，自动字幕经常晚一点才出来。
- **演讲、播客类**：对你有权下载的音频跑 Whisper 之类的语音识别，这是没有字幕轨时唯一能拿到文字的办法。
- **教程类**：先看简介。很多作者会把讲稿或章节贴在那里，[YouTube 视频详情](/zh/apis/youtube/videos/get/)会把简介放在 `text` 里返回，每次 $0.004。
- **自己频道的视频**：在 YouTube Studio 里上传字幕，再重新获取。

## 让批处理的账算得清楚

每个视频记一个结果：`ok`、`no_captions` 或 `error`。错误的重试，新视频排到之后再查，剩下的才送去语音识别。返回结果不会标明字幕是作者上传的还是自动生成的，引用自动字幕里的原话时要多核对一下。

整批处理的做法和费用见[视频转文字方案](/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
