周三下午,你写好了"和这个播客聊天"的demo,本地跑得飞起。部署到服务器,第一行报错就来了:拿不到字幕。不是代码写错了,是YouTube把大部分数据中心IP的字幕请求挡在门外。
![]()
做视频类LLM应用,第一步往往最枯燥:把YouTube字幕干净地批量取出来。搜索某个频道、给播客做问答机器人、给演讲生成会议式摘要,都卡在这一步。常见的几条路,各有各的坑。
坑一:官方API只认自家视频。YouTube Data API 只给你拥有权限的视频提供字幕文件,别人的视频拿不到。
坑二:本地能跑,服务器不行。youtube-transcript-api 这类库在笔记本上表现很好,一旦从服务器发起请求就开始失败,原因是YouTube对多数数据中心IP的字幕请求做了拦截。
坑三:语言选错。热门视频的字幕列表里,志愿者翻译往往排在前面。你想要一场TED演讲的英文字幕,结果拿到的是阿拉伯语字幕。
三个坑都踩过之后,作者做了一个小工具放在Apify上,按使用量付费,只对真正返回的字幕收费。输入视频链接或ID,每个视频返回这些字段:
- text:整段字幕合成一个字符串
- chunks:按约1000字符切块,每块带起止秒数,可直接进向量库
- segments:每一行字幕及其时间戳
- 可选的srtvtt字幕文件
- 视频元数据(标题、频道、时长、播放量),不额外收费
它读取的是YouTube已有的字幕,包括创作者上传的和自动生成的。作者公布的发布测试里,49个不同类型的视频(演讲、新闻、播客、Shorts,共七种语言),两轮运行82次字幕抓取成功了81次。没有字幕的视频会返回一行 no_captions,不计费。
从Python调用只需要装一个客户端。传入视频链接列表和 chunkSize(每块字符数,设为0则关闭切块),遍历返回的数据集,状态不是 ok 的就跳过并打印错误。代码不复杂,重点在于它跑在云端,绕开了本地IP和服务器IP的差异。
真正让RAG管线好用的一点是时间戳。每个chunk都保留起止秒数,入库时可以拼出带时间点的深链,比如在URL后面加上 t=271s。机器人回答时能引用"TED,4:31"并附上可点击的链接,而不是含糊地说"视频里某处"。
语言也可以指定。默认返回视频的口语语言字幕,而不是列表里排第一的那份翻译;想优先德语就在输入里加 language 参数。
不想写代码的话,Apify的网页界面可以粘贴链接、点开始、下载CSV或JSON。它也能接进 n8n、Make、Zapier,或者通过Apify的MCP服务器作为AI智能体的工具使用——之后你可以直接对Claude或Cursor说:把这个视频的字幕取下来并总结。
几个需要提前知道的限制:它只读已有字幕,音乐视频和很短的片段经常没有;播放列表和频道输入还不支持,目前得逐个传视频链接;另外,字幕请用于搜索、分析和摘要,不要把人家的内容原样搬运发布。
回到开头那个报错。问题不在你的代码,在于请求从哪台机器发出、要的是哪份字幕。把这两件事交给一个跑在云端的执行器,剩下的向量化和检索才有得谈。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.