dsh-tool-subtitle:给 DeepSeek Harness 一套能改时间轴的字幕工具

前言

在 DSH 里处理字幕,常见做法是读整段 SRT 文本、用正则改时间戳,或让模型自己推导「整体偏移 2.5 秒、后面越拖越多」这类算术。SRT、VTT、ASS 三种格式的时间戳语法不同,ASS 的 Dialogue: 字段顺序还依赖 Format: 行;一旦写错字符或按位置硬读,播放器不认,模型也难以对「哪两句太近、哪条 20 秒」做推理。

下面介绍社区插件 yuehancn/dsh-tool-subtitle(维护者 yuehancn,分类:模型推理):为 DeepSeek Harness 提供 7 个结构化工具,覆盖转写、互转、校时与出片前体检,把字幕从「一堆正则」收成「能问能改」的本地运算;解析与校时逻辑在 README 中说明已用 291 条断言对着真实 @deepseek-ai/dsh-tools 与子进程验证,且不 mock 字节级解析。

这是什么

dsh-tool-subtitle 是面向 DeepSeek Harness 的自建工具插件:读写字幕为带数字时间戳的 cue 列表(JSON),在 SRT / VTT / ASS 之间互转,做整体位移与缩放,并在绑定可选 ASR 命令时把音视频转成 SRT。不配识别引擎时,读、写、转换、校时、体检仍可在本机完成。

  • 目录页:https://www.skillhub.cn/plugins/yuehancn/dsh-tool-subtitle
  • 源码与文档:https://github.com/yuehancn/dsh-tool-subtitle
  • 许可证:MIT(package.json 版本 1.0.0)
  • 兼容性:README 写明针对 dsh 0.2.0-rc.2(preview)构建与测试;apply(ctx) 插件规范稳定,较新版本需自行核对。

社区插件目录(SkillHub)与 DeepSeek / 幻方无官方从属关系;安装前建议自行查看源码与许可证。插件以当前 dsh 进程权限运行,只读写你指定的输入与配置的 outputDir,识别引擎为你本机配置的可执行文件。

七个工具在做什么

工具 作用
subtitle_status 探测本机是否有可用识别引擎,列出可读写字幕方言
subtitle_read 将字幕读成带数字时间戳的结构化 cue 列表
subtitle_write 将 cue 列表写回文件(时间戳可用秒数或字符串)
subtitle_convert SRT ↔ VTT ↔ ASS 互转,可顺带校时、合并、拆分
subtitle_retime 整体位移 + 缩放,处理固定偏移与时间漂移
subtitle_check 出片前体检:过长、过短、阅读过快、重叠、空文本、繁体等
subtitle_transcribe 用配置的 ASR 命令把音视频转成字幕

subtitle_read 返回 JSON 而非大段文本,是为了让模型基于数字时间轴推理(间距、单条时长、空洞等)。subtitle_retime 单独成工具,是为把「偏移 + 漂移」统一为 时间 × factor + offset,避免每次重新推导。

subtitle_check 默认判据包括:单条超过 7 秒(too-long)、短于 0.8 秒(too-short)、阅读速度超过 9 字/秒(too-fast)、时间重叠、非正时长、空文本、可能的繁体专用字等;阈值可在配置中调整。

安装与启用

先做一行安装(README 原文命令;desktop 与 web profile 均支持),装完重启 dsh。

dsh plugin --profile desktop add github:yuehancn/dsh-tool-subtitle

Web 版将 --profile desktop 换成 web 即可。插件通过 cordis.patch.yml 注册,id 为 tool-subtitle。

配置识别引擎(可选)

转写依赖你在 profile 下补丁里配置的 ASR 命令;留空则 subtitle_transcribe 不可用,其余工具照常。

配置写在 ~/.dsh/profiles/<profile>/cordis.patch.yml,示例结构如下(路径按本机修改):

- id: tool-subtitle
  config:
    outputDir: C:/Users/you/Videos/subtitle-output
    asrCommand: C:/Users/you/.local/bin/whisper-faster.exe
    asrArgs:
      - "{input}"
      - "--model"
      - "{model}"
      - "--output_dir"
      - "{dir}"
      - "--output_format"
      - "srt"
      - "--language"
      - "{lang}"
    asrModel: D:/models/whisper
    asrLanguage: zh

asrArgs 占位符:{input} 输入音视频绝对路径,{output} 期望 SRT 路径,{dir} 插件输出目录,{lang} / {model} 语言与模型。README 说明引擎不识别 {output}、只写 --output_dir 时,插件会把产物改名到你要求的输出名;跑完未生成 SRT 时,错误信息会带上实际执行的完整命令行。

常用配置项摘要:

配置项 默认 说明
outputDir subtitle-output 产物目录
timeoutMs 1800000 单次调用超时(30 分钟)
asrCommand 空 空则禁用转写
asrModel / asrLanguage large-v3 / zh 传给占位符
maxCueSeconds / minCueSeconds 7 / 0.8 体检阈值
maxCharsPerSecond 9 阅读速度上限
maxCues 500 单次内联返回 cue 上限
status/read/…/check true 可按需关闭单个工具

子进程使用 spawn(command, argsArray),不拼接 shell 字符串;识别引擎需自行安装,插件不下载模型。

典型用法思路

README 未给出固定对话示例,但工具链可按下列顺序在 Harness 里组合(路径与格式按任务替换):

  1. subtitle_status:确认本机 ASR 与支持的读写格式。
  2. subtitle_transcribe(已配 asrCommand):音视频 → SRT。
  3. subtitle_check:出片前查过长、重叠、繁体等。
  4. subtitle_retime:整体加 2.5 秒或按 factor 修漂移。
  5. subtitle_convert:导出 VTT / ASS,或合并、拆分轴。
  6. subtitle_read / subtitle_write:在 cue 列表上改字幕后写回。

项目自带 e2e 测试描述过「transcribe → check → 拆分 → 校时 → VTT → ASS → 读回」全链路;本地跑测试可用 README 中的命令(依赖已安装的 dsh profile 内 @deepseek-ai 包,e2e 使用替身引擎 _test/fixtures/mock-asr.mjs,无需真实模型)。

适用场景与注意

适合:需要在 DSH 智能体工作流里稳定处理 SRT/VTT/ASS、校时间轴、批量体检字幕,并可选对接任意「输入媒体、输出 SRT」的 ASR 可执行文件(whisper.cpp、faster-whisper 等,插件不绑定单一引擎)。

注意:

  • 与 dsh 0.2.0-rc.2 对齐测试;升级 dsh 后应验证工具 schema 与行为。
  • 转写耗时可能很长,默认 timeoutMs 为 30 分钟。
  • 安装插件等于信任其读写本地文件与 spawn 你配置的 ASR;使用前请阅读 MIT 许可下的源码。
  • GitHub 星标为 0(目录线索),不代表功能完整性;质量以 README 中的测试说明为准。

结尾

dsh-tool-subtitle 把字幕相关的格式解析、时间轴算术和体检规则收进 7 个 DSH 工具,不配 ASR 也能完成读写、互转与校时;配好 asrCommand 后可在同一套工具里完成转写与后续处理。

  • 社区目录:https://www.skillhub.cn/plugins/yuehancn/dsh-tool-subtitle
  • GitHub:https://github.com/yuehancn/dsh-tool-subtitle
羽毛球分组比赛记分
小程序二维码

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

小夜