一个纯 API + 下载方式的命令行工具。输入 B站合集、系列、课堂 ss 链接或单个 BV 链接后,工具会自动提取字幕、必要时调用 ASR 转写,再调用大模型生成每个视频的 Markdown 学习笔记和课程综合报告。
- 自动读取合集标题、视频 BV 号、标题、时长、cid。
- 优先读取 B站
x/player/v2返回的官方字幕。 - 无官方字幕时支持 OpenAI Whisper 或阿里云百炼 Paraformer ASR。
- 笔记生成支持 OpenAI 或 DeepSeek;DeepSeek 通过 OpenAI 兼容接口调用。
- 可选 OCR:默认每 30 秒抽取一帧,对板书/PPT 文字进行识别,可用
--no-ocr关闭。 - 单个视频失败不会中断后续视频,错误写入
failed.log。 - B站 API、LLM、ASR、下载调用都带指数退避重试。
- B站 API 请求间隔至少 2 秒;CLI 保留
--concurrency参数,但实际固定串行处理。
国内模型场景推荐:
DeepSeek:负责把转写文本整理成学习笔记
阿里云百炼 Paraformer:负责无字幕视频的语音转文字
也就是:
python main.py "B站URL" --llm-provider deepseek --asr-provider aliyun --no-ocr- Python 3.10+
yt-dlpPython 包,用于下载音频- DeepSeek/OpenAI API Key 至少一个
- 无字幕视频需要 OpenAI API Key 或阿里云百炼 DashScope API Key
- B站 Cookie 可选,读取私有合集或付费课程时需要
- OCR 可选,开启时需要额外安装 PaddleOCR
安装核心依赖:
pip install -r requirements.txt如需 OCR:
pip install -r requirements-ocr.txt如需 OpenAI Whisper ASR,还需要安装 ffmpeg 并加入 PATH。
可以复制 .env.example 作为参考,但不要提交真实密钥。
PowerShell 临时设置示例:
$env:DEEPSEEK_API_KEY="你的 DeepSeek Key"
$env:DASHSCOPE_API_KEY="你的阿里云百炼 Key"
$env:BILIBILI_SESSDATA="你的 SESSDATA"
$env:BILIBILI_BUVID3="你的 buvid3"
$env:BILIBILI_BILI_JCT="你的 bili_jct"公开课程通常不需要 B站 Cookie;付费课程需要 Cookie 对应账号有购买权限。
先低成本验证前 1 个视频:
python main.py "https://www.bilibili.com/video/BV..." --llm-provider deepseek --asr-provider aliyun --no-ocr --limit 1 --skip-summary生成完整课程笔记:
python main.py "https://www.bilibili.com/video/BV..." --llm-provider deepseek --asr-provider aliyun --no-ocr只处理有官方字幕的视频,使用 DeepSeek 生成笔记:
python main.py "https://space.bilibili.com/1234567/channel/collectiondetail?sid=12345" --llm-provider deepseek --asr-provider none --no-ocr使用 OpenAI:
python main.py "https://www.bilibili.com/video/BV..." --llm-provider openai --asr-provider openai --no-ocr指定输出目录、模型或 OCR 抽帧间隔:
python main.py "https://www.bilibili.com/cheese/play/ss12345" --output-dir notes --model deepseek-chat --ocr-interval 45输出目录:
notes/
课程名/
01_视频标题.md
02_视频标题.md
FULL_SUMMARY.md
failed.log
notes/ 已被 .gitignore 排除,不会默认提交到 GitHub。
可编辑 config.yaml:
output_dir: notes
enable_ocr: true
ocr_interval_seconds: 30
llm_provider: auto
llm_temperature: 0.2
openai_model: gpt-4o-mini
deepseek_model: deepseek-chat
deepseek_base_url: https://api.deepseek.com
max_context_tokens: 8000
bilibili_request_interval_seconds: 2.0
bilibili_trust_env_proxy: false
asr:
provider: auto
model: whisper-1
aliyun_model: paraformer-v2- 空间合集:
https://space.bilibili.com/1234567/channel/collectiondetail?sid=12345 - 空间列表:
https://space.bilibili.com/1234567/lists/12345?type=season - 空间系列:
https://space.bilibili.com/1234567/lists/12345?type=series - B站课堂:
https://www.bilibili.com/cheese/play/ss12345 - 单个视频或多分 P 视频:
https://www.bilibili.com/video/BV...
main.py CLI 入口
bilibili_client.py B站 API、合集解析、节流和 Cookie 鉴权
subtitle_extractor.py B站官方字幕提取
asr.py OpenAI Whisper ASR
aliyun_asr.py 阿里云百炼 Paraformer ASR
ocr.py 可选 PaddleOCR 抽帧识别
note_generator.py DeepSeek/OpenAI 笔记生成和综合报告
utils.py 配置、重试、文件名、时间戳等工具函数
config.yaml 默认配置
- DeepSeek、MiniMax 等文本模型不能替代 ASR;无官方字幕视频必须配置语音转文字服务。
- 付费课程不会绕过权限限制。若接口返回未购买、无权限或 Cookie 失效,程序会给出提示。
- ASR 会产生费用,建议先用
--limit 1 --skip-summary验证流程。 - OCR 依赖较重;只需要字幕/ASR 笔记时,建议使用
--no-ocr。 - 不要把真实 API Key 写入
config.yaml、README 或代码文件。