Bilibili Batch - B 站视频批量提取
从 B 站 UP 主空间批量提取视频字幕到 Obsidian,支持按播放量/收藏数/发布时间排序。
配置检查
执行前必读:本 skill 需要使用 Obsidian 仓库路径。
执行以下检查步骤:
-
首先检查全局 CLAUDE.md 中是否定义了 OBSIDIAN_REPO 配置变量
-
如果未定义,使用 AskUserQuestion 工具询问用户: 请提供您的 Obsidian 仓库路径:
-
将用户提供的路径保存为 $OBSIDIAN_REPO 变量供后续使用
配置变量:
- $OBSIDIAN_REPO : Obsidian 仓库根目录(如 /Users/xxx/Documents/ObsidianVault )
触发场景
-
用户想批量提取某个 UP 主的多个视频
-
用户想提取 UP 主播放量最高的 Top N 视频
-
用户有一个视频 URL 列表需要批量处理
前置条件
必需工具
工具 安装方式 说明
video2text npm install -g @wangjs-jacky/video2text
视频字幕提取
yt-dlp brew install yt-dlp
视频信息获取
node Node.js 18+ 运行 CLI 工具
路径配置
-
Obsidian 仓库: $OBSIDIAN_REPO (从全局配置或用户输入获取)
-
B 站内容目录: 00-Inbox/B站 (自动创建)
使用方式
方式一:通过 Claude Code 触发
对 Claude 说:
提取这个 UP 主播放量前10的视频到 Obsidian: https://space.bilibili.com/316568752
方式二:直接运行 CLI
提取 UP 主 Top 10 视频
./bin/cli.js top https://space.bilibili.com/316568752
--limit 10
--output "$OBSIDIAN_REPO/00-Inbox/B站"
批量处理 URL 列表文件
./bin/cli.js file /path/to/urls.txt
--output "$OBSIDIAN_REPO/00-Inbox/B站"
CLI 命令
top
- 提取 UP 主 Top 视频
./bin/cli.js top <UP主空间URL> [options]
选项:
参数 简写 说明 默认值
--limit
-l
提取数量 10
--sort
-s
排序方式 (play/favorite/date) play
--output
-o
Obsidian 输出目录
--format
-f
笔记格式 (simple/detailed) detailed
--dry-run
只显示视频列表,不提取 false
示例:
提取播放量前5的视频
./bin/cli.js top https://space.bilibili.com/316568752 --limit 5
提取收藏数前10的视频
./bin/cli.js top https://space.bilibili.com/316568752 --sort favorite
只显示视频列表(不提取字幕)
./bin/cli.js top https://space.bilibili.com/316568752 --dry-run
file
- 批量处理 URL 列表
./bin/cli.js file <URL列表文件> [options]
URL 列表文件格式:
每行一个 URL,支持注释
https://www.bilibili.com/video/BV1iE411E7xc https://www.bilibili.com/video/BV1n7411Q7nK
这是注释
https://www.bilibili.com/video/BV19u411Z7au
输出结构
00-Inbox/ └── B站/ └── [作者名]/ ├── [视频标题]-原文.md # 原始字幕(带时间戳) └── [视频标题]-归纳.md # 核心内容归纳(可选)
笔记格式
detailed(详细模式)
生成两个文件:
-
*-原文.md :完整字幕 + 时间戳 + 视频嵌入
-
*-归纳.md :核心要点 + 关键引用 + 思考
simple(简洁模式)
只生成一个文件:
- *.md :完整字幕 + 视频链接
执行流程
- 获取视频列表
使用 yt-dlp 获取 UP 主空间视频列表:
获取视频列表(JSON 格式)
yt-dlp --flat-playlist --print "%(id)s|%(title)s|%(view_count)s|%(uploader)s"
"https://space.bilibili.com/316568752/upload/video"
- 排序和筛选
根据 --sort 参数排序:
-
play :按播放量排序
-
favorite :按收藏数排序
-
date :按发布时间排序
- 批量提取字幕
使用 video2text 批量提取:
创建 URL 列表文件
echo "url1 url2 url3" > /tmp/bilibili-urls.txt
批量提取
video2text extract --file /tmp/bilibili-urls.txt -f md -o /tmp/bilibili-output
- 生成 Obsidian 笔记
将提取的字幕转换为 Obsidian 格式:
-
添加 frontmatter 元数据
-
嵌入 B 站播放器 iframe
-
添加标签和双向链接
-
生成归纳笔记(可选)
示例输出
原文笔记
【睡前消息83】关于《外国人永久居留管理条例》,我们最该担心什么?
作者: 马督工 来源: https://www.bilibili.com/video/BV1iE411E7xc 提取时间: 2026-03-01 视频时长: 17:13 播放量: 447.4万
视频嵌入
<iframe src="//player.bilibili.com/player.html?bvid=BV1iE411E7xc&autoplay=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="500"> </iframe>
完整文案(带时间戳)
- 0:00 大家好...
- 0:15 今天我们来聊聊...
#B站 #马督工 #视频笔记
常见问题
Q: 提取速度太慢?
A: video2text 默认使用 base 模型,可以切换到更快的 tiny 模型:
export VIDEO2TEXT_MODEL=tiny
Q: 部分视频提取失败?
A: 可能原因:
-
视频是充电专属(需要登录)
-
视频已被删除
-
网络问题
失败的视频会记录在 failed.txt 中,可以稍后重试。
Q: 如何跳过已提取的视频?
A: 工具会自动检测输出目录中已存在的笔记,跳过重复提取。
注意事项
-
存储优化:不保存 MP4 文件,只保存文字内容
-
版权尊重:仅用于个人学习笔记
-
速率限制:批量提取时建议间隔 5-10 秒,避免触发 B 站限流