视频链接
↓
下载视频文件
↓
提取音频轨道
↓
语音转文字 → 原始文案
↓
清理标签和 emoji
↓
组装元数据 → 最终输出
看起来不复杂,但每一步都有坑。坑在哪里、怎么绕过去,后面一一细说。
技术选型:三个依赖,缺一不可在动手之前,先把工具选对。我最终只用了三个,没有多余的库。依赖越少,维护成本越低,换台机器也容易跑起来。yt-dlpB站、YouTube、小红书、微博、快手、推特,你能想到的视频网站它基本都支持。视频、音频、字幕、元数据全能拿,是整个系统的底层支柱。ffmpeg音视频处理的瑞士军刀。专门用来从视频里抽出音频,转成16kHz单声道MP3——这是语音识别最友好的格式。Silicon Flow 的 SenseVoiceSmall阿里达摩院开源的多语言语音识别模型,Silicon Flow提供了免费API,中文识别效果扎实,支持中英混合。关键是:完全免费,不限次数。你可能会问,为啥不用OpenAI的Whisper?本地部署要GPU,API调用要绑信用卡。对个人开发者来说太重了。SenseVoiceSmall免费、快速、准确率够用,性价比拉满。三个工具,分工明确,没有冗余。完整开发流程:从0到跑通先说一个认知前提——这不是在”写代码”,是在”描述需求”。我没有手写一行代码。全程就三件事:说清楚要什么,让AI生成,跑不通贴报错让它改。我是程序员出身,写过十几年代码,但这次整个过程反而没碰键盘写过一行逻辑。第一步:一次性把需求说清楚很多人让AI写代码失败,不是AI能力不够,是需求没说清楚。上来就说”帮我做一个视频文案采集工具”,AI给你的东西十有八九对不上——要么太简单,要么方向跑偏。正确做法是:把你想要的结果描述得足够具体。我给AI的prompt大概是这样的:
帮我写一个Python脚本,功能是:输入一个视频链接(支持抖音、B站、YouTube、小红书),自动下载视频,需要安装yt-dlp工具, 用ffmpeg提取音频,调用Silicon Flow的SenseVoiceSmall API做语音识别,输出完整文案。同时提取视频的标题、作者、点赞数、收藏数、封面链接等元数据。API key从.env文件读取。
注意几个关键点:
-
说清楚支持哪些平台,不然AI可能只写一个平台的逻辑 -
指定用哪个API,不然AI可能给你Whisper或其他付费方案 -
说明配置管理方式(从.env读),不然API key会被硬编码进脚本 -
列出要输出哪些字段,AI才知道元数据要提取到什么程度
一次说清楚,AI基本能给你一个完整的可运行脚本。第二步:跑起来,报错就贴回去拿到脚本之后,直接跑。大概率第一次不会完全成功——可能是依赖没装、可能是某个平台的解析逻辑有问题、可能是API调用格式不对。这都正常。解决方式就一个:把完整报错贴回给AI。第三步:封装成Skill,以后直接调用脚本跑通之后,多做一步——把它封装成Skill。Skill是什么?就是一个带说明书的可复用工具包。你给AI写一份描述文件(SKILL.md),告诉它这个工具是干什么的、触发词是什么、配置在哪里、输出哪些字段。以后在任何对话里,只要你说”帮我采集这个视频的文案”,AI就知道去调用这个工具,不需要每次重新解释需求。不封装也能用,但封装之后的好处很实在:
-
换电脑、换项目,整个文件夹拷过去直接用 -
改API key只改 .env,不动代码 -
以后想加功能(比如自动存到飞书),直接告诉AI”在现有Skill基础上加一个……”,它知道从哪里改起
文件结构很简单:
视频文案采集/
├── SKILL.md # 工具说明(触发词、依赖、输出格式)
├── .env.example # 配置模板(提交版本库)
├── .env # 真实配置(存API key,不提交)
├── requirements.txt # 依赖清单
└── scripts/
└── collect_video.py # 核心脚本
SKILL.md里写什么?核心就三块:这个工具做什么、需要什么环境变量、输出哪些字段。不需要很长,AI能读懂、下次能直接调用就够了。两个绕不开的技术细节抖音的特殊处理其他平台用yt-dlp一行调用搞定,抖音比较特殊,单独说。抖音的核心数据藏在页面的window._ROUTER_DATAJSON里。要拿到它,得用iPhone Safari的User-Agent模拟手机访问,再用正则把JSON抠出来:
headers ={
"User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 17_0...)"
}
resp = requests.get(url, headers=headers, timeout=30)
match= re.search(
r"window\._ROUTER_DATA\s*=\s*(.*?)",
resp.text, re.DOTALL
)
data = json.loads(match.group(1))
从这个JSON里递归提取,可以拿到17个字段:标题、作者、点赞、收藏、评论、封面、视频地址等,比yt-dlp拿到的元数据更完整。另一个细节:抖音视频链接分两种,带playwm的是有水印版,把它替换成play就是无水印版:
clean_url = dirty_url.replace("playwm","play")
就这一行,第三方去水印工具的钱省掉了。emoji正则差点把中文全删了语音识别的原始输出里夹着这种标签和emoji,需要清掉。我写清理正则时踩了一个隐蔽的坑。最初把emoji范围设成了\U000024C2到\U0001F251,本意是覆盖一些封闭符号。结果这个范围恰好跨越了整个CJK中文字符区(U+4E00-U+9FFF),所有中文被一起删掉了。测试时输出只剩”15″两个字符,我懵了半天才反应过来。这个坑的教训很简单:处理Unicode范围时,一定要先确认边界不覆盖CJK区(U+4E00-U+9FFF)。如果让AI写这段正则,记得在prompt里加一句”注意不要误删中文字符”。这套工具,真正的价值在哪里表面上这是一个扒文案的脚本。但真正值钱的地方是两件事。一、数据资产归自己用第三方工具,数据在别人的服务器上。哪天工具涨价、跑路、改规则,你的积累说没就没。但如果数据在自己的电脑、自己的服务器、自己的知识库里,这才是真正属于你的资产。我把采集到的文案存在Obsidian里,每条都带17个字段的元数据。想分析爆款结构?让AI批量读100条文案,找共同模式。想建选题库?从收藏最高的视频里筛。数据只有归自己,才能产生复利。二、时间被放大了以前手动扒一条文案——打开工具,等广告,复制,清emoji,整理格式——5分钟一条。现在丢链接,10秒出结果。这不是快了一点,是效率放大了30倍。腾出来的时间,可以用来做更高价值的分析和创作,而不是卡在信息搬运上。15分钟快速上手看到这里,行动路径就很清晰了:
-
注册Silicon Flow,拿到免费API key -
安装yt-dlp和ffmpeg,不会装就让AI帮你写安装命令 -
把需求描述清楚,让AI生成脚本,贴上你的API key -
丢一个视频链接进去,看文案出现在屏幕上
注意一个细节:Silicon Flow里免费模型的名称是FunAudioLLM/SenseVoiceSmall(不带Pro前缀)。旁边有个Pro/SenseVoiceSmall,是付费版,选错会直接扣费,别手滑。全程不超过15分钟。15分钟后,你就有了一套完全属于自己的、免费的、不限次数的文案采集系统。真正限制你的不是技术,是遇到问题时的第一反应——是去问AI,还是去搜百度。早搞早受益。
