~/social/youtube-transcript-scraper
YouTube Subtitle & Transcript Scraper——JSON、SRT、VTT、LLM 多格式输出
从视频、Shorts、播放列表与频道中提取 YouTube 字幕与文字稿,输出为 JSON、SRT、VTT、纯文本,或适合 LLM 使用的干净文本。支持 100+ 种语言、丰富的元数据、无需 API 密钥——提取失败不收费。
媒体
TypeScriptInnerTube
全球
分类social / 媒体
语言TypeScript
技术栈TypeScript, InnerTube
市场全球
输出干净、RAG 就绪的 JSON
核心特性
单一输入即可处理视频、Shorts、youtu.be 短链接、播放列表与频道——可在同一次运行中混合使用
五种输出格式——JSON(带时间戳)、SRT、VTT、纯文本,以及 LLM 就绪格式(去除 [Music]、[Applause] 与说话人标签)
支持 100+ 种语言,可设置优先级语言列表,并可切换是否回退到自动生成字幕
丰富的元数据——标题、频道、简介、发布日期、播放量、缩略图、时长与可用语言
批量处理整个播放列表与频道,支持 maxVideos 上限与 1–10 的并发数
支持住宅代理,并可选提供 cookie 以减少机器人检测拦截
多层提取机制——最多跨 InnerTube 客户端提供九级回退,并以 yt-dlp PO-token 作为最后手段
熔断机制与逐条错误处理,确保大批量任务持续运行
应用场景
- AI/ML 团队基于视频语音构建 RAG 或微调数据集(输出 LLM 就绪文本)
- 内容团队将文字稿二次创作为博客文章、节目笔记与社交媒体文案
- SEO 营销人员提取可检索的视频文本,用于收录与关键词研究
- 需要标准 SRT/VTT 字幕文件的编辑与出版方
- 批量采集整个频道或播放列表文字稿的研究人员
- 无需 YouTube API 密钥即可获取结构化、带时间戳字幕的开发者
输入参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
urls | array | 可选 | YouTube URL 或裸 ID——视频、Shorts、youtu.be 链接、播放列表或频道。运行时为必填。 |
outputFormat | string | 可选 | 文字稿格式:json、srt、vtt、text 或 llm(默认:json)。 |
languages | array | 可选 | 按优先级排序的字幕语言偏好,使用 ISO 639-1 代码(默认:en)。 |
includeAutoGenerated | boolean | 可选 | 当没有人工字幕时,是否回退到自动生成字幕(默认:true)。 |
maxVideos | number | 可选 | 每次运行处理的视频数量上限,例如用于播放列表/频道场景(默认:0 表示不限)。 |
maxConcurrency | number | 可选 | 并行处理的视频数,1–10(默认:3)。 |
proxyConfiguration | object | 可选 | 代理设置;默认使用固定为美国的 Apify 住宅代理。 |
youtubeCookies | string | 可选 | 可选的 YouTube cookie(Cookie 请求头或 cookies.txt),用于减少机器人检测拦截。 |
输出示例
1{
2 "videoId": "dQw4w9WgXcQ",
3 "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
4 "title": "Rick Astley - Never Gonna Give You Up (Official Video)",
5 "channelName": "Rick Astley",
6 "channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
7 "publishDate": "2009-10-25",
8 "viewCount": 1761003712,
9 "availableLanguages": ["en", "de-DE", "ja", "pt-BR", "es-419"],
10 "language": "en",
11 "isAutoGenerated": false,
12 "duration": 213,
13 "wordCount": 487,
14 "segmentCount": 61,
15 "text": "We're no strangers to love, you know the rules and so do I...",
16 "segments": [{ "text": "We're no strangers to love", "start": 18.64, "end": 21.88 }],
17 "error": null
18}
价格
按事件计费:每份成功提取的文字稿只收费一次——提取失败的视频永远不收费。你可以直接输入整个频道或播放列表,只为实际拿到的字幕付费。
使用建议
- RAG 与微调场景请使用
outputFormat: llm——它会移除非语音标注,让你的向量嵌入只看到干净的文本。 - 请保持住宅代理开启。 YouTube 会激进地封锁数据中心 IP;该 Actor 默认使用美国住宅代理正是出于这个原因。
- 大批量任务请将
maxConcurrency从 1–3 开始,再逐步提高——并发过高会增加大型频道抓取时触发速率限制的风险。
常见问题
我需要 YouTube API 密钥或登录吗?
不需要。该 Actor 直接提取字幕——无需 YouTube Data API 密钥,也无需登录。你可以选择性提供 cookie 输入,以减少部分视频出现的“Sign in to confirm you're not a bot”拦截。
支持哪些语言与字幕类型?
支持 100 多种语言。提供一份按优先级排序的 ISO 639-1 代码列表(默认:en);该 Actor 会优先使用人工创建的字幕,并在未关闭 includeAutoGenerated 的情况下回退到自动生成字幕。
提取失败的视频会收费吗?
不会。计费方式为按事件计费,仅在文字稿成功保存后才会产生一次计费事件。提取失败的视频会在输出中显示 error 字段,且不会产生费用。
可以获取适合 RAG 使用的干净 LLM 就绪文本吗?
可以。将 outputFormat 设为 'llm',即可去除 [Music]/[Applause] 等标注与说话人标签,生成适合生成向量嵌入与微调的干净文本。