Tobatsu · voiceover_align · test

让 agent 自动给 Fish 配情绪标签 —— 还能用标签调语速来卡时长

Fish 的 `[方括号]` 标签是发声指令(不念、不进字幕)。我们让工作流 agent 照着 Mai 传的 `emotion_style` 给每段加合适标签 —— 而且偏起伏大、有张力,平淡的尽量不用;改词自愈时它还能改语速标签把音频卡进时间窗。真机俄语跑通,音频和成片在下面。

emotion_style
选标签的起点
起伏大
情绪取向,不平淡
[speaking fast]
改语速=改时长
0
字幕里的方括号

Fish 标签是什么

跟 ElevenLabs 一样用 [方括号],但 Fish 把它当发声指令 —— 不念出来、作用到下一个标签或句末,而且自动从字幕剥掉。覆盖面比 EL 广,还能写自然语言。

情绪
[excited][sad][happy][whispering]
节奏(改时长)
[speaking fast][speaking slowly][slight pause][long pause]
风格 / 音高
[shouting][monotone][pitch up]
自然语言
[bursting with energy][voice trembling with excitement]

关键:节奏标签直接改语速 → 改音频时长,正好是我们 fit 自愈量的那个值。

两个用法,都交给工作流 agent(Mai 纯透传不碰)

① Enrichment —— 照 emotion_style 加情绪标签(偏起伏大)

Mai 传来的 timeline JSON 里每段有 emotion_style。agent 首次合成前读它,给段配一个合适的 Fish 标签,写进 script-overrides.json

情绪取向:要起伏大、有张力,别平淡。 这是广告/营销配音,得有感染力。emotion_style 只当起点参考 —— 优先生动、对比强的情绪;[monotone] / [calm] / [a calm, steady tone] 这类平的避免。即使 emotion_style=calm 也往更暖、更活的读法带(但忠于该段语义:sad 仍是 sad,只是不平,不会被乱改成亢奋)。

② Fit-via-tags —— 改词自愈时用语速标签卡时长

段音频装不进时间窗时,runner 回 needs-rewrite.json(现带 provider:"fish" + Fish 专属 hint)。agent 不再只能改词:太长加 [speaking fast]、太短加 [speaking slowly]/[long pause],可单用也可配合改词。循环每轮重新量真实时长。

emotion_style ──▶ agent 选标签 ──▶ script-overrides.json ──▶ runner 合成 ▲ │ └──── 太长/太短:改语速标签或改词 ◀──── needs-rewrite

真机证据 · 听 / 看

俄语 5 段,带 emotion_style,故意把 seg0/seg2 的时间窗卡死(装不下)逼出改词自愈。下面是产出。

Fish 俄语配音(带情绪)

烧好字幕的成片

字幕里看不到任何 [标签] —— 全被当发声指令剥掉了。

agent 实际写进 script-overrides 的(从任务事件抠出的铁证)

emotion_styleagent 写的标签类型
0excited[excited][speaking fast]
+精简 16→6 词
情绪 + 缩短(fit-via-tags)
1calm[cheerful]calm→生动(没用平淡标签)
2sad[sad]情绪(语义忠实)
3happy[happy]情绪
4excited[excited]情绪

怎么实现的 + 发布状态

物件回滚
skill mai-combo-runner-testv31 → v32
voiceover_align 工作流 promptv18(Fish voice 段 + 起伏大取向)
voiceover_align test tag2e17193d25878b04
combo test tag03332ff8(没碰,仍 v31)

只动 voiceover_align;combo 靠 snapshot 冻结隔离,完全不受影响。prod 全程没碰。