video-transcript — 视频台词提取
从B站/YouTube等视频链接提取台词文本,便于后续分析、问答、二次创作。
能力
- 有字幕的视频:直接提取字幕文本,保留时间戳
- 无字幕的视频:自动下载音频 → ASR 语音转写(本地 FunASR 或 SiliconFlow API)
- 本地 ASR:使用本地 FunASR 模型,无需 API Key,隐私更好
- 输出格式:纯文本(带时间戳)或 SRT 字幕格式
- 大文件处理:超过 25MB 的音频自动分段转写
触发词
当用户提到以下意图时使用此技能:
- "提取视频台词"、"提取字幕"、"视频转文字"
- "把视频的文字内容提取出来"、"视频内容转文本"
- "帮我分析这个视频"、"这个视频讲了什么"
- "transcript"、"视频转写"、"语音转文字"
- 用户提供了 B站/YouTube 视频链接并要求提取内容
前置条件
必须安装
- yt-dlp:
pip install yt-dlp - ffmpeg:
pip install imageio-ffmpeg(脚本自动使用内置 ffmpeg,无需系统安装) - Python 依赖:
pip install httpx - funasr(本地 ASR,推荐):
pip install funasr modelscope
- 安装后首次运行会自动下载模型,或使用本地缓存
- 默认模型缓存路径:~/.cache/modelscope/hub/models/FunAudioLLM/Fun-ASR-Nano-2512/
可选依赖
- B站直链辅助脚本
scripts/bilibili_transcript.py需要:pip install bilibili-api-python requests - 如需指定已有 FunASR Python 环境,设置
VIDEO_TRANSCRIPT_FUNASR_PYTHON - 如需指定本地模型目录,设置
VIDEO_TRANSCRIPT_FUNASR_MODEL_DIR或LOCAL_ASR_MODEL
ASR 后端选择
- 本地 ASR(推荐,默认):使用本地 FunASR 模型,无需 API Key
- 自动使用 ModelScope 本地缓存,无需重新下载
- 首次使用需安装 funasr:
pip install funasr modelscope - API ASR:使用 SiliconFlow API,需配置 API Key
- 设置
SILICONFLOW_API_KEY环境变量 - 或运行时通过
--api-key参数传入 - 获取地址:https://cloud.siliconflow.cn
B站 Cookie 配置(按需)
B站视频可能触发反爬机制(HTTP 412)。如果公开视频可直接下载,则不需要 Cookie;如果下载失败,再提供浏览器 Cookie。
有两种方式,推荐方式一:
方式一:导出 Cookie 文件(一次性设置,永久有效)
1. 在 Chrome/Edge 打开 B站(www.bilibili.com)并登录
2. 安装扩展:Get cookies.txt LOCALLY
- Chrome 应用商店搜索 "Get cookies.txt LOCALLY"
- 或访问:https://github.com/agarrh/Get-cookies.txt-LOALLY
3. 在 B站页面点击扩展图标 → Export → 保存为 cookies.txt
4. 以后每次使用,传入参数:--cookies cookies.txt
方式二:从浏览器直接读取(每次需关闭浏览器)
# 先关闭 Chrome/Edge,再运行
python scripts/video-transcript.py <B站链接> --cookies-from-browser edge
> 💡 Cookie 文件一次导出后可用数天至数周,过期后重新导出即可。
使用方式
基本用法
请帮我提取这个视频的台词:https://www.bilibili.com/video/BVxxxxxxx
指定格式
请把这个视频的内容提取为SRT字幕格式:https://www.youtube.com/watch?v=xxxxx
指定语言
请帮我提取这个英文视频的台词(语言设为英文):https://www.youtube.com/watch?v=xxxxx
执行步骤
当用户请求提取视频台词时,按以下步骤执行。不要把用户的 Cookie、API Key 或下载到的音视频文件写入技能目录;临时音频和中间文件应放到系统临时目录或用户指定输出目录。
- 解析链接:确认视频链接类型(B站/YouTube等)
- 判断是否需要 cookie:如果是 B站链接,需要 --cookies 或 --cookies-from-browser 参数
- 安装依赖:如果 yt-dlp 或 ffmpeg 未安装,先安装
- 执行脚本:
python scripts/video-transcript.py <视频链接> --format txt --lang zh --output-dir <输出目录>
B站视频需要加 cookie 参数:
python scripts/video-transcript.py <B站链接> --cookies cookies.txt --format txt --lang zh - 读取结果:读取输出文件内容
- 返回结果:将提取的文本返回给用户
参数说明
--format txt:纯文本格式(默认)--format srt:SRT 字幕格式--lang zh:中文(默认)--lang en:英文--lang auto:自动检测语言--asr-backend local:使用本地 FunASR 模型(默认,推荐)--asr-backend api:使用 SiliconFlow API--asr-backend auto:自动选择(有 API Key 用 API,否则用本地)--local-model <path>:指定本地 FunASR 模型路径--api-key <key>:SiliconFlow API Key--cookies <path>:Cookie 文件路径(Netscape 格式,用于B站)--cookies-from-browser <browser>:从浏览器提取 cookie(chrome/edge/firefox)
输出格式
纯文本格式(txt)
# 视频标题
# 作者: UP主名称
# 时长: 5.2分钟
[00:00 - 00:15] 大家好,今天我们来聊一下这个话题
[00:15 - 00:30] 首先我们要理解一个基本概念
...
SRT 字幕格式(srt)
1
00:00:00,000 --> 00:00:15,000
大家好,今天我们来聊一下这个话题
2
00:00:15,000 --> 00:00:30,000
首先我们要理解一个基本概念
技术架构
视频链接 → yt-dlp 下载 → 尝试提取字幕
↓ 有字幕 → 解析 SRT → 格式化输出
↓ 无字幕 → 下载音频(WAV)
↓ 本地 FunASR(默认)
↓ SiliconFlow API(需 --asr-backend api)
→ 格式化输出
安全与隐私
- 不要把个人 Cookie、API Key、账号信息、下载的视频/音频缓存打包进技能目录或上传到市场。
--cookies只传入用户本机 Cookie 文件路径;不要复制 Cookie 文件内容到对话、日志或技能文件。--api-key仅用于临时运行;更推荐使用SILICONFLOW_API_KEY环境变量。- 本地 ASR 默认只在本机处理音频;API ASR 会把音频片段发送到 SiliconFlow,请在调用前提醒用户。
注意事项
- B站反爬:B站视频可能需要 cookie 才能下载,否则报 HTTP 412 错误。请使用
--cookies或--cookies-from-browser参数 - 本地 ASR(推荐):默认使用本地 FunASR 模型,无需 API Key,隐私更好
- 首次使用需安装:
pip install funasr modelscope - 会自动使用 ModelScope 本地缓存(
~/.cache/modelscope/) - API ASR:如需使用 SiliconFlow API,需设置
SILICONFLOW_API_KEY并加--asr-backend api参数 - 长视频(超过30分钟)的 ASR 转写需要较长时间,请提醒用户等待
- 输出文件默认保存在临时目录,重要结果请提醒用户保存
未来扩展
- 说话人分离(Speaker Diarization):识别"谁在说话"
- 实时流式转写
- 多语言混合识别
- 视频关键帧提取配合文本分析