一个用于提取、校验、转写和整理 B 站视频内容的通用工具 / AI Skill。
它既可以作为普通命令行工具运行,也可以交给 Hermes、Codex、自定义 Agent 或其他能调用本地命令的 AI 使用。
核心流程:
- 优先读取 B 站官方字幕,速度最快。
- 没有字幕时,默认先询问是否启用 Whisper。
- 字幕疑似错位时,可提示用户改用 Whisper。
- 用户允许后,下载音频,转成 WAV,再用 Whisper 转写。
- 输出 transcript 文本和 metadata JSON,供 AI 继续总结、整理或分析。
本项目不包含 Whisper 模型权重,默认模型名为
small。模型文件由用户本地安装或首次运行 Whisper 时自动下载。
- 克隆或下载本项目。
- 把整个
bilibili-content/文件夹放到你的 AI / Skill 工具目录。 - 复制
.env.example为.env,填入 B 站 Cookie。 - 对 AI 说:
总结这个 B 站视频:
BVxxxxxx
如果字幕可疑或没有字幕,就用 Whisper 转写。
AI 应优先运行:
python scripts/analyze_bilibili.py "BVxxxxxx" --verify-subtitlegit clone <repo-url>
cd bilibili-content
pip install -r requirements.txt
cp .env.example .env
# 编辑 .env,填入 B 站 Cookie
python scripts/analyze_bilibili.py "BVxxxxxx" --verify-subtitleWindows PowerShell:
git clone <repo-url>
cd bilibili-content
pip install -r requirements.txt
Copy-Item .env.example .env
# 编辑 .env,填入 B 站 Cookie
python .\scripts\analyze_bilibili.py "BVxxxxxx" --verify-subtitle| 使用方式 | 说明 |
|---|---|
| 普通 CLI 工具 | 手动运行 Python 脚本,提取字幕或转写音频。 |
| AI Skill | 把本项目作为 Hermes / Codex / 其他 Agent 的工具目录。 |
| 自动化脚本 | 读取结构化 JSON 状态,按 success / needs_confirmation / failed 决策。 |
| 视频学习助手 | 把课程、教程、访谈、项目榜等视频转成可总结文本。 |
- 提取 B 站官方字幕。
- 支持多 P 视频,使用
--page N指定分 P。 - 支持字幕语言优先级,例如
--language zh,en。 - 支持字幕可信度检查:
--verify-subtitle。 - 无字幕时默认返回
needs_confirmation,不会直接跑耗时 Whisper。 - 用户确认后,可下载音频并用 Whisper 转写。
- 可通过
--force-whisper跳过 B 站字幕,直接从音频转写。 - 支持 Whisper 语言控制,例如
--whisper-language auto。 - 输出 transcript 文本和 metadata JSON,方便 AI 后续总结。
- 输出结构化状态,便于 AI 或自动化程序判断下一步。
B 站很多视频都有 AI 字幕,但这些字幕并不总是可信。实际测试中出现过:视频标题是 GitHub 开源项目榜,但 B 站返回的字幕却是烧烤、歌词等无关内容。
这个工具的目标不是盲目信任字幕,而是提供更稳的内容提取流程:
| 场景 | 默认策略 |
|---|---|
| 有正常字幕 | 直接提取字幕,速度最快。 |
| 没有字幕 | 先询问是否启用 Whisper。 |
| 字幕疑似错位 | 提示用户,或在 --auto 下自动切换 Whisper。 |
| 内容很重要 | 使用 --force-whisper,直接从音频转写。 |
bilibili-content/
├── README.md
├── SKILL.md
├── requirements.txt
├── .env.example
├── agents/
│ └── openai.yaml
├── scripts/
│ ├── analyze_bilibili.py # 主入口:字幕、确认、Whisper fallback
│ ├── fetch_subtitle.py # 提取 B 站官方字幕
│ ├── fetch_audio_playurl.py # 通过 playurl API 下载音频并转为 WAV
│ └── transcribe_whisper.py # 调用 Whisper 转写
└── references/
├── bilibili-api-notes.md
├── bilibili-api-quirks.md
├── bilibili-subtitle-url-issues.md
└── whisper-setup.md
这是最推荐的使用方式。
git clone <repo-url>或直接下载 ZIP 并解压。
把整个 bilibili-content/ 文件夹交给你的 AI 环境,例如:
skills/
└── bilibili-content/
或按你的 Agent / Skill 系统要求放置。
cp .env.example .envWindows PowerShell:
Copy-Item .env.example .env然后填入 B 站 Cookie。
你可以直接对 AI 说:
总结这个 B 站视频:
https://www.bilibili.com/video/BVxxxxxx
先检查字幕是否可信;如果没有字幕或字幕可疑,再询问我是否使用 Whisper。
AI 应该先运行:
python SKILL_DIR/scripts/analyze_bilibili.py "URL_OR_BVID" --verify-subtitle然后根据 JSON 状态决定下一步。
pip install -r requirements.txtrequirements.txt 包含:
requests
python-dotenv
openai-whisper
PyTorch 对系统和 CUDA 版本比较敏感,尤其是 Windows + NVIDIA GPU。建议根据自己的 CUDA 版本单独安装 PyTorch,不要在
requirements.txt中写死通用版本。
Whisper 和音频转码都需要 ffmpeg。
Windows, Winget:
winget install ffmpegWindows, Chocolatey:
choco install ffmpegWindows, Scoop:
scoop install ffmpegmacOS:
brew install ffmpegUbuntu / Debian:
sudo apt update && sudo apt install ffmpeg验证:
ffmpeg -version如果使用 pip install -r requirements.txt,会安装 openai-whisper。
也可以单独安装:
pip install -U openai-whisper或安装官方 GitHub 最新版:
pip install git+https://github.com/openai/whisper.git官方项目:https://github.com/openai/whisper
首次使用某个模型时,Whisper 可能会自动下载模型文件。默认模型是 small。
本项目需要使用你的 B 站登录 Cookie 来访问字幕和音频播放信息。
- 在浏览器打开 https://www.bilibili.com 并登录。
- 打开 DevTools / 开发者工具。
- 进入:
Application → Cookies → https://www.bilibili.com。 - 复制以下值:
SESSDATAbili_jctDedeUserID
BILIBILI_SESSDATA=
BILIBILI_BILI_JCT=
BILIBILI_DEDE_USERID=说明:
SESSDATA和bili_jct是必填。DedeUserID建议填写。- 如果浏览器中显示
%2C,请替换为英文逗号,。 - 如果浏览器中显示
%2A,请替换为星号*。 - 不要把
.env上传到 GitHub。
.env.example 中包含可选 Whisper 配置:
# WHISPER_MODEL_DIR=~/.hermes/whisper/models
# WHISPER_TEMP=~/.hermes/whisper/temp
# WHISPER_MODEL=small
# WHISPER_DEVICE=cudaWindows 示例:
WHISPER_MODEL_DIR=~/.hermes/whisper/models
WHISPER_TEMP=~/.hermes/whisper/temp
WHISPER_MODEL=small
WHISPER_DEVICE=cuda常用模型:
| 模型 | 速度 | 质量 | 适合场景 |
|---|---|---|---|
tiny |
很快 | 较低 | 快速粗略识别。 |
base |
快 | 一般 | 短视频、粗略总结。 |
small |
较快 | 较好 | 默认推荐。 |
medium |
较慢 | 更好 | 重要内容。 |
large-v3 |
慢 | 高 | 高质量转写。 |
RTX 4060 实测:small 转写 40 分钟视频通常需要几分钟,具体速度取决于音频长度、GPU、磁盘、CUDA 和 PyTorch 配置。
python scripts/analyze_bilibili.py "BVxxxxxx"默认行为:
- 有字幕:直接提取。
- 无字幕:返回
needs_confirmation,不自动跑 Whisper。 - 多 P 未指定:返回
needs_page_selection。
python scripts/analyze_bilibili.py "BVxxxxxx" --verify-subtitle推荐用于教程、课程、技术视频、项目榜等容易出现字幕错位的内容。
python scripts/analyze_bilibili.py "BVxxxxxx" --whisperpython scripts/analyze_bilibili.py "BVxxxxxx" --autopython scripts/analyze_bilibili.py "BVxxxxxx" --auto --verify-subtitlepython scripts/analyze_bilibili.py "BVxxxxxx" --force-whisperpython scripts/analyze_bilibili.py "BVxxxxxx" --page 7 --verify-subtitlepython scripts/analyze_bilibili.py "BVxxxxxx" --auto --whisper-language auto| 场景 | 推荐命令 |
|---|---|
| 快速总结 | python scripts/analyze_bilibili.py URL |
| 技术教程 / 课程 / 项目榜 | python scripts/analyze_bilibili.py URL --verify-subtitle |
| 字幕错位或内容很重要 | python scripts/analyze_bilibili.py URL --force-whisper |
| 无字幕时允许转写 | python scripts/analyze_bilibili.py URL --whisper |
| 想全自动处理 | python scripts/analyze_bilibili.py URL --auto --verify-subtitle |
| 多 P 视频 | python scripts/analyze_bilibili.py URL --page N --verify-subtitle |
| 非中文视频 | python scripts/analyze_bilibili.py URL --auto --whisper-language auto |
| 参数 | 用途 |
|---|---|
--page N |
多 P 视频选择第 N P。 |
--language zh,en |
B 站字幕语言优先级。 |
--whisper |
仅在没有字幕时允许 Whisper。 |
--auto |
没有字幕或字幕可疑时自动切换 Whisper。 |
--force-whisper |
跳过 B 站字幕,直接从音频转写。 |
--verify-subtitle |
检查 B 站字幕是否疑似错位或不可信。 |
--whisper-language auto |
Whisper 语言设置,auto 表示自动检测。 |
--whisper-model small |
Whisper 模型名,默认 small。 |
--device cuda |
Whisper 运行设备,常见值:cuda、cpu。 |
--timestamps |
支持时保存带时间戳的转写文本。 |
输出文件保存到:
output/
常见文件名:
{bvid}_{title}.txt
{bvid}_{title}.json
{bvid}_p{N}_{title}.txt
{bvid}_p{N}_{title}.json
说明:
.txt:字幕或 Whisper 转写文本,供 AI 总结。.json:元数据,包括标题、来源、分 P、模型、设备、状态和输出路径。
脚本也会在 stdout 打印结构化 JSON。
| 状态 | 含义 | 建议下一步 |
|---|---|---|
success |
已生成 transcript。 | 读取 transcript_file 并总结。 |
needs_confirmation |
没有字幕;默认不运行 Whisper。 | 询问用户是否转写音频。 |
needs_page_selection |
多 P 视频需要指定 --page N。 |
展示分 P 列表并让用户选择。 |
subtitle_suspicious |
字幕可能错位或不可靠。 | 建议使用 --force-whisper 或 --auto --verify-subtitle。 |
failed |
Cookie、API、下载、ffmpeg 或 Whisper 错误。 | 报告 phase 和 message,不要盲目 fallback。 |
--verify-subtitle 是轻量启发式检查,不是语义模型。
它会检查:
- 字幕是否像歌词或重复短句。
- 字幕是否异常短。
- 标题关键词和字幕内容是否几乎没有重合。
- 明显技术类标题的字幕中是否完全没有技术词。
- 技术类标题是否对应大量无关的美食、歌词或情绪词。
示例:
标题:GitHub 开源项目榜
字幕:烧烤、美食、歌词、重复情绪短句
结果:subtitle_suspicious
推荐:
python scripts/analyze_bilibili.py "URL" --auto --verify-subtitle如果视频有多个分 P 且没有指定 --page,脚本会返回:
{
"status": "needs_page_selection",
"pages": [...],
"message": "该视频有多个分P,请使用 --page N 参数指定要查看的集数"
}选择指定分 P:
python scripts/analyze_bilibili.py "BVxxxxxx" --page 7--force-whisper 对多 P 视频同样要求指定 --page N,避免用户想处理 P7 时误转写 P1。
AI 使用时建议遵循这个流程:
-
接收用户提供的 B 站 URL 或 BV 号。
-
先运行:
python SKILL_DIR/scripts/analyze_bilibili.py "URL_OR_BVID" --verify-subtitle -
读取 JSON 状态:
success:读取transcript_file,按用户要求总结。needs_confirmation:说明没有字幕,询问是否使用 Whisper。needs_page_selection:展示分 P 列表,让用户选择。subtitle_suspicious:说明字幕为什么可疑,并建议 Whisper。failed:报告phase和message,不要静默切换路径。
-
如果 transcript 很长,先分块再总结:
每块约 40K 字符,重叠约 2K 字符;先总结每块,再合并成最终答案。
可以上传到 GitHub 的内容:
README.md
SKILL.md
requirements.txt
.env.example
agents/
scripts/
references/
不要上传:
.env
真实 BILIBILI_SESSDATA
真实 bili_jct
真实 DedeUserID
output/
下载的视频、音频、字幕文件
Whisper 模型权重
推荐 .gitignore:
.env
*.env
output/
*.m4s
*.wav
*.mp3
*.mp4
*.flv
*.ass
*.srt
*.vtt
__pycache__/
*.pyc
*.pt
*.bin
*.ckpt
*.safetensors
.DS_Store上传前建议检查:
git status
git diff --cached确认没有把 .env、Cookie、输出文件或模型权重加入提交。
B 站 Cookie 缺失或过期。
修复:
- 在浏览器中重新登录 B 站。
- 打开 DevTools → Application → Cookies → bilibili.com。
- 更新
.env。
视频有多个分 P,需要指定 --page N。
python scripts/analyze_bilibili.py "URL" --page 2B 站字幕 API 返回错误。可能原因:
- Cookie 过期。
- 视频权限限制。
- API 临时不稳定。
- 触发反爬或风控。
可以稍后重试,或使用:
python scripts/analyze_bilibili.py "URL" --force-whisper无法获取音频流地址。可能原因:
- Cookie 权限不足。
- 视频需要会员或特殊权限。
- B 站风控。
- playurl API 临时变化。
ffmpeg 未安装,或不在 PATH 中。
检查:
ffmpeg -versionWhisper 转写失败。可能原因:
openai-whisper未安装。- PyTorch / CUDA 配置错误。
- 显存不足。
- 模型下载失败。
可以先试:
python scripts/analyze_bilibili.py "URL" --force-whisper --device cpu --whisper-model base- 只能处理当前账号有权限访问的视频。
- B 站接口和风控可能变化,playurl 下载不保证永久稳定。
- 字幕可信度检查是启发式规则,不是完整语义判断。
- Whisper 路径会占用时间、磁盘和 GPU / CPU 资源。
- 本项目只提取和转写内容;最终总结质量取决于调用它的 AI。
打包或提交前建议检查:
python -m py_compile scripts/*.py
find . -type d -name "__pycache__" -prune -exec rm -rf {} +
find . -type f -name "*.pyc" -delete确认不要提交:
.env
output/
*.m4s
*.wav
*.mp3
Whisper 模型权重
当前版本:v1.0
已验证能力:
- 单 P 有字幕视频。
- 单 P 无字幕视频。
- Whisper fallback。
--force-whisper。- 多 P
--page N。 - 字幕可信度检查。
- 字幕错位时切换 Whisper。