Communitygithub.com

wjs-localizing-video(编排器)

端到端视频本地化编排器:将用户请求路由至转写、翻译、配音、烧录字幕子技能。131⭐ 套件。

wjs-localizing-video(编排器) 是什么?

此技能是一个视频本地化编排器,将曾经超过 1300 行的庞大能力拆分为 4 个专注的子技能:`wjs-transcribing-audio`(语音识别)、`wjs-translating-subtitles`(字幕翻译)、`wjs-dubbing-video`(视频配音)和 `wjs-burning-subtitles`(字幕烧录/混音)。它专门用于处理用户一次请求完整流水线的场景(如“将这段西班牙语视频做成中文字幕和中文配音”),对于单个步骤则直接路由到对应子技能以保持文档精炼。编排器强制要求在处理任何子技能前先使用 TaskCreate 创建进度检查清单,并以 `in_progress` 和 `completed` 状态实时更新,解决长耗时任务中“只有沉默然后突然出结果”的体验问题。流水线支持可选的配音(TTS)和混音(原声做低音量底层),并自动适配不同平台(微信视频号/抖音默认硬编码字幕;其他平台默认软封装)。该技能基于 Claude Code 平台,其默认配置包括:中文 ASR 首选豆包(Volcano)、单配音角色贯穿全局、原声底层音量 0.15–0.25,以及频道 CTA 名称“王建硕”。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jianshuo/claude-skills/tree/main/wjs-localizing-video

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

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 不可用时,通过飞书妙记作为中文转写替代路径。

Individual skills in this repo

This repo contains 5 individual skills — each has its own dedicated page.

相关技能