在代码里提交视频链接
先在控制台创建API密钥,再从服务器或脚本向POST /v1/transcriptions提交视频链接。Python或其他HTTP客户端都可以调用。接口文档列出了请求字段和状态码。
wait=60会让请求最多等待60秒。收到响应后先保存转录ID;等待时间用完,只表示这次HTTP请求结束,后台任务仍会继续。
后续通过GET /v1/transcriptions/:id查询同一个任务,不要再发起一次转录。queued、fetching和transcribing都表示尚未完成;completed后读取文本,failed时处理错误。
应用里要分清“还在处理”和“转录失败”。网络慢或视频无法访问,都不该被当成一份成功但没有内容的转录文本。
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只展示响应结构,示例文字并非来自前面链接中的视频。
{
"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都有先取可用字幕、再转录音频的路径,但这不是全部支持平台。
做多平台接入时,按来源能力表校验链接和选项,别在界面里提供平台不支持的组合。