将 Bilibili 视频自动转换为结构化 Obsidian Markdown 笔记的命令行工具。
输入一个视频链接或UP主名称,自动完成数据获取、关键帧抽取、语音转录、画面识别,最终生成一份包含概要、关键帧、详细笔记和精选评论的 Markdown 文件,保存到 Obsidian vault。
- 多格式输入 — 支持 BV号、视频 URL、b23.tv 短链、UP主名/UID,按输入模式严格解析
- 批量处理 — 指定UP主即可批量生成其最新视频的笔记
- 双 LLM 引擎 — 本地 oMLX(免费、离线)或云端 MiniMax(高质量),仅控制笔记生成
- 智能转录 — 有字幕直接用字幕,无字幕时才下载音频用 mlx-whisper 本地转录
- 关键帧抽取 — ffmpeg 场景变化检测,自动回退等间隔采样,重跑时自动清理旧帧
- 帧画面理解 — 本地 VLM 逐帧分析生成中文描述(固定使用 oMLX,不受 provider 切换影响)
- Obsidian 联动 — 笔记和图片直接保存到 Obsidian vault,图片用相对路径引用,路径安全校验
- 健壮设计 — 数据获取硬失败、YAML frontmatter 安全生成、CLI 参数正确穿透、中间产物可控清理
| 依赖 | 版本 | 用途 |
|---|---|---|
| Python | >= 3.12 | 运行环境 |
| uv | latest | Python 包管理 |
| bilibili-cli | >= 0.6.2 | B站数据获取(需登录认证) |
| ffmpeg | any | 视频处理和关键帧抽取 |
| yt-dlp | >= 2026.3 | 视频下载 |
本地推理(帧分析必需,笔记生成可选):
- oMLX 服务运行在
localhost:8000,VLM 模型用于帧分析(必须),LLM 模型用于笔记生成(可选) - mlx-whisper 用于本地语音转录(延迟加载,仅在使用时才需要)
云端推理(笔记生成可选):
- MiniMax API(Anthropic 兼容格式),环境变量
MINIMAX_API_KEY
# 一键安装(推荐)
bash install.sh
# 或手动安装
git clone https://github.com/chaos-cl/bili-video-notes.git
cd bili-video-notes
uv sync
# 安装语音转录依赖(仅 Apple Silicon macOS,可选)
uv sync --extra whisper
# 安装开发依赖
uv sync --extra dev
# 验证 bilibili-cli 已安装并认证
bili status
# 验证 ffmpeg
ffmpeg -version编辑 config.yaml:
# 本地 oMLX 推理服务(帧分析固定使用,笔记生成可选)
omlx:
base_url: "http://localhost:8000/v1"
api_key_env: "OMLX_API_KEY" # 从环境变量读取密钥
llm_model: "Qwen3.6-35B-A3B-nvfp4" # 文本生成模型
vlm_model: "Qwen3-VL-8B-Instruct-MLX-4bit" # 视觉理解模型(帧分析固定使用)
# 云端 MiniMax 推理服务(Anthropic 兼容 API,笔记生成可选)
minimax:
base_url: "https://api.minimaxi.com/anthropic" # Anthropic 兼容端点
api_key_env: "MINIMAX_API_KEY" # 从环境变量读取密钥
model: "MiniMax-M2.7"
# 笔记生成的 LLM 提供者(帧分析始终使用本地 oMLX VLM)
provider: "minimax"
# Obsidian vault 配置
obsidian:
vault_path: "~/Documents/Bilibili/Bilibili" # vault 根目录
notes_dir: "video-notes" # 笔记子目录
images_dir: "video-notes-images" # 图片子目录
# 关键帧抽取参数
frames:
scene_threshold: 0.3 # 场景变化阈值(越小越敏感,抽帧越多)
min_interval: 30 # 最小帧间隔(秒)
max_frames: 20 # 最大帧数
max_width: 1920 # 图片最大宽度(像素)
# Whisper 语音转录参数
whisper:
model: "large-v3-turbo" # 模型名称
language: "auto" # auto 为自动检测
device: "mlx" # mlx 为 Apple Silicon 加速
# 日志配置
logging:
dir: "logs"
level: "INFO"# 单个视频(BV号)
uv run python scripts/pipeline.py --bv BV1ABcsztEcY
# 单个视频(URL)
uv run python scripts/pipeline.py --url "https://www.bilibili.com/video/BV1ABcsztEcY"
# 短链
uv run python scripts/pipeline.py --url "https://b23.tv/xxxxx"
# 批量处理 UP 主的最近 10 个视频
uv run python scripts/pipeline.py --user "影视飓风"
# 指定 UP 主 UID 和最大视频数
uv run python scripts/pipeline.py --user 946974 --max 50
# 使用云端 MiniMax 生成(需要 MINIMAX_API_KEY)
export MINIMAX_API_KEY="your-key-here"
uv run python scripts/pipeline.py --bv BV1ABcsztEcY --provider minimax
# 强制重新生成(覆盖已有笔记并清理旧帧)
uv run python scripts/pipeline.py --bv BV1ABcsztEcY --force
# 覆盖 vault 路径
uv run python scripts/pipeline.py --bv BV1ABcsztEcY --vault /path/to/vault
# 使用自定义配置文件
uv run python scripts/pipeline.py --bv BV1ABcsztEcY --config /path/to/config.yamlObsidian Vault/
├── video-notes/
│ ├── 能卖上亿美金?国产短剧如何征服世界?(BV1ABcsztEcY).md
│ └── ...
└── video-notes-images/
├── BV1ABcsztEcY/
│ ├── frame_001.png
│ ├── frame_002.png
│ └── ...
└── ...
生成的笔记格式:
---
title: 视频标题
bvid: BV1xxxxx
author: UP主名
duration: "11:19"
url: https://www.bilibili.com/video/BV1xxxxx
date: 2026-04-23
tags:
- bilibili
---
# 视频标题
> 来源: [BV1xxxxx](url) | UP主: xxx | 时长: 11:19
## 概要
2-3句话的视频概要
## 关键帧

> 关键帧描述
## 详细笔记
结构化的详细笔记内容
## 精选评论
代表性评论摘要
## 标签
#bilibili #标签1 #标签2bilibili-notes/
├── config.yaml # 运行时配置(密钥从环境变量读取)
├── pyproject.toml # 项目依赖 + 构建系统
├── install.sh # 一键安装脚本
├── SKILL.md # AI 工具入口定义
├── scripts/
│ ├── common.py # 共享工具:配置校验、日志、API 客户端、重试、路径安全
│ ├── fetch_data.py # bili CLI 数据获取:视频信息、字幕、评论、延迟音频下载
│ ├── extract_frames.py # yt-dlp 下载 + ffmpeg 关键帧抽取(清理旧帧 + 返回码检查)
│ ├── transcribe_audio.py # mlx-whisper 本地语音转录(延迟导入)
│ ├── analyze_frames.py # VLM 逐帧视觉识别(固定使用本地 oMLX VLM)
│ ├── generate_notes.py # LLM 融合所有信息生成 Markdown(安全 YAML + 长度截断)
│ └── pipeline.py # 流水线编排 + CLI 入口(参数穿透 + 硬失败 + force 清理)
├── templates/
│ └── note_template.md # 笔记模板
├── tests/ # 单元测试
├── work/ # 运行时临时文件(转录结果等)
└── logs/ # 运行日志
本项目的 SKILL.md 定义了 AI 工具入口,可被 Claude Code、OpenClaw、Hermes 等智能体识别和调用。
# 1. 确认 Python 3.12+
python3 --version
# 2. 安装 uv(如未安装)
curl -LsSf https://astral.sh/uv/install.sh -o /tmp/uv-install.sh && sh /tmp/uv-install.sh
# 3. 克隆并安装依赖
git clone https://github.com/chaos-cl/bili-video-notes.git && cd bili-video-notes
uv sync
uv sync --extra dev # 开发环境
# 4. 安装 bilibili-cli(如未安装)
# 参考: https://github.com/public-clis/bilibili-cli
# macOS:
brew install bilibili-cli
bili auth login # 需要扫码登录 B站账号
# 5. 安装 ffmpeg(如未安装)
brew install ffmpeg
# 6. 安装 yt-dlp(如未安装)
brew install yt-dlp
# 7. 配置 config.yaml
# 复制示例配置并修改 vault_path 等参数
cp config.yaml.example config.yaml
# 编辑 config.yaml 设置你的 Obsidian vault 路径
# 8. 设置 API 密钥(根据选择的 provider)
# MiniMax 云端推理
export MINIMAX_API_KEY="your-api-key"
# 或 oMLX 本地推理
export OMLX_API_KEY="your-key" # 本地服务通常为空即可
# 9. 验证环境
bili status # bilibili-cli 认证状态
ffmpeg -version # ffmpeg 可用
yt-dlp --version # yt-dlp 可用
curl localhost:8000/v1/models # oMLX 服务(如使用本地推理)
# 10. 生成第一个笔记
uv run python scripts/pipeline.py --bv BV1ABcsztEcYCLI 直接调用:
uv run python scripts/pipeline.py --bv <BV号>
uv run python scripts/pipeline.py --url <视频URL>
uv run python scripts/pipeline.py --user <UP主名或UID> --max <数量>
uv run python scripts/pipeline.py --bv <BV号> --config <配置文件> --vault <vault路径>Python 代码调用:
from scripts.pipeline import run_pipeline
from scripts.common import load_config
# 处理单个视频
config = load_config() # 支持自定义配置路径: load_config("path/to/config.yaml")
results = run_pipeline("BV1ABcsztEcY", mode="bv", provider="minimax", config=config)
# 批量处理UP主
results = run_pipeline("影视飓风", mode="user", max_videos=10)| 症状 | 原因 | 解决方案 |
|---|---|---|
bili 412 限流 |
B站 API 频率限制 | 自动重试3次(含超时控制),等待后手动重试 |
音频下载失败 |
网络或权限问题 | 检查 bili auth 登录状态 |
关键帧0帧 |
场景变化阈值过高 | 自动回退等间隔采样,或降低 scene_threshold |
MINIMAX_API_KEY 未设置 |
环境变量缺失 | export MINIMAX_API_KEY="..." 或切换 --provider omlx |
oMLX 连接失败 |
本地服务未启动 | 启动 oMLX(帧分析必须);笔记生成可切换 --provider minimax |
yt-dlp cookies 错误 |
浏览器 cookies 过期 | 使用 --cookies-from-browser chrome 或重新登录 |
配置文件缺少必填字段 |
config.yaml 不完整 | 补全 obsidian/omlx/provider 字段 |
路径跳出了 vault 根目录 |
notes_dir/images_dir 配置有误 | 检查配置中是否包含 ../ 等跳转路径 |
uv run pytest tests/ -v- Python 3.12 + uv 包管理 + hatchling 构建
- bilibili-cli — B站数据获取
- yt-dlp — 视频下载
- ffmpeg — 视频处理和关键帧抽取
- mlx-whisper — Apple Silicon 本地语音转录(延迟加载,可选依赖)
- oMLX — 本地 LLM/VLM 推理(OpenAI 兼容 API)
- MiniMax — 云端 LLM 推理(Anthropic 兼容 API)
- OpenAI SDK — oMLX 客户端
- Anthropic SDK — MiniMax 客户端
- Obsidian — 知识管理和笔记展示
MIT