YouTube Transcript API,有字幕取字幕,没有就转录音频

用YouTube Transcript API提交视频链接,就能读取JSON、纯文本、SRT或VTT。有可用字幕时保留字幕文本;没有可用字幕时,AI会把音频转成文字。

  • 优先读取字幕,没有可用字幕再用AI转录
  • 字幕和AI转录同价:每分钟1积分
  • 支持watch、youtu.be、Shorts和嵌入链接

先确定应用需要哪种文本来源

常见视频链接都能提交
watch页面、youtu.be短链接、Shorts、嵌入链接和live链接都能定位到视频,带不带www都可以。链接可识别,不代表正在直播的视频也能处理。
优先保留创作者的字幕
source=auto会先找可用字幕,优先使用创作者上传的版本,其次才是自动生成的字幕,不使用自动翻译的字幕。
没有字幕也能获取文字
找不到可用字幕时,AI会转录视频音频。若始终需要重新识别音频,直接设置source=stt。
每份文本都能查到来源
查看transcript_source即可区分:youtube_captions表示YouTube字幕,speech_to_text表示AI转录。
按视频时长计费
字幕和AI转录都按每分钟1积分计费,不足1分钟向上取整。转录失败或取消,不扣积分。

在代码里提交视频链接

先在控制台创建API密钥,再从服务器或脚本向POST /v1/transcriptions提交视频链接。Python或其他HTTP客户端都可以调用。接口文档列出了请求字段和状态码。

wait=60会让请求最多等待60秒。收到响应后先保存转录ID;等待时间用完,只表示这次HTTP请求结束,后台任务仍会继续。

后续通过GET /v1/transcriptions/:id查询同一个任务,不要再发起一次转录。queued、fetching和transcribing都表示尚未完成;completed后读取文本,failed时处理错误。

应用里要分清“还在处理”和“转录失败”。网络慢或视频无法访问,都不该被当成一份成功但没有内容的转录文本。

cURL
curl -X POST "https://api.transcript1.com/v1/transcriptions?wait=60" \
  -H "Authorization: Bearer $TRANSCRIPT1_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"youtube","url":"https://youtu.be/dQw4w9WgXcQ"}'

用transcript_source判断文字从哪里来

接入YouTube 字幕 API后,可以用transcript_source和caption_kind记录字幕来源及类型。billed_minutes是视频时长向上取整后的分钟数,完整字段见转录对象说明。

创作者上传的字幕保留发布时的文字,没有逐词时间戳。YouTube自动生成的字幕提供每个词的开始时间;AI转录则提供开始时间、结束时间和置信度。

段落里的start和end以秒为单位,方便做点击跳转、同步笔记,或把相关片段交给AI助手。只有界面确实需要逐词数据时,再加include=words。

下面的JSON只展示响应结构,示例文字并非来自前面链接中的视频。

JSON响应节选
{
  "id": "tr_8fK2Lm0PqRsTuVwXyZaBcD",
  "status": "completed",
  "transcript_source": "youtube_captions",
  "caption_kind": "auto_generated",
  "language": "en",
  "billed_minutes": 4,
  "transcript": {
    "text": "Welcome back to the channel. Today we are looking at how transcripts are made.",
    "segments": [
      { "start": 0, "end": 4.2, "speaker": null, "language": "en", "text": "Welcome back to the channel." }
    ]
  }
}

要已发布的字幕,还是重新转录音频?

source默认是auto。设置captions(仅字幕)后,没有可用字幕就返回no_captions,不扣积分;设置stt则始终转录音频。具体组合见来源选项。

必须保留视频已发布的字幕时,选captions。需要重新识别音频或区分说话人时,选AI转录。source=auto搭配diarize=true会跳过字幕,直接处理音频。

captions与diarize=true不能同时使用,请求会被拒绝,不会悄悄忽略其中一项。

字幕语言必须符合请求的language;自动选择时则跟随视频原始语言,不使用自动翻译的字幕。给AI转录指定语言只是提供识别提示,并不会把录音翻译成该语言。

始终转录音频的请求体
{
  "platform": "youtube",
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "source": "stt"
}

先看错误原因,再决定要不要重试

私密视频、年龄限制和正在进行的直播都不是多试几次就能解决的问题。captions(仅字幕)返回no_captions时,先决定是否接受AI转录;任务还在处理中,就按原ID继续查询。错误文档说明了各类情况。

需要重试创建请求时,遵守Idempotency-Key约定。复用近期转录是另一项功能,要求同一个视频和相同选项。不要把缓存当成免费:缓存文本仍可能作为新任务计费,直接读取已有的已完成任务才不消耗分钟数。

同一个创建接口也接受TikTok、Instagram等支持的平台链接。YouTube、X、TikTok和Bluesky都有先取可用字幕、再转录音频的路径,但这不是全部支持平台。

做多平台接入时,按来源能力表校验链接和选项,别在界面里提供平台不支持的组合。

先免费试用60分钟

验证邮箱后即可领取60分钟免费额度,仅限1次,无需绑卡。

获取API密钥

常见问题

没找到答案?联系我们

视频没有字幕,也能拿到文字吗?

可以。默认source=auto会在没有可用字幕时用AI转录音频。若只接受字幕、不希望转录音频,设置source=captions。

可以提交哪些YouTube链接?

支持watch页面、youtu.be短链接、Shorts、嵌入链接和live链接。频道页面或只有播放列表的链接会返回422 invalid_url。正在进行的直播仍无法处理。

私密视频能处理吗?

不能。只能获取公开视频,或设为不公开但可以通过链接观看的视频。私密、年龄限制和正在直播的视频会失败。如果原始文件在手,可以改用文件上传。

怎么收费,能先免费试吗?

每分钟1积分,不足1分钟向上取整,字幕和AI转录同价。新账号验证邮箱后可一次性领取60分钟免费额度,不用绑卡。

这是Python的youtube-transcript-api包吗?

不是。transcript1是托管的REST API。使用Python时,带上API密钥发送HTTP请求即可。