wjs-localizing-video(编排器) 是做什么的?
此技能已被拆分。 原来 1300 行的全能技能现在拆分为 4 个专注的子技能。仅在用户一次请求完整流水线时使用此编排器。对任何单步操作,请直接路由至对应子技能。
四个子技能
| 步骤 | 技能 | 输入 | 输出 |
|---|---|---|---|
| 1. 语音识别 | /wjs-transcribing-audio | 音频/视频 + 源语言 | 源语言 SRT |
| 2. 翻译 | /wjs-translating-subtitles | 源 SRT + 目标语言 | 目标 SRT(按标点换行) |
| 3. 配音(可选) | /wjs-dubbing-video | 视频 + 目标 SRT + 音色 | *_<lang>_dub.mp4(替换为 TTS 音频) |
| 4. 烧录/混音(可选) | /wjs-burning-subtitles | 视频 + SRT +(可选配音) | 最终 MP4(一次编码) |
步骤 3 和步骤 4 是可选且独立的——大多数纯字幕任务在步骤 2 之后直接通过 /wjs-burning-subtitles 软封装结束。大多数纯配音任务在步骤 3 后结束。
何时调用编排器 vs. 直接调用子技能
调用此技能(wjs-localizing-video) 当用户一次请求完整流水线时:
- "帮我把这个西班牙语视频做成中文字幕和中文配音"
- "translate this Spanish video to English with dubbing"
- "全套:转写、翻译、烧字幕、配音、混音"
直接调用子技能 当用户只请求单一步骤时:
- "转写一下这个音频" →
/wjs-transcribing-audio - "把这个 SRT 翻译成中文" →
/wjs-translating-subtitles - "给这个视频配个中文音" →
/wjs-dubbing-video - "把字幕烧进视频" →
/wjs-burning-subtitles
子技能更加专注,输入/输出合同更紧凑。当用户只要求一步时,不要通过编排器路由——你只会读不需要的文档。
进度检查清单(请先做,再调用任何子技能)
流水线最多包含四个步骤,运行时间几分钟。用户希望看到实时进度,而不是长时间的沉默后突然出现一个完成文件。在调用第一个子技能前,将计划步骤用 TaskCreate 创建为检查清单。 开始每个步骤时,将其任务更新为 in_progress;完成时,标记为 completed。Claude Code 会在 UI 中渲染为实时勾选的检查清单。
创建哪些任务
根据用户请求,决定将要运行的步骤子集:
| 用户请求 | 需创建的任务 |
|---|---|
| 完整本地化(字幕 + 配音 + 最终混音) | ① 转写 ② 翻译 ③ 配音 ④ 烧字幕 + 混音 |
| 仅字幕(不改变声音) | ① 转写 ② 翻译 ③ 烧字幕(或软封装) |
| 仅配音(不烧录) | ① 转写 ② 翻译 ③ 配音 |
| 用户已有源 SRT | 跳过①;仅创建剩余步骤 |
| 用户已有目标 SRT | 跳过①和②;仅创建剩余步骤 |
不要为不会运行的步骤创建任务——清单中未勾选的项目会被理解为“忘了做”,而不是“有意跳过”。
任务标题的措辞
使用下方“最终回复模板”中相同的标签,使进行中的检查清单和完成摘要读起来像同一件作品:
转写 <source-lang>(例如转写 西班牙语)翻译 → <target-lang>(例如翻译 → 中文)配音 <target-lang>(例如配音 中文 (高冷御姐 -8%))烧字幕 + 原声底层 <bed>(例如烧字幕 + 原声底层 0.18)
对于 activeForm,使用现在进行时态(转写中…,翻译中…,配音中…,合成中…)。
状态纪律
- 只有当前正在运行的任务标记为
in_progress(一次一个)。 - 子技能返回其输出文件时立即标记为
completed——不要批量一起标记。 - 如果某一步骤出现澄清问题或失败,保持为
in_progress,以便用户能准确看到流水线停止的位置。不要将半完成步骤标记为 completed。 - 如果用户在流水线中途改变方向(如“跳过配音”),更新剩余任务:删除不再适用的,保留其余。不要静默丢弃它们。
规范端到端流水线(西班牙语 → 中文,配音 + 原声底层 + 烧录)
这是最初的“验证场景”——西班牙语瑜伽/灵性内容适配中文,用于微信视频号/小红书。贯穿所有 4 个子技能。
第 1 步——转写西班牙语源
调用 /wjs-transcribing-audio,传入视频和 `--language es`。
子技能处理以下工作:分块、词级别时间戳、标点边界 cue 组装、循环保护、重试。输出:entrevista.srt(西班牙语,源语言)。
第 2 步——翻译为简体中文
调用 /wjs-translating-subtitles,传入西班牙语 SRT 和目标语言 `zh-CN`。
子技能处理以下工作:在标点处重新分段、最小化填充性指示词、限制行长、保持说话者语气。输出:entrevista.zh-CN.srt。
第 3 步——(可选)配音为中文
调用 /wjs-dubbing-video,传入视频 + entrevista.zh-CN.srt + 音色 ID。
面向成熟沉思型女性的默认音色:zh_female_gaolengyujie_moon_bigtts(火山高冷御姐,--rate -8% +0Hz)。如果没有火山凭证:zh-CN-XiaoxiaoNeural --rate -8% --pitch -10Hz。子技能先采样,再提交。
输出:entrevista_zh_dub.mp4。
第 4 步——烧录字幕 + 配音与原声底层混音
调用 /wjs-burning-subtitles,参数 --video entrevista.mp4 --srt entrevista.zh-CN.srt --dub entrevista_zh_dub.mp4
子技能处理以下工作:libass 可用性检查、evermeet 静态构建后备、字号校准、全渲染前帧检查、原声底层混音音量 0.18。
输出:entrevista_zh_final.mp4(可发布)。
用户标准化的默认配置
这些配置贯穿流水线;每个子技能会在其对应部分强制执行:
- 中文 ASR 首选路由到豆包(Volcano);Whisper 作为后备。 在
/wjs-transcribing-audio中强制执行。 - 整个配音使用单一音色,除非用户明确指定多个说话者。 在
/wjs-dubbing-video中强制执行。 - 原声以低音量底层(0.15–0.25)保留在任何配音下方。 在
/wjs-burning-subtitles中强制执行。 - 针对微信视频号/抖音默认硬编码字幕;其他情况默认软封装。 在
/wjs-burning-subtitles中强制执行。 - 频道 CTA 名称(如添加到描述中):王建硕——绝不能是嘉宾名称。(来自
~/.claude/CLAUDE.md的全局规则;当此流水线后接/wjs-uploading-video时适用。)
文件命名约定(继承自原技能)
输入: entrevista.mp4
中文流水线:
源 SRT entrevista.srt
中文 SRT entrevista.zh-CN.srt
中文配音(仅音频) entrevista_zh_dub.mp4
中文最终版(字幕+配音) entrevista_zh_final.mp4
英文流水线:
英文 SRT entrevista.en.srt
英文配音 entrevista_en_dub.mp4
英文最终版 entrevista_en_final.mp4
双语字幕:
西班牙语 + 中文 entrevista.es-zh.srt
西班牙语 + 英文 entrevista.es-en.srt
三种语言 entrevista.es-zh-en.srt
BCP-47 风格的后缀允许多种目标语言输出并存,使目标语言一目了然。
此编排器不做的事
- 不重新实现任何功能。每个步骤都委托给子技能。
- 不打包脚本。
dub.py位于/wjs-dubbing-video/scripts/,render.py位于/wjs-burning-subtitles/scripts/,visual_diarize.py位于/wjs-dubbing-video/scripts/。如果你在wjs-localizing-video/scripts/下看到过时的副本,请优先使用规范子技能位置。
最终回复模板
当完整流水线完成后,用用户的语言简要回复。匹配用户习惯的原始“Done”模板:
已完成:
- 西班牙语转写 (/wjs-transcribing-audio)
- 中文翻译 (/wjs-translating-subtitles)
- 中文配音 (/wjs-dubbing-video, voice: 高冷御姐 -8%)
- 烧入字幕 + 原声底层 0.18 (/wjs-burning-subtitles)
输出:
- entrevista.srt
- entrevista.zh-CN.srt
- entrevista_zh_dub.mp4
- entrevista_zh_final.mp4
不确定片段:
- 00:01:23–00:01:26 背景噪音较大,原文可能不完全准确。
如果没有不确定片段,则删除第二个列表。
参见
/wjs-segmenting-video— 将长视频切分为独立短视频剪辑(使用自己的 SRT 切片器;与本流水线正交)。/wjs-overlaying-video— 通过 HyperFrames 在视频片段上添加 HTML/CSS 字幕。不要与/wjs-burning-subtitles组合使用——每个输出只选择一种字幕系统。/wjs-uploading-video— 将最终 MP4 推送到 YouTube。/lark-minutes— 当本地豆包 ASR 不可用时,通过飞书妙记作为中文转写替代路径。