wjs-localizing-video

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

wjs-localizing-video (orchestrator)

wjs-localizing-video(编排器)

This skill was split. What used to be one 1300-line catch-all is now 4 focused sub-skills. Use this orchestrator only when the user asks for the full pipeline in one request. For any individual step, route directly to the sub-skill.
该技能已拆分。 原本包含1300行代码的全能型技能现已拆分为4个专注的子技能。仅当用户一次性请求完整流程时,才使用此编排器。如果是单个步骤,请直接调用对应的子技能。

The four sub-skills

四个子技能

StepSkillINOUT
1. ASR
/wjs-transcribing-audio
audio / video + source languagesource-language SRT
2. Translate
/wjs-translating-subtitles
source SRT + target languagetarget SRT (punct-bounded)
3. Dub (optional)
/wjs-dubbing-video
video + target SRT + voice
*_<lang>_dub.mp4
(TTS audio swapped in)
4. Burn / mix (optional)
/wjs-burning-subtitles
video + SRT + (optional dub)final MP4 (one encode)
Steps 3 and 4 are optional and independent — most "subtitle-only" jobs stop after step 2 + soft-mux via
/wjs-burning-subtitles
. Most "dub-only" jobs stop after step 3.
步骤技能输入输出
1. ASR
/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后即可完成。

When to invoke this orchestrator vs a sub-skill directly

何时调用此编排器 vs 直接调用子技能

Invoke this skill (
wjs-localizing-video
)
when the user asks for the whole chain in one go:
  • "帮我把这个西班牙语视频做成中文字幕和中文配音"
  • "translate this Spanish video to English with dubbing"
  • "全套:转写、翻译、烧字幕、配音、混音"
Invoke a sub-skill directly when the user asks for one step:
  • "转写一下这个音频" →
    /wjs-transcribing-audio
  • "把这个 SRT 翻译成中文" →
    /wjs-translating-subtitles
  • "给这个视频配个中文音" →
    /wjs-dubbing-video
  • "把字幕烧进视频" →
    /wjs-burning-subtitles
The sub-skills are more focused and document their input/output contracts tighter. Don't route through this orchestrator when a single step is the whole ask — you'll just be reading docs you don't need.
**调用此技能(
wjs-localizing-video
)**的场景:用户一次性请求完整流程:
  • "帮我把这个西班牙语视频做成中文字幕和中文配音"
  • "translate this Spanish video to English with dubbing"
  • "全套:转写、翻译、烧字幕、配音、混音"
直接调用子技能的场景:用户仅请求单个步骤:
  • "转写一下这个音频" →
    /wjs-transcribing-audio
  • "把这个SRT翻译成中文" →
    /wjs-translating-subtitles
  • "给这个视频配个中文音" →
    /wjs-dubbing-video
  • "把字幕烧进视频" →
    /wjs-burning-subtitles
子技能的功能更聚焦,其输入/输出约定也更明确。当用户仅需要单个步骤时,不要通过此编排器路由——这样只会增加不必要的文档阅读成本。

Progress checklist (do this FIRST, before any sub-skill)

进度检查清单(调用子技能前务必完成)

The pipeline has up to four steps and runs for several minutes. The user wants to see live progress, not a wall of silence followed by a finished file. Before invoking the first sub-skill, lay out the planned steps as a TaskCreate checklist. As you start each step, update its task to
in_progress
; when it finishes, mark
completed
. Claude Code renders this as a checklist in the UI that ticks off in real time.
该流程最多包含四个步骤,运行时间长达数分钟。用户希望看到实时进度,而不是长时间等待后直接收到成品文件。在调用第一个子技能前,请先创建一个任务清单来列出计划执行的步骤。 开始每个步骤时,将其任务状态更新为
in_progress
;完成后标记为
completed
。Claude Code会在UI中渲染此清单,并实时更新勾选状态。

Which tasks to create

需要创建哪些任务

Decide from the user's ask which subset of the 4 steps will run:
User asked forTasks to create
Full localization (subs + dub + final mix)① 转写 ② 翻译 ③ 配音 ④ 烧字幕 + 混音
Subtitles only (no voice change)① 转写 ② 翻译 ③ 烧字幕 (or soft-mux)
Dub only (no burn)① 转写 ② 翻译 ③ 配音
User already has source SRTskip ①; create only the remaining steps
User already has target SRTskip ① and ②; create only the remaining
Don't create tasks for steps you won't run — an unchecked item at the end reads as "we forgot," not "we skipped."
根据用户的请求,确定将执行4个步骤中的哪些子集:
用户需求需要创建的任务
完整本地化(字幕+配音+最终混音)① 转写 ② 翻译 ③ 配音 ④ 烧字幕 + 混音
仅字幕(不更改语音)① 转写 ② 翻译 ③ 烧字幕(或软封装)
仅配音(不烧录)① 转写 ② 翻译 ③ 配音
用户已提供源语言SRT跳过①;仅创建剩余步骤的任务
用户已提供目标语言SRT跳过①和②;仅创建剩余步骤的任务
不要为不会执行的步骤创建任务——未勾选的项目最终会被视为“遗漏”,而非“跳过”。

How to phrase the task subjects

任务主题的表述方式

Use the same labels you'll use in the "Final response template" below, so the in-flight checklist and the completion summary read as the same artifact:
  • 转写 <source-lang>
    (e.g.,
    转写 西班牙语
    )
  • 翻译 → <target-lang>
    (e.g.,
    翻译 → 中文
    )
  • 配音 <target-lang>
    (e.g.,
    配音 中文 (高冷御姐 -8%)
    )
  • 烧字幕 + 原声底层 <bed>
    (e.g.,
    烧字幕 + 原声底层 0.18
    )
For
activeForm
, use the present-continuous variant (
转写中…
,
翻译中…
,
配音中…
,
合成中…
).
使用与下文“最终回复模板”中相同的标签,以便进行中的清单和完成总结保持一致:
  • 转写 <源语言>
    (例如:
    转写 西班牙语
  • 翻译 → <目标语言>
    (例如:
    翻译 → 中文
  • 配音 <目标语言>
    (例如:
    配音 中文 (高冷御姐 -8%)
  • 烧字幕 + 原声底层 <bed>
    (例如:
    烧字幕 + 原声底层 0.18
对于
activeForm
,使用现在进行时变体(
转写中…
翻译中…
配音中…
合成中…
)。

State discipline

状态管理规范

  • Mark
    in_progress
    only the task currently running (one at a time).
  • Mark
    completed
    immediately when the sub-skill returns its output file — don't batch.
  • If a step surfaces a clarifying question or fails, leave it as
    in_progress
    so the user can see exactly where the pipeline stopped. Don't mark a half-finished step as completed.
  • If the user redirects mid-pipeline (e.g., "skip the dub"), update the remaining tasks: delete the ones no longer applicable, keep the rest. Don't silently drop them.
  • 仅将当前正在运行的任务标记为
    in_progress
    (同一时间仅一个)。
  • 子技能返回输出文件后,立即将对应任务标记为
    completed
    ——不要批量处理。
  • 如果某一步骤出现需要澄清的问题或失败,保持其状态为
    in_progress
    ,以便用户清楚看到流程在何处中断。不要将未完成的步骤标记为已完成。
  • 如果用户在流程中途更改需求(例如:“跳过配音”),请更新剩余任务:删除不再适用的任务,保留其余任务。不要默默丢弃。

Canonical end-to-end pipeline (Spanish → Chinese, with dub + bed + burn)

标准端到端流程示例(西班牙语→中文,包含配音+原声底层+烧录)

This is the original "validation scenario" — Spanish yoga/spiritual content into Chinese for 微信视频号 / 小红书. Walks through all 4 sub-skills.
这是最初的“验证场景”——将西班牙语瑜伽/心灵内容本地化至中文,用于微信视频号/小红书。流程涵盖全部4个子技能。

Step 1 — Transcribe the Spanish source

步骤1 — 转写西班牙语源内容

Invoke /wjs-transcribing-audio with the video and `--language es`.
The sub-skill handles: chunking, word-level timestamps, cue assembly at punctuation boundaries, loop guard, retry. Output:
entrevista.srt
(Spanish, source-language).
调用/wjs-transcribing-audio,传入视频文件和参数`--language es`。
子技能负责:内容分块、词级时间戳、按标点合并字幕片段、循环防护、重试机制。输出:
entrevista.srt
(西班牙语源语言字幕)。

Step 2 — Translate to Simplified Chinese

步骤2 — 翻译为简体中文

Invoke /wjs-translating-subtitles with the Spanish SRT and target `zh-CN`.
The sub-skill handles: re-segmenting cues at punctuation, minimizing filler demonstratives, capping line length, preserving speaker tone. Output:
entrevista.zh-CN.srt
.
调用/wjs-translating-subtitles,传入西班牙语SRT和目标语言参数`zh-CN`。
子技能负责:按标点重新分割字幕片段、减少冗余指示词、限制每行长度、保留说话者语气。输出:
entrevista.zh-CN.srt

Step 3 — (Optional) Dub into Chinese

步骤3 —(可选)中文配音

Invoke /wjs-dubbing-video with the video + entrevista.zh-CN.srt + a voice ID.
Default for mature contemplative female:
zh_female_gaolengyujie_moon_bigtts
(Volcano 高冷御姐,
--rate -8% +0Hz
). If no Volcano credentials:
zh-CN-XiaoxiaoNeural --rate -8% --pitch -10Hz
. The sub-skill samples first, then commits.
Output:
entrevista_zh_dub.mp4
.
调用/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

Step 4 — Burn subs + mix dub over original-as-bed

步骤4 — 烧录字幕 + 混合配音与原声底层

Invoke /wjs-burning-subtitles with --video entrevista.mp4 --srt entrevista.zh-CN.srt --dub entrevista_zh_dub.mp4
The sub-skill handles: libass availability check, evermeet static-build fallback, Fontsize calibration, frame-check before full render, audio bed mix at 0.18.
Output:
entrevista_zh_final.mp4
(ship-ready).
调用/wjs-burning-subtitles,参数为--video entrevista.mp4 --srt entrevista.zh-CN.srt --dub entrevista_zh_dub.mp4
子技能负责:检查libass可用性、备用evermeet静态构建、字体大小校准、全渲染前的帧检查、将原声底层混音音量设置为0.18。
输出:
entrevista_zh_final.mp4
(可直接发布)。

Defaults the user has standardized

用户标准化的默认设置

These apply across the pipeline; each sub-skill enforces its own slice:
  • Chinese ASR routes to 豆包 (Volcano) first; Whisper is fallback. Enforced in
    /wjs-transcribing-audio
    .
  • Single voice for the whole dub unless the user explicitly mentions multiple speakers. Enforced in
    /wjs-dubbing-video
    .
  • Original audio kept as a low-volume bed (0.15–0.25) under any dub. Enforced in
    /wjs-burning-subtitles
    .
  • Burn-in for 微信视频号 / 抖音; soft-mux for everything else by default. Enforced in
    /wjs-burning-subtitles
    .
  • Channel CTA name (if added to description): 王建硕 — never a guest's name. (Global rule from
    ~/.claude/CLAUDE.md
    ; applies when this pipeline is followed by
    /wjs-uploading-video
    .)
这些设置适用于整个流程;每个子技能负责执行各自部分的规则:
  • 中文ASR优先调用豆包(火山引擎);Whisper作为备选方案。
    /wjs-transcribing-audio
    强制执行。
  • 除非用户明确提及多说话者,否则整个配音使用单一音色。
    /wjs-dubbing-video
    强制执行。
  • 任何配音下均保留原音频作为低音量底层(0.15–0.25)。
    /wjs-burning-subtitles
    强制执行。
  • 默认对微信视频号/抖音使用硬烧录字幕;其他平台默认使用软封装。
    /wjs-burning-subtitles
    强制执行。
  • 频道CTA名称(若添加至描述):王建硕 — 不得使用嘉宾姓名。(来自
    ~/.claude/CLAUDE.md
    的全局规则;当此流程后续调用
    /wjs-uploading-video
    时适用。)

File naming convention (preserved from the original skill)

文件命名规范(沿用原技能规则)

text
input:                       entrevista.mp4

Chinese pipeline:
  source SRT                 entrevista.srt
  Chinese SRT                entrevista.zh-CN.srt
  Chinese dub (audio only)   entrevista_zh_dub.mp4
  Chinese final (subs+dub)   entrevista_zh_final.mp4

English pipeline:
  English SRT                entrevista.en.srt
  English dub                entrevista_en_dub.mp4
  English final              entrevista_en_final.mp4

Bilingual subtitles:
  Spanish + Chinese          entrevista.es-zh.srt
  Spanish + English          entrevista.es-en.srt
  three-language             entrevista.es-zh-en.srt
BCP-47-style suffixes keep multiple target-language outputs side-by-side and make the target obvious at a glance.
text
输入文件:                       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风格的后缀可使多目标语言输出文件并存,且一眼就能识别目标语言。

What this orchestrator does NOT do

此编排器不负责的事项

  • It does not re-implement anything. Every step delegates to a sub-skill.
  • It does not bundle the scripts.
    dub.py
    lives in
    /wjs-dubbing-video/scripts/
    ,
    render.py
    lives in
    /wjs-burning-subtitles/scripts/
    ,
    visual_diarize.py
    lives in
    /wjs-dubbing-video/scripts/
    . If you see stale copies under
    wjs-localizing-video/scripts/
    , prefer the canonical sub-skill locations.
  • 不重复实现任何功能。每个步骤均委托给对应的子技能。
  • 不捆绑脚本。
    dub.py
    位于
    /wjs-dubbing-video/scripts/
    render.py
    位于
    /wjs-burning-subtitles/scripts/
    visual_diarize.py
    位于
    /wjs-dubbing-video/scripts/
    。如果在
    wjs-localizing-video/scripts/
    下看到旧版本脚本,请优先使用子技能中的标准版本。

Final response template

最终回复模板

When the full pipeline completes, respond briefly in the user's language. Match the original "Done" template the user is used to:
text
已完成:
- 西班牙语转写  (/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 背景噪音较大,原文可能不完全准确。
If there are no uncertain parts, drop the second list.
当完整流程完成后,用用户使用的语言简要回复。匹配用户熟悉的原始“完成”模板:
text
已完成:
- 西班牙语转写  (/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 背景噪音较大,原文可能不完全准确。
如果没有不确定片段,可删除第二个列表。

See also

相关技能

  • /wjs-segmenting-video
    — cut long-form video into stand-alone short clips (uses its own SRT slicer; orthogonal to this pipeline).
  • /wjs-overlaying-video
    — HTML/CSS captions on a clip via HyperFrames. Don't combine with
    /wjs-burning-subtitles
    — pick one caption system per output.
  • /wjs-uploading-video
    — push the final MP4 to YouTube.
  • /lark-minutes
    — alternate Chinese-only transcript path via 飞书妙记 when local 豆包 ASR isn't wired up.
  • /wjs-segmenting-video
    — 将长视频切割为独立短视频片段(使用自身的SRT切片器;与本流程无关)。
  • /wjs-overlaying-video
    — 通过HyperFrames在视频上添加HTML/CSS字幕。请勿与
    /wjs-burning-subtitles
    结合使用
    — 每个输出文件仅选择一种字幕系统。
  • /wjs-uploading-video
    — 将最终MP4文件上传至YouTube。
  • /lark-minutes
    — 当本地豆包ASR无法使用时,通过飞书妙记获取中文转录内容的替代路径。