360 Secure SkillHub
360 安全技能中心

subtitles

该 Skill 通过 TranscriptOut 的 HTTP 接口获取指定 YouTube 视频已有字幕轨道,支持 json、text、srt、vtt、srv3 格式与手动/自动字幕选择,可选返回标题等元数据;使用需配置 API Key,按次消耗积分,错误码携带机器可读字段。

artemchuikin
artemchuikin
热度 40.68
最近更新 2026-08-24 03:39:24
分类:效率依赖:第三方 API / 代码执行应用场景:视频编辑 / 翻译 / 语言学习 / 文件转换

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add subtitles
Metadata
name
subtitles
description
Reach for this when subtitles are wanted from a YouTube video: following foreign-language content, reading along, translating speech, language practice, or exporting ready SRT/VTT files. Skip it for uploading subtitles or account chores.
version
1.0.0
user-invocable
true
compatibility
Requires internet access to reach api.transcriptout.com. No additional runtimes or dependencies needed.
required_environment_variables
[{"name":"TRANSCRIPTOUT_API_KEY","prompt":"Your TranscriptOut API key (starts with sk_)","help":"Free account at https://transcriptout.com (100 credits on signup, no card). Create the key in the dashboard.","required_for":"all API requests"}]
metadata
{"openclaw":{"emoji":"📺","requires":{"env":["TRANSCRIPTOUT_API_KEY"]},"primaryEnv":"TRANSCRIPTOUT_API_KEY","homepage":"https://transcriptout.com"},"hermes":{"tags":["youtube","subtitles","srt","vtt","video","translation"],"category":"media"}}

Subtitles

Fetch YouTube video subtitles via TranscriptOut.com.

Setup

If $TRANSCRIPTOUT_API_KEY is not set, read references/auth-setup.md and follow the instructions there to get and store the key.

Required Header

Every request needs one header:

  • Authorization: Bearer $TRANSCRIPTOUT_API_KEY

Every response is one JSON envelope. Success: {"ok": true, "request_id": "...", "data": {...}}. Error: {"ok": false, "code": "...", "detail": "...", "request_id": "..."}. Branch on the machine-readable code, not on the human text. The remaining credit balance rides in the X-Credits-Remaining response header.

GET /v1/transcript · 1 credit

Fetch the subtitles of any YouTube video: timed JSON segments, plain text, or ready-made SRT/VTT files.

# SRT body inside the JSON envelope
curl -s "https://api.transcriptout.com/v1/transcript?video=VIDEO_URL_OR_ID&format=srt" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"

# or the raw .srt file itself
curl -s "https://api.transcriptout.com/v1/transcript?video=VIDEO_URL_OR_ID&format=srt&download=true" \
  -H "Authorization: Bearer $TRANSCRIPTOUT_API_KEY"
Param Required Default Values
video yes - YouTube URL (full/short/shorts) or 11-char video ID
lang no en language code of the track (en, de, ...)
format no json json, text, srt, vtt, srv3
kind no manual if present manual, auto
segment no auto tracks: 180 (80 for srt/vtt). Manual tracks keep the author's lines 20-5000, max characters per segment
video_metadata no false true adds data.metadata (title, channel, duration, views) for the same 1 credit
download no false true returns the raw file instead of the JSON envelope (text/srt/vtt/srv3 only)

With format=srt or format=vtt the default segmenting for auto-generated tracks is subtitle-sized (~80 characters per cue). Manual tracks keep the author's own line breaks in every format. download=true returns the bare file instead of the JSON envelope.

Response for format=json. With format=text/srt/vtt/srv3 the transcript field is one string in that format:

{
  "ok": true,
  "request_id": "req_...",
  "data": {
    "video_id": "dQw4w9WgXcQ",
    "language": "en",
    "kind": "manual",
    "transcript": [
      { "text": "Never gonna give you up", "start": 18.0, "duration": 4.12 },
      { "text": "Never gonna let you down", "start": 22.12, "duration": 3.85 }
    ],
    "available_langs": [
      { "code": "en", "kind": "manual", "name": "English" },
      { "code": "en", "kind": "auto", "name": "English (auto-generated)" }
    ]
  }
}

Tips

  • format=text is the cheapest form to reason over. Ask for json only when timestamps matter.
  • Transcript AND title/channel wanted? One call: video_metadata=true. Never a separate /v1/video first.
  • Transcribe last: search and listings are for choosing, and pulling transcripts for a whole results page nobody asked to read is the fastest way to burn a balance.

Errors

Code Meaning Action
400/422 Bad parameter Fix the request. Credit refunded automatically
401 Bad or missing API key Check the key. It must start with sk_
402 Out of credits transcriptout.com/billing
404 No captions on that language/track, or bad ID Definitive answer, do not retry. Try another lang or kind=auto. Billed
410 Video removed Do not retry
451 Age-restricted or members-only Do not retry
429 Rate limit (200 req/min per key) Wait, respect Retry-After. Refunded
502 Failed on YouTube's side One retry is reasonable. Billed
503 Service at capacity Retry after Retry-After. Refunded

Every error body carries a machine-readable code and a request_id. Include the request_id when contacting support.