问答

YouTube 报 TranscriptsDisabled 是什么意思,还能拿到字幕吗?

简短回答

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

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

两种完全不同的原因

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

花很少的钱复查一遍

把同一个视频交给 YouTube 视频字幕。请求不是从你的 IP 发出去的,结果反映的就是视频本身:

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 说的就是不扣费:

{ "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 视频详情会把简介放在 text 里返回,每次 $0.004。
  • 自己频道的视频:在 YouTube Studio 里上传字幕,再重新获取。

让批处理的账算得清楚

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

整批处理的做法和费用见视频转文字方案,全部错误码见错误说明。

更新于