Install any skill in seconds. Free to start, no credit card required.
Get Started Free →把带时间戳的 narration.json 合成为中文解说音频。使用 MiMo TTS(mimo-v2.5-tts)逐段生成语音, 按时间窗动态适配语速并处理响度;输入输出时间线上的旁白,产出 tts_segments 与 tts_meta.json。 旧版直接剪辑路径也可显式传入 narration_mapped.json。触发词:配音、语音合成、TTS、解说配音、 voiceover、text to speech、旁白配音。
.claude/skills/worldwonderer-video-voiceover/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 501% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -19% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 48% | 0% |
本技能读取带时间戳的旁白稿,为每一段生成独立音频,并把语音适配到对应时间窗,随后记录下游合成所需的放置元数据。 当前唯一引擎是 MiMo TTS(mimo-v2.5-tts)。
bashexport MIMO_API_KEY=*** # 也可使用仅供 TTS 的 MIMO_TTS_API_KEY
下面的 scripts/... 均相对于本技能目录。若执行器从仓库根目录启动,请给脚本路径加上本技能的绝对目录。 脚本不从其他技能目录读取文件;外部输入仅限命令显式传入的稿件、音频、参数与 work_dir 产物。
默认输入为 work_dir/narration.json。每段必须包含 start、end 与 narration,可选字段包括 pause_after_ms 和 overlaps_speech。时间统一表示音频最终放置的输出时间线秒数。
编排式 cut 流程直接使用输出时间的 narration.json。只有旧版直接剪辑路径需要显式传入 narration_mapped.json。
bashpython3 scripts/voiceover.py --work-dir <work_dir> --narration <narration.json> \ [--mimo-voice 冰糖 | --voice-ref <reference-audio>]
单独运行且省略 --narration 时,默认读取 work_dir/narration.json。旧版路径如需映射后的稿件,必须显式传入:
bashpython3 scripts/voiceover.py --work-dir <work_dir> \ --narration <work_dir/narration_mapped.json>
tts_segments/*.wav:每段旁白对应一个音频文件。tts_meta.json:包含 segments、engine 与 narration。每段记录 audio_path、时间、pause_after_ms 和放置字段。
partial: false 与 failures: []。--allow-partial-tts 跳过失败段时,写入 partial: true 和failures: [{index,start,end,text,error}],让缺失语音保持可见。
--voice-ref 仅用于 full/cut 解说克隆,切换到 mimo-v2.5-tts-voiceclone。仅在确需新合成时惰性规范化一次;dub_manifest.json 逐行记录 tts_cache=hit|miss;参考音频内容或预处理指纹变化会使旧缓存失效。仅在获得授权后使用,参考音频会发送到 MiMo。
TTS_WORKERS、TTS_TIMEOUT、TTS_RETRIES、ALLOW_PARTIAL_TTS 用于调整并发、超时、重试与部分成功策略。dub_lint.json 会在语音克隆前阻止空行、重叠或越界译文;dub_review.json 用于记录忠实度、语气、时长和平台适配复核。可通过 dub.py --stage lint|review 或 dub.py --print-schema 单独调用。
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 6,024 | 5,401 | -10% | 1 | 1 | 0% | 303 | 1,822 | +501% | 0 | 0 | — |
case-02 | fail→fail | 7,973 | 5,439 | -32% | 1 | 1 | 0% | 1,229 | 1,788 | +45% | 0 | 0 | — |
case-08 | fail→pass | 9,750 | 2,755 | -72% | 1 | 1 | 0% | 1,576 | 1,394 | -12% | 0 | 0 | — |
case-03 | fail→fail | 11,538 | 6,164 | -47% | 1 | 1 | 0% | 2,166 | 1,285 | -41% | 0 | 0 | — |
case-04 | fail→pass | 6,192 | 3,097 | -50% | 1 | 1 | 0% | 915 | 1,365 | +49% | 0 | 0 | — |
case-05 | fail→pass | 13,110 | 5,005 | -62% | 1 | 1 | 0% | 2,070 | 1,673 | -19% | 0 | 0 | — |
case-06 | pass→pass | 5,635 | 4,095 | -27% | 1 | 1 | 0% | 904 | 1,601 | +77% | 0 | 0 | — |
case-07 | fail→pass | 4,761 | 1,992 | -58% | 1 | 1 | 0% | 826 | 1,226 | +48% | 0 | 0 | — |
case-09 | fail→pass | 19,164 | 6,468 | -66% | 1 | 1 | 0% | 3,558 | 2,098 | -41% | 0 | 0 | — |
case-10 | fail→pass | 16,892 | 3,577 | -79% | 1 | 1 | 0% | 3,099 | 1,512 | -51% | 0 | 0 | — |
case-11 | fail→pass | 10,100 | 2,367 | -77% | 1 | 1 | 0% | 1,462 | 1,291 | -12% | 0 | 0 | — |
case-12 | fail→pass | 10,233 | 3,366 | -67% | 1 | 1 | 0% | 1,590 | 1,456 | -8% | 0 | 0 | — |
case-13 | fail→pass | 7,478 | 2,568 | -66% | 1 | 1 | 0% | 1,317 | 1,346 | +2% | 0 | 0 | — |
case-14 | fail→pass | 10,341 | 3,913 | -62% | 1 | 1 | 0% | 1,544 | 1,449 | -6% | 0 | 0 | — |
case-15 | pass→pass | 18,754 | 6,278 | -67% | 1 | 1 | 0% | 3,059 | 1,934 | -37% | 0 | 0 | — |
case-16 | fail→pass | 7,159 | 3,653 | -49% | 1 | 1 | 0% | 1,051 | 1,585 | +51% | 0 | 0 | — |
case-17 | fail→pass | 14,964 | 2,897 | -81% | 1 | 1 | 0% | 2,414 | 1,374 | -43% | 0 | 0 | — |
case-18 | fail→pass | 8,890 | 2,140 | -76% | 1 | 1 | 0% | 1,381 | 1,228 | -11% | 0 | 0 | — |
case-19 | fail→pass | 8,852 | 2,159 | -76% | 1 | 1 | 0% | 1,359 | 1,235 | -9% | 0 | 0 | — |
case-20 | pass→pass | 15,261 | 5,446 | -64% | 1 | 1 | 0% | 2,138 | 1,839 | -14% | 0 | 0 | — |
case-21 | fail→pass | 7,771 | 2,953 | -62% | 1 | 1 | 0% | 1,130 | 1,427 | +26% | 0 | 0 | — |
case-22 | pass→pass | 5,851 | 2,304 | -61% | 1 | 1 | 0% | 834 | 1,241 | +49% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +73 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.