dsh-media-caption:为视频/音频产出字幕 JSON 与关键帧,只交原料

前言

在 DeepSeek Harness(DSH)里处理视频或音频时,常见做法是直接让大模型「看懂整段片子」——既费 token,又容易把口播、画面、配乐混在一层判断里。另一类做法是手写脚本调 Whisper 再自己抽帧,目录结构和断点续跑往往要重复造轮子。

dsh-media-caption 的定位相反:给它媒体文件,它只交出逐句转写的 字幕.json 和 关键帧 JPG(含九宫格预览),不调大模型、不生成 Markdown,也不替调用方决定哪些内容重要。下游 Agent 或脚本按 speech 字段决定读字幕、读画面,或两者并用。

这是什么

维护者为 CleranceWang。插件仓库:github.com/CleranceWang/dsh-media-caption,社区目录页:skillhub.cn/plugins/CleranceWang/dsh-media-caption。当前 package 版本为 0.1.0,许可证 MIT。

一句话:DSH 插件,用本机 faster-whisper 与 ffmpeg 做 ASR 与抽帧,输出结构化 JSON 与 JPG 素材;判断权在调用方。

核心功能

两类产物

  1. 字幕.json —— 逐句转写,时间戳为毫秒整数;附带是否有人声(speech)、语言及可靠性等字段。
  2. frames/*.jpg 与 previews/sheet.jpg —— 关键帧与九宫格拼图,单帧保持原始分辨率。

插件不做:不调大模型、不生成 md、不替你筛选「重要内容」。

三种内容形态(README 中的读法)

形态 例子 该看什么
信息在字幕里 口播科普、测评、教程 读 字幕.json,帧作辅助
信息在画面里 产品图类视频、TUI 演示、纯音乐 读 sheet.jpg,字幕可能为空
两边互补 讲解 + 操作演示 字幕与帧都读,互相纠错

speech 为 none 且 segments 为空时,不等于处理失败,可能是内容本身无人声。

三个 DSH 工具

media_caption_process(标准面):参数 note(笔记目录名),在配置的输入根下查找:

<输入根>/<笔记目录>/video/xxx.mp4
                     /audio/xxx.mp3

若输出目录里已有 字幕.json,直接返回,不重算。

media_caption_file(直给面):参数 file(绝对路径),可选 id。无需按笔记目录命名;身份判定为:显式 id → 笔记目录身份 → 内容指纹 h_<sha1前12>。

media_caption_sweep(批处理):参数 run(默认 false)、limit(0 表示不限)。run: false 只报告待处理数量;run: true 执行扫盘、入队、逐条处理。受资源门禁约束,显存或内存不足时不启动转写。

产物目录布局

<输出根>/<笔记目录名>/
├── 字幕.json
├── frames.json
├── frames/f00.jpg …
├── previews/sheet.jpg(及 sheet-1..N.jpg)
└── audio/audio.mp3   # 中间产物,删了会重抽

字幕.json 示例结构(字段以仓库 README 为准):

{
  "note_id": "42952687912",
  "duration_ms": 302464,
  "speech": "present",
  "language": "zh",
  "language_reliable": true,
  "segments": [
    { "start": 1200, "end": 3400, "text": "大家好" }
  ]
}

speech 取值:present(有人声,读字幕)、none(无人声,下游宜看图)。

抽帧数量按 README 公式 N = clamp(round(变化点数 / 8), 9, 27),结合场景变化吸附与单次 ffmpeg 解码;抽帧失败不抛错,转写仍是主路径。

安装与启用

本机依赖(均需自行安装并加入 PATH)

依赖 说明
Node.js ≥ 22 插件运行环境
ffmpeg / ffprobe 音视频处理
faster-whisper-xxl 命令行版,见 Purfview 发布页
large-v3 模型 约 3 GB;魔搭 Systran/faster-whisper-large-v3 或 HuggingFace 同路径

模型为含 model.bin 等的目录,将其路径填入配置中的 modelDir,无需改名。模型来源为 openai/whisper-large-v3(MIT),由 Systran 转为 CTranslate2;本插件不打包模型。

配置

可读 ~/.dsh/media-caption.config.json,环境变量优先。完整字段见仓库 .env.example。

最小配置示例:

{
  "whisper": "D:/path/to/faster-whisper-xxl.exe",
  "modelDir": "D:/path/to/faster-whisper-large-v3",
  "outRoot": "D:/media/out"
}

需要「丢进输入目录、DSH 启动时扫一轮自动处理」时,显式设置 "autoSweep": true,并配置 inputRoot、dbPath 等。自动扫盘默认关闭;打开后每次 DSH 启动扫一轮,处理完退出,不常驻、不开定时器。SQLite 队列库应放在本机盘,不宜放网络盘。

装入 DSH

官方安装命令(来自 README):

dshm_install id=<github-owner>/dsh-media-caption

将 <github-owner> 换为仓库所有者(如 CleranceWang)。本地开发可软链到 profile 的 node_modules/,不要在 profile 里跑 pnpm install(@deepseek-ai/* 由宿主提供)。安装后重启 DSH。

典型用法

  1. 装好依赖与模型,写好 whisper、modelDir、outRoot(及可选的 inputRoot、autoSweep)。
  2. 执行 dshm_install 并重启 DSH。
  3. 按笔记目录放置媒体后,调用 media_caption_process 并传入 note;或对任意文件调用 media_caption_file。
  4. 若开启批处理或需手动再跑一轮,使用 media_caption_sweep:run: false 先看队列与磁盘缺口,run: true 再真正处理。

批处理遵循「位置即状态、一轮一单、进度以磁盘产物为准」;处理流程分步续跑(音轨 → 字幕 → 帧),同文件第二次命中缓存可快速跳过。

适用场景与注意

适合:需要在 DSH 工作流里稳定拿到可机器读取的转写与时间对齐帧图,再由 Agent 或自研逻辑做摘要、检索、笔记生成;口播类以 JSON 为主,无声或偏视觉类以 preview 为主。

注意:

  • 插件在本机调用 Whisper 与 ffmpeg,首次转写耗时会随时长与硬件变化;README 未提供虚构的性能数据,使用前请在本机试跑。
  • DSH 插件以当前 dsh 进程权限运行,安装前应阅读 源码 与 MIT / NOTICE,确认路径与命令符合你的安全策略。
  • SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系;星标与分类以目录页实时信息为准。

结尾

dsh-media-caption 把视频/音频理解拆成「原料层」:JSON 字幕 + JPG 关键帧,把要不要读字、要不要看图留给调用方。若要安装说明与队列细节,以 GitHub README 为准。

  • 目录页:https://www.skillhub.cn/plugins/CleranceWang/dsh-media-caption
  • 仓库:https://github.com/CleranceWang/dsh-media-caption
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜