dsh-bili-watch
把 B 站视频读成文本给 AI 用:元数据、评论、弹幕、字幕、本地 ASR 转写、抽帧 OCR;支持 b23.tv 短链与 av 号,抽帧缓存目录可换。本地跑不上传、内容一致性检查、二次读瞬时、为 AI 设计落盘+摘要。
一句话定位
把 B 站视频读成文本给 AI 用:元数据、评论、弹幕、字幕、本地 ASR 转写、抽帧 OCR;支持 b23.tv 短链与 av 号,抽帧缓存目录可换。本地跑不上传、内容一致性检查、二次读瞬时、为 AI 设计落盘+摘要。
安装方式
在 DSH 的 web profile 中执行下面的命令;装完刷新页面即可。
$ dsh plugin --profile web add dsh-bili-watch@0.4.8
兼容的 DSH 版本
>=0.2.0-rc.2 <0.3.0-0
作者与热度
Sacredbluedragon · ★ 15 · 更新于 2026-11-07
关于这个插件
dsh-bili-watch
DSH 插件 / CLI 工具:把 B 站视频解析成模型可消费的结构化内容(元数据、评论、弹幕、AI 字幕、本地 ASR 转写、抽帧 OCR)。
为什么用它
- 本地跑不上传:ASR 转写 + OCR 抽帧全在本机,不依赖云 API、不花钱
- 防字幕诱饵:语速异常或字幕自称「实验/钓鱼」即判可疑;关键词命中率只在语速也异常时才作补充;可疑时加
--verify抽 5 帧 OCR 比对画面(不加只提示一句) - 二次读瞬时:缓存目录 + 文件锁,同一视频二次读取秒出
- 为 AI 设计:manifest 落盘 + 摘要输出,agent 直接消费不用再解析
一条链接进来之后
给它一个链接,它按成本从低到高找文本:官方字幕 → 本地转写 → 画面认字。字幕几秒就有;没有字幕才下模型转写;连音轨都没有才逐帧认画面。哪一级没成都会写进报告的「来源」行,不会把截图的字当成台词。
想改代码、想知道模块怎么分层,见文末[「模块架构」](#模块架构)。
特性
- 支持
b23.tv短链、BV 号、av 号及通用 URL(经 yt-dlp) - 降级链:AI 字幕 → 本地 ASR → 抽帧 OCR → 读图,四级全 miss 时退出码为 1
- 匿名可用:元数据、评论、弹幕、搜索、热榜无需登录
- 可选依赖:ffmpeg(抽帧)、Python venv(ASR/OCR)、faster-whisper(转写模型)
- Web 面板:依赖管理、扫码登录、缓存清理、18 项运行时参数可调
安装
DSH 插件
dsh plugin --profile web add dsh-bili-watch
重启 DSH 后生效。DSH ≥ 0.2.0-rc.2 自动写入 dsh.profile.bundles;更早版本需手动在 profile package.json 的 dsh.profile.bundles 数组追加 "dsh-bili-watch"。
> 装完重启即可用。 本插件的 bundle patch 不带 disabled,装进 profile 的 dsh.profile.bundles 后重启 DSH 就生效,命令直接存在。
>
> 0.3.1 及更早的版本不是这样:包在装的那一刻就被写进 dsh.profile.bundles(reconcile() 干的),所以插件页显示「已启用」,但实际不加载——因为层里那行 disabled: true 是插件页开关碰不到的位置。症状是「显示已启用但命令不存在,点开关也没用」。那个 disabled 是 0.2.17 应急修 bug 时误加的,带了 7 个版本,0.3.2 已去掉。
> 从旧版本升级的注意:reconcile() 只在「新增依赖」时跑,所以以前手动从 dsh.profile.bundles 删过包名的人,pnpm update 到 0.3.2 之后包名不会自动补回来,需要重跑一次 dsh plugin --profile web add dsh-bili-watch。
验证:dsh --profile web --dump-config 输出中可检索到 dsh-bili-watch。
亦可直接放入 profiles//node_modules/dsh-bili-watch。
插件依赖 @deepseek-ai/dsh-tools(peer, optional)。缺失时 bili_watch 工具不注册,/bili 命令与面板仍可用。
CLI 全局安装
npm i -g dsh-bili-watch bili-watch view BV1EPnG6DEJC
或 clone 后直接运行:
node tools/look.mjs view BV1EPnG6DEJC
用法
命令一览
| 命令 | 说明 |
|---|---|
| view | 元数据 + 简介 + 热评。不下载、不依赖 ffmpeg,匿名可用 |
| peek | 元数据 + 热评 + 5 帧画面。先取 B 站官方截帧接口,不下视频;取不到才回落下载 360p 抽帧(约 1 MB/min);OCR 环境就绪时顺带识别。仅 B 站 |
| sub [--format srt\|json\|md\|txt] [--out ] | AI 字幕。--format 输出 SRT / JSON(含时间戳)/ Markdown(含跳转链接)/ 纯文本 txt。需登录 |
| comments [N] | 评论区,默认按热度排序 |
| asr | 本地 ASR 转写,附「可信 / 疑似幻觉」判定 |
| frames [--step ] [--ocr] | 抽帧;--ocr 附带画面文字识别 |
| ocr [--step ] | 抽帧并 OCR |
| text [--format json\|md] | 四级降级链:字幕 → 转写 → 抽帧 OCR → 读图。全 miss 退出码 1 |
| sheet [--grid 3x3] [--cues] | 均匀抽帧拼图,默认 9 帧;--cues 每格下方附该时段台词 |
| substrip [--step ] | 底部字幕竖拼 |
| danmaku | 弹幕热区(按时间桶统计峰值) |
| local [--ocr] [--frames] | 本地视频文件走降级链(从转写层起)。仅 CLI |
| search <关键词> [--days N] [--limit 10] [--order pubdate\|click] | 视频搜索。--days 不传或传 0 表示不限时间;传了则只留最近 N 天发布的,并按播放量降序(最多抓 3 页,结果仍按 --limit 截断) |
| hot [--limit 10] | 综合热门榜 |
| login [--check] [--poll] [--key ] | 扫码登录。--check 校验凭证有效性;--key 需配合 --poll |
| clean | 清空缓存根。任务进行中(锁文件存活)时拒绝并返回非零退出码 |
| help | 打印完整用法(所有命令、全部参数) |
` 接受 BV 号、b23.tv` 短链、av 号或 URL。
通用参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| --format | enum | — | 输出格式。text / sub / comments / danmaku / local 落盘时必须配合此参数,单独指定 --out 返回退出码 1 |
| --out | string | — | 落盘路径,相对当前工作目录(cwd),目录不存在时自动创建。text / sub / comments / danmaku / local 写文件;frames 用它指定输出目录。sheet / ocr / substrip 固定写缓存目录,不收 --out |
| --ffmpeg | string | — | ffmpeg 可执行文件路径 |
| --cred | string | — | 凭证 JSON 路径,格式 {sessdata, bili_jct, buvid3, buvid4} |
同分类对比
同一分类下 Star 最高的 5 个,便于横向比较。
| 插件 | 作者 | Star | 版本 | 更新 |
|---|---|---|---|---|
| Mole | tw93 | 74.5K | 0.0.0 | 2026-11-10 |
| DeepSeek-Reasonix | esengine | 36.1K | 0.0.0 | 2026-11-10 |
| dsh-desktop | anywhere-labs | 35.6K | 0.4.1 | 2026-11-06 |
| awesome-dsh-plugin | awesome-dsh-plugin | 24.1K | 0.1.0 | 2026-11-10 |
| dsh-market | dsh-market | 11.8K | 1.73.17 | 2026-11-09 |