Install
openclaw skills install @zhouq2039-lang/bilibili-video-parser-2把B站视频链接一键转成中文字幕连贯稿 + 结构化 HTML 分析报告。优先使用 CC 字幕秒出结果,无字幕时本地 faster-whisper 转写,不需要任何 API key。
openclaw skills install @zhouq2039-lang/bilibili-video-parser-2经常需要"读"B站视频里的内容——判断对账号有没有用、提炼观点、做素材库。 但 AI 模型本身不能听音频,必须借工具。这条 skill 就是那套工具的固化。
核心做法:
BV号api.bilibili.com/x/web-interface/view 公开 API 获取元数据(标题/UP主/时长/cid)api.bilibili.com/x/player/v2 获取CC字幕,有则直接用,跳过转写(秒出)playurl API 拿 DASH 音频流直链,用 Python 标准库 urllib 下载(不依赖外部 curl)faster-whisper(CPU、int8、base 模型)转写不需要:ffmpeg 外部命令、yt-dlp、curl、cookie、登录、API key。
faster-whisper 自带的 PyAV 已经能读 m4a 抽音轨。
B站CC字幕可直接从 API 获取时,完全跳过转写,速度极快。
以下权限均为执行B站链接解析任务所必需的最小权限。仅在用户明确提供B站链接(bilibili.com / b23.tv)时才触发,不执行任何与本任务无关的系统操作。
| 能力 | 用途 | 触发条件 | 最小化说明 |
|---|---|---|---|
| 网络请求 | 访问 api.bilibili.com 获取视频元数据、CC字幕、音频流直链 | 用户提供B站链接时 | 仅访问 bilibili.com 域名,不向任何第三方发送数据 |
| 网络请求(下载) | 下载音频流文件(DASH格式,仅音频) | 视频无CC字幕时 | 仅下载音频流,不下载视频画面;请求头含 Referer: bilibili.com |
| 网络请求(模型) | 首次运行时从 HuggingFace 下载 whisper base 模型(~74 MB) | 首次转写、模型未缓存时 | 下载到系统临时目录后缓存,之后不再重复下载 |
| Python 子进程 | 运行 faster-whisper 转写脚本(CPU、int8) | 无CC字幕、需转写时 | 仅调用 faster-whisper 库,无外部命令行调用 |
| 文件读写 | 保存连贯稿 txt 文件、写入 HTML 报告 | 转写/字幕获取完成后 | 输出到脚本 work/ 目录(可用 --out-dir 指定受控目录) |
| 临时文件 | 在系统 temp 目录存放音频文件和 whisper 模型 | 下载/转写期间 | 音频转写完成后自动删除(--keep-audio 可保留) |
不执行的操作:不读取用户本地任意文件、不访问B站以外的任意 URL(HuggingFace 模型下载除外)、不发送数据到任何第三方服务、不上传用户数据。
收到B站链接后,第一步不是直接跑脚本,而是先检查环境:
python3 --version
python3 -c "import faster_whisper; print('ok')"
如果报 ImportError,立即安装:
pip3 install faster-whisper
首次运行脚本时会自动从 HuggingFace 下载 base 模型(~74 MB)到系统临时目录,之后不再重复下载(模型已缓存)。
不需要。脚本全部使用 Python 标准库 urllib,不依赖外部 curl。
环境就绪后,直接跑:
python3 scripts/transcribe.py "https://www.bilibili.com/video/BV1Mu3y6NEzT"
# 或短链
python3 scripts/transcribe.py "https://b23.tv/xxx"
# 或直接传 BV号
python3 scripts/transcribe.py "BV1Mu3y6NEzT"
脚本会输出:
MMDD-<BV号>-连贯稿.txt(无时间戳,纯文本)MMDD-<BV号>-报告.html(交互式 HTML 报告)--print-transcript)如果视频有CC字幕,会直接使用字幕数据,跳过 Whisper 转写,速度极快(秒出)。
脚本内置的本地规则提取(local_analysis)只是兜底,质量有限。AI Agent 跑完脚本后,应自己读连贯稿做深度分析,再用 --analysis-json 注入,重新生成高质量报告:
# 1. AI 读连贯稿 → 产出 analysis.json(结构见下)
# 2. 注入 AI 分析,重建 HTML(跳过下载/转写,秒出)
python3 scripts/transcribe.py "<链接>" \
--from-transcript "MMDD-<BV号>-连贯稿.txt" \
--analysis-json "MMDD-<BV号>-analysis.json"
analysis.json 结构(与 local_analysis 返回一致):
{
"summary": "一句话总结",
"key_points": ["观点1", "观点2"],
"structure": {
"type": "口播科普",
"breakdown": {"开头钩子": "...", "核心论点": "...", "论据案例": "...", "结尾收束": "..."}
},
"quotes": [{"text": "金句1", "context": ""}],
"judgment": {"stance": "立场", "credibility": "可信度", "takeaway": "可借鉴点"},
"highlights": [{"name": "亮点名", "desc": "说明", "tag": "标签"}]
}
注意:whisper 转写文本常没有中文标点(空格分隔),
local_analysis已内置无标点降级切分,但 AI 深度分析仍建议基于连贯稿文件人工阅读后再写。
报告为单文件 HTML,打开即可直接浏览,包含六大模块:
| 模块 | 说明 |
|---|---|
| Hero 区 | 视频标题 + UP主 + 时长 |
| 一句话总结 | 智能提取核心观点,关键词高亮 |
| 金句卡片 | 2-3 句适合二次传播的金句 |
| 深度解析(胶囊书架) | 点击展开四张胶囊卡片 |
| - 核心观点 | 3-6 条核心观点,编号列表 |
| - 结构拆解 | 开场/核心/结尾分区 |
| - 内容判断 | 立场/可信度/可借鉴点 |
| - 内容亮点 | 观点排行列表 |
报告使用系统字体栈(不依赖外部字体 CDN),所有用户内容均经 HTML 转义防止 XSS。
拿到连贯稿和 HTML 报告后,AI 不要只甩出文件就结束。 先读取 MMDD-<BV号>-连贯稿.txt 文件的完整内容(终端默认只打印前 500 字摘要,不要依赖终端输出),再按以下结构输出分析,并把分析写成 JSON 注入回 HTML(--analysis-json,见上节,这样报告才是可发布级的,不要留脚本的兜底分析):
用一句话概括这个视频在讲什么。
根据视频类型,选择对应的结构框架来拆:
如果是口播/观点类:
| 结构 | 内容 |
|---|---|
| 开头钩子 | 视频前 5 秒用了什么话术抓住注意力 |
| 核心论点 | 主要在讲什么 |
| 论据/案例 | 用了什么例子支撑 |
| 结尾/CTA | 最后怎么收的,有没有引导行动 |
如果是知识/教程类:
| 结构 | 内容 |
|---|---|
| 主题 | 这期在教什么 |
| 步骤拆解 | 按顺序列出教学步骤 |
| 关键提醒 | 有没有强调注意事项 |
| 适用场景 | 适合什么人/什么场景用 |
如果是测评/推荐类:
| 结构 | 内容 |
|---|---|
| 痛点切入 | 开头怎么戳中用户痛点 |
| 产品卖点 | 列出提到的卖点 |
| 信任背书 | 用了什么方式建立信任(数据/案例/权威) |
| 转化路径 | 怎么引导用户下单/关注/点击 |
挑出 2-3 句适合二次传播的金句(有传播力、有观点、有情绪)
small 或 medium(更慢、更准):
python3 scripts/transcribe.py "<链接>" --model small
medium 模型,base 在长视频上准确率会掉。/tmp/。收到B站视频链接时,第一反应不是去浏览器截图、不是去硬装 yt-dlp。 直接:
python3 scripts/transcribe.py "<链接>"
然后读输出目录里的连贯稿文件(完整内容在文件里,终端只打印摘要),按"先看UP主站在哪儿(立场)→ 再看跟我们阶段/数据对不对得上 → 最后才说能不能用"的顺序判断。 不要直接跳进内容里去结构化。
--out-dir 指定目录--print-transcripthtml.escape() 转义,使用 data-* 属性 + 事件委托替代 inline onclick,防止 XSS--keep-audio)