🎬 An AI Agent skill for reviewing and optimizing SRT subtitles with an interactive diff panel.
SaferSkills independently audited subtitle-optimizer (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
此 skill 用于优化 SRT 字幕文件中的文字内容,提高准确性,同时严格保留原始时间戳。所有实际写入最终 SRT 的修改都必须经过审查面板或用户明确确认。
词汇列表(assets/corrections.json):包含已知需要修正的词汇对,支持两种匹配模式:
普通模式(默认):
{"from": "cloud code", "to": "Claude Code", "reason": "产品名称"}正则模式(`regex: true`): 用于处理多种变体,如大小写、空格差异:
{"from": "cloud\\s?code", "to": "Claude Code", "reason": "产品名称", "regex": true}cloud code → Claude Codecloudcode → Claude Code(无空格)Cloud Code → Claude Code(大写)常用正则语法:
\s? — 可选空格\s* — 零或多空格-? — 可选连字符(?i)读取 skill 目录下的 assets/corrections.json,了解已知的修正规则。
使用 Read 工具读取用户提供的 SRT 文件。SRT 格式结构:
1
00:00:01,000 --> 00:00:04,000
第一行字幕文本
2
00:00:05,000 --> 00:00:08,000
第二行字幕文本解析要点:
逐一检查每个字幕条目,识别以下类型的问题:
基于词汇列表的修正:
corrections.json 中的每条规则regex: true,使用正则匹配(考虑大小写不敏感)regex: false 或省略,使用普通字符串匹配转录错误:
语义偏差:
判断依据:
先从 skill 目录运行 prepare-review。它会读取原始 SRT 和词汇列表,在原始 SRT 同目录生成:
{原文件名}_candidate.srt{原文件名}_diff_preview.htmlnode scripts/generate_diff.js prepare-review \
/path/to/video.srt \
--corrections assets/corrections.json不要把真实用户产物写入 skill 仓库目录或仓库内临时目录。默认只在原始 SRT 同目录生成候选 SRT 和审查面板;调试产物不是最终交付物,确实需要时写到系统临时位置并在完成后清理。
prepare-review 生成的候选文件包含词汇列表命中的自动修正。候选文件不是最终输出,必须进入审查流程。
prepare-review 只是规则词汇预处理,不会自动产生上下文级 AI 建议。不能只运行 prepare-review 就向用户汇报审查完成。
运行 prepare-review 之后,必须继续阅读原始 SRT 和候选 SRT,做完整逐条审阅,逐段检查候选文件中仍然存在的 ASR 错字、近音字、断句问题、上下文语义偏差和术语不一致。不得只抽样、不得只搜索品牌名或已知词汇、不得只检查脚本输出的差异行。
AI 审阅协议:
review-plan 获得连续审阅范围,不得只靠一次整文件 Read;默认不要生成 *_review_chunks.json: node scripts/generate_diff.js review-plan \
/path/to/video.srt \
--size 100review-plan 只输出范围,不创建额外文件。只有在调试或需要机器可读审计记录时,才可以显式运行 review-chunks,并且输出到系统临时位置或 Agent 临时目录,不要写到用户字幕目录,也不要作为 skill 文件保留。
review-plan 输出的 chunk 范围为准。长文件可以按每 80-150 条字幕一批处理,但必须覆盖完整文件。不得通过一次整文件读取后直接宣称完成;必须能说明已审阅的连续区间。{原文件名}_candidate.srt,随后刷新审查面板。1-100, 101-200, ...,不能只说“已逐条审阅”。硬性汇报规则:
重点检查类型:
分析时至少覆盖:
如果识别出高置信度 AI 修正:
{原文件名}_candidate.srt如果没有发现高置信度 AI 修正,也要在最终回复中明确说明“已完成上下文 AI 审阅,未发现可安全加入候选文件的 AI 建议”。不要把脚本输出中的 AI corrections: 0 当作已经完成 AI 审阅的证据;它只表示当前候选文件里没有非词汇表来源的差异。
如果第五步之后没有再修改候选 SRT,prepare-review 已经生成审查面板,不需要重复运行命令。若你编辑了候选 SRT 来加入 AI 修正,则用同一个候选文件重新生成 HTML 审查面板:
node scripts/generate_diff.js \
/path/to/video.srt \
/path/to/video_candidate.srt \
/path/to/video_diff_preview.html \
--corrections assets/corrections.json审查面板默认展示发生变化的字幕块,同时必须支持切换到“全部字幕”和“未修改”,用于检查是否有漏改。面板包含:
{原文件名}_fixed.srt)from、to、regex,用于沉淀后续可复用的规则;页面会自动写入默认 reasonnew_corrections.json,提示用户把文件交给 Agent,并让它合并到 assets/corrections.json审查面板特性:
assets/diff_preview_template.html 中的优化审查台 UI;不要临时生成简化版、旧版或一次性 HTMLnew_corrections.json;静态页面本身不直接修改本地词汇表文件{文件名}_diff_preview.html。默认展示修改行,你也可以切换到全部字幕或未修改行检查漏改。请在页面中接受/拒绝修改,也可以添加遗漏词汇或手动修正未修改的字幕行。完成后点击“导出最终 SRT”即可下载 {文件名}_fixed.srt。如果新增了可复用词汇规则,请在“追加词汇规则”区域点击“导出新增规则”,下载后把 new_corrections.json 交给 Agent 合并到规则库。"普通用户生成最终字幕不需要 JSON。只有当用户在页面里追加了可复用词汇规则,并导出了 new_corrections.json 时,才需要合并到 assets/corrections.json:
node scripts/generate_diff.js update-corrections \
new_corrections.json \
--corrections assets/corrections.json合并规则:
new_corrections.json 中的 correctionsmanualCorrectionsfrom、to、regex 自动去重assets/corrections.json,不会修改当前 SRT 文件如果希望新增规则也立刻影响当前字幕,应先合并规则,再重新从第三步开始扫描并生成新的候选文件和审查面板。若只是想修改当前某条字幕,应使用“手动修正字幕行”,它会直接进入页面导出的最终 SRT。
普通用户优先使用页面中的“导出最终 SRT”。当需要在 Agent/CI 中复现同一批审查决策时,仍可使用脚本生成最终字幕文件:
node scripts/generate_diff.js apply-decisions \
original.srt \
video_candidate.srt \
review_decisions.json \
video_fixed.srt \
--corrections assets/corrections.json应用规则:
acceptedChangeIds:使用候选文件中的修正文本rejectedChangeIds:保留原字幕文本,除非同一序号存在手动行级修正pendingChangeIds:兼容字段,当前页面通常导出为空数组manualLineEdits:直接覆盖指定字幕块文本manualCorrections:兼容旧审查记录,可追加到 assets/corrections.json,自动去重最终文件要求:
_fixed 后缀命名输出文件(例:video.srt → video_fixed.srt){原文件名}_fixed.srtnew_corrections.json 只用于更新规则库,不是生成最终字幕的必需步骤[原始序号]
[原始时间码]
[修正后文本]
[原始序号]
[原始时间码]
[修正后文本]
...预览页面为一个独立的 HTML 文件,包含内联 CSS 和 JavaScript,无需外部依赖。
设计风格:
数据结构:
const diffData = [
{
id: 1,
timestamp: "00:00:01,000 --> 00:00:04,000",
before: "原文",
after: "修正后",
type: "vocabulary", // 或 "ai"
status: "accepted", // accepted / rejected
reason: "产品名称",
sourceCorrection: {
from: "cloud\\s?code",
to: "Claude Code",
reason: "产品名称",
regex: true
}
}
];
const reviewRows = [
{
id: 1,
timestamp: "00:00:01,000 --> 00:00:04,000",
before: "原文",
after: "修正后",
beforeHtml: "原文",
afterHtml: "修正后",
type: "vocabulary",
status: "accepted",
kind: "changed", // changed / unchanged
changeNumber: 1 // 未修改行为 null
}
];新增规则导出格式:
{
"version": 1,
"generatedAt": "2026-04-16T00:00:00.000Z",
"corrections": [
{"from": "原文", "to": "修正后", "reason": "遗漏词汇", "regex": false}
]
}new_corrections.json,再由 Agent 或脚本追加到 assets/corrections.jsoncorrections.json;更新词汇表仍需要 Agent 或脚本处理~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.