🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

字幕工具箱 yuehancn/dsh-tool-subtitle

DeepSeek Harness
yuehancn33 天前有提交已提供中文文档扫描:含敏感能力

转写音视频并校时互转,出片前体检字幕

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add yuehancn/dsh-tool-subtitle
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么
dsh 原生插件 · tool
装得上吗
曾在 dsh 0.2.0-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.1-rc.5,本站尚未在新版下复验
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 33 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件
查看扫描证据(共 12 处,展示前 11 条)
  • 执行外部命令来自配置/变量
    lib/index.js:575
    child = spawn(command, args, {
  • 写入本地文件
    lib/index.js:687
    await mkdir(outputDir, { recursive: true });
  • 读取本地文件
    lib/index.js:698
    const text = await readFile(source, "utf8");
  • 写入本地文件
    lib/index.js:890
    await writeFile(destination, body, "utf8");
  • 读取本地文件
    lib/index.js:891
    const info = await stat(destination).catch(() => undefined);
  • 写入本地文件
    lib/index.js:961
    await writeFile(destination, formatSubtitle(cues, dialect, { title: stem }), "utf8");
  • 读取本地文件
    lib/index.js:962
    const info = await stat(destination).catch(() => undefined);
  • 写入本地文件
    lib/index.js:1031
    await writeFile(destination, formatSubtitle(cues, outputDialect, { title: stem }), "utf8");
  • 读取本地文件
    lib/index.js:1194
    const text = await readFile(produced, "utf8");
  • 读取本地文件
    lib/index.js:1223
    info = await stat(source);
  • 读取本地文件
    lib/index.js:1243
    const direct = await stat(requested).catch(() => undefined);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/schemastery@deepseek-ai/cordis@deepseek-ai/dsh-tools
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 音视频转写字幕
  • 字幕校时互转
  • 字幕体检

README

由 DeepSeek 最新模型翻译生成
字幕工具箱 —— 给 dsh 一套真的能改时间轴的字幕工具 转写、互转、校时、体检 —— 把音频变成带时间戳的字幕,把 SRT 换成 ASS,把整体偏移 2.5 秒的字幕对齐回去,在出片前先查一遍有没有「一句 20 秒」。 给 DeepSeek Harness 用的自建工具插件:7 个结构化工具,把字幕这件事从「一堆正则」变成「能问能改」。 Compatibility: built and tested against dsh 0.2.0-rc.2 (preview). The apply(ctx) plugin spec is stable; verify against your own dsh version if newer. 一行安装 dsh plugin --profile desktop add github:yuehancn/dsh-tool-subtitle 支持的 profile:desktop(桌面版)/ web(Web 版)。装完重启 dsh 即可用。 为什么需要它 字幕是格式知识 + 时间轴算术,两样都容易做错: - 三种方言的时间戳语法各不相同 —— SRT 用逗号、VTT 用点、ASS 用厘秒 且小时只有一位。写错一个字符,播放器直接不认。
展开完整文档(README 剩余 1 节)
字幕工具箱 —— 给 dsh 一套真的能改时间轴的字幕工具

转写、互转、校时、体检 —— 把音频变成带时间戳的字幕,把 SRT 换成 ASS,把整体偏移 2.5 秒的字幕对齐回去,在出片前先查一遍有没有「一句 20 秒」。

给 DeepSeek Harness 用的自建工具插件:7 个结构化工具,把字幕这件事从「一堆正则」变成「能问能改」。

Compatibility: built and tested against dsh 0.2.0-rc.2 (preview).
The apply(ctx) plugin spec is stable; verify against your own dsh version if newer.

一行安装

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

支持的 profile:desktop(桌面版)/ web(Web 版)。装完重启 dsh 即可用。

为什么需要它

字幕是格式知识 + 时间轴算术,两样都容易做错:

- 三种方言的时间戳语法各不相同 —— SRT 用逗号、VTT 用点、ASS 用厘秒 且小时只有一位。写错一个字符,播放器直接不认。
- ASS 的 Dialogue: 字段顺序由 Format: 行声明,真实文件会重排字段;按位置硬读就会把「样式名」读成「开始时间」。
- 「字幕比声音快 2.5 秒,而且越到后面差得越多」是一个纯算术问题(时间 × 1.015 + 2.5),但每次都要重新推导一遍。

这个插件把这些收进工具里。不 mock 一个字节:解析器能吃真实世界里的脏文件,时间轴运算有 291 条断言对着真实 @deepseek-ai/dsh-tools 和真实子进程跑过。

七个工具

| 工具 | 干什么 |
| subtitle_status | 探本机有没有可用的识别引擎,列出能读写的方言 |
| subtitle_read | 把字幕读成带数字时间戳的结构化 cue 列表 |
| subtitle_write | 把 cue 列表写成文件(时间戳可以给秒数,也可以给字符串) |
| subtitle_convert | SRT ↔ VTT ↔ ASS 互转,可顺带校时/合并/拆分 |
| subtitle_retime | 整体位移 + 缩放,专治「偏移」和「漂移」 |
| subtitle_check | 出片前体检:过长、过短、读不过来、重叠、空文本、繁体 |
| subtitle_transcribe | 用你配置的识别引擎把音视频转成字幕 |

为什么 subtitle_read 返回 JSON 而不是一大段文本

因为「把字幕转成文本」用 cat 就够了,模型真正需要的是能推理的时间轴 ——哪两句挨得太近、那句 20 秒的有多长、第 47 条后面有没有空洞。这些都要数字。

为什么 subtitle_retime 单独成一个工具

「偏移 2.5 秒」和「漂移 1.5%」在实操里同时出现,正确答案是 时间 × factor + offset 一个式子。把它做成工具,模型就不用每次自己推导。

subtitle_check 查什么

| 问题 | 判据(可配) |
| too-long | 单条超过 maxCueSeconds(默认 7 秒) |
| too-short | 单条短于 minCueSeconds(默认 0.8 秒) |
| too-fast | 阅读速度超过 maxCharsPerSecond(默认 9/秒) |
| overlap | 两条字幕时间重叠(多数播放器会糊成一团) |
| non-positive-duration | 结束不晚于开始 |
| empty-text | 没有文字 |
| possible-traditional-chinese | 出现繁体专用字(ASR 常见坑) |

阅读速度按汉字逐字 + 拉丁词逐词 + 数字逐位算 —— 因为观众读 2026 是读四个符号,不是读一个词。

配置

~/.dsh/profiles/<profile>/cordis.patch.yml
- id: tool-subtitle
config:
outputDir: C:/Users/you/Videos/subtitle-output
识别引擎:任何会写出 SRT 的可执行文件 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 # 也可以填 large-v3 asrLanguage: zh

asrArgs 里的占位符:

| 占位符 | 含义 |
| {input} | 输入的音视频绝对路径 |
| {output} | 期望的 SRT 绝对路径 |
| {dir} | 插件输出目录 |
| {lang} | 识别语言 |
| {model} | 模型名或路径 |

| 配置项 | 默认 | 说明 |
| outputDir | subtitle-output | 产物目录 |
| timeoutMs | 1800000 | 单次调用预算(30 分钟,转写很慢) |
| asrCommand | 空 | 留空则禁用转写,其余工具照常可用 |
| asrModel / asrLanguage | large-v3 / zh | 传给 {model} / {lang} |
| asrEnv | [] | 给引擎进程的额外环境变量,"KEY=VALUE" 形式 |
| maxCueSeconds / minCueSeconds | 7 / 0.8 | 体检阈值 |
| maxCharsPerSecond | 9 | 阅读速度上限 |
| maxCues | 500 | 单次最多内联返回多少条 |
| status/read/write/convert/retime/transcribe/check | true | 按需关掉某个工具 |

不配 asrCommand 也能用 —— 读、写、转换、校时、体检都是纯本地运算,不依赖任何外部引擎。

兼容性说明

- 引擎无关:本插件不绑定 faster-whisper。任何「接受输入路径、写出 SRT」的命令都能接 —— whisper.cpp、openai-whisper、内部 ASR 服务客户端都行。
- 引擎不认 {output} 时会自动归位:很多引擎只有 --output_dir(文件名由它自己定),此时插件会把产物改名到你要求的 outputName,而不是让你去猜它写哪儿了。
- 引擎静默失败会被抓到:跑完却没写出 SRT 时,报错里会带上实际执行的完整命令行,让你知道是参数不对还是路径没写对。

安全说明

- 只用 spawn(command, argsArray) —— 不拼 shell 字符串,路径里有空格、引号、中文都不会出事(有专门的中文带空格用例)。
- 只读写你指定的输入文件与 outputDir,不上传、不联网。
- 识别引擎是你自己配置的可执行文件,插件不下载、不安装任何东西。

跑测试

mkdir -p node_modules/@deepseek-ai
cp -r "$HOME/.dsh/profiles/desktop/node_modules/@deepseek-ai/." node_modules/@deepseek-ai/
node _test/run-all.mjs

三个套件,291 条断言全绿(对着真实 @deepseek-ai/dsh-tools 跑,不 mock):

| 套件 | 断言 | 内容 |
| test-logic.mjs | 162 | 三套时间戳语法与往返、SRT/VTT/ASS 解析(含 CRLF/BOM/缺索引行/字段重排/卡拉OK标签)、三套序列化与跨方言往返、阅读速度、排序重编号、位移/缩放、拆分、合并、7 类体检、占位符展开、cue 强制转换 |
| test-integration.mjs | 84 | 模块导出、注册数量、defineTool schema 归一化、七个开关、18 条错误路径、卡片标题、输出渲染 |
| test-e2e.mjs | 45 | 真的起子进程当识别引擎 → 真写 SRT → 真解析;引擎不可达/退出非零/静默无输出的三种诊断;transcribe → check → 拆分 → 校时 → VTT → ASS → 读回 全链路;中文带空格路径 |

test-e2e.mjs 用一个自带的替身引擎 _test/fixtures/mock-asr.mjs,所以不需要装任何模型就能跑,也不需要联网。

许可

MIT
预览分享卡片长什么样 ↓yuehancn/dsh-tool-subtitle
分享 · DeepSeek Harness Hub
yuehancn/dsh-tool-subtitle

转写音视频并校时互转,出片前体检字幕

这是你的仓库?认领条目

回到顶部