这次把每段原片都摆出来
我前面没先把 worker3 的原始产物拉回来,这是错的。现在这页按真实文件链路贴:Seedance 原片、TTS、sync audio、lipsync 输出、final segment。当前结论要收窄:Seedance 请求确实传了 ref audio;后处理又丢掉原片音轨,贴了另一条 sync_audio,再跑第二层 lipsync。音画错位从这里开始。
当前结论
后处理改了音轨和时间
Seedance-2-Omni any2video 请求里有 ref_audio_url。它返回的 seedance.mp4 也自带音轨。后面我们又把它的音轨扔掉,另做 sync_audio,再跑第二层 lipsync。现在看的错位主要来自这一层。
先按原片校准,再决定要不要换 TTS
无台词动作段直接拼原片。说话段先看 Seedance 原片的嘴和音是否已经自洽;如果要换成干净 TTS,必须按原片嘴部真实说话起点和时长处理,不能再用手写 offset 硬贴。
w1 / a0 是最简单的规则:无台词动作段直接整段拼 Seedance 原片。它不进 TTS,不进 lipsync,不替换音轨,不裁成别的节奏。
视频到底怎么出的
不是本机凭空出的
当前 proof 的真实中间产物在 worker3:/tmp/kamila-hook-local-proof-agent-plan/out_plan_coord/。我已拉回本机:/tmp/kamila-hook-local-proof-agent-plan/worker3_out_plan_coord/。
这页只为定位后处理
每段都按同一顺序看:先看无音频原片,再听 TTS / sync audio,再看 lipsync 输出,最后看 final segment。哪里开始错,就在哪里修。
最终成片
当前不能再走的路
speech_start_offset、delay_audio、手填 lipsync 坐标、第二次 sync-3 这一整层先停。它没有用 Scribe 或真实字级时间,只是在猜每句应该从哪里开始。
下一步由 %271 主导本地 proof:保留原片动作,重新判断每段应该用 Seedance 自带音,还是按真实嘴部区间贴干净 TTS。没有 owner 批准前,不动 template / snapshot / prod。
到底有没有传音频
有,传的是 ref_audio_url
以 s3 为例,s3_coach_surprised.seedance.request.json 里有 input.ref_audio_url[0],指向同段 Fish TTS wav。请求模型是 funpub-seedance-2-omni,实际响应里执行模型是 byte-seedance-2-omni-asset。
后面又传了另一条音频给 lipsync
s3_coach_surprised.lipsync.request.json 里,video_url 是 Seedance 原片,audio_url 是后做的 sync_audio.wav。这就是第二次对口型层。
分段时间
| 段 | Seedance 原片 | TTS | sync audio | lipsync 输出 | final segment | 先看什么 |
|---|---|---|---|---|---|---|
| a0_silent_setup | 5.085s | - | - | - | 5.033s | 滑冰动作和环境/foley 是否错位。 |
| s1_coach_scolds | 6.083s | 3.622s | 3.772s | 3.792s | 3.800s | 教练说话是否一开始就对口型。 |
| s2_kamila_replies | 7.082s | 5.573s | 6.023s | 6.042s | 6.037s | K宝音频是否贴到了正确动作上。 |
| s3_coach_surprised | 6.083s | 4.644s | 5.294s | 5.333s | 5.333s | 你指出 15-17s 没人动嘴,重点看这一段。 |
| s4_kamila_close | 7.082s | 6.177s | 6.727s | 6.750s | 6.734s | 19s 后音频是否早于画面动作。 |
空白错位实测
这次本地 proof 没跑 Scribe。它拿 Fish TTS 的结果,再手写 speech_start_offset_seconds 做 sync_audio。下面是实际量出来的声音进入时间。s3 是最大问题:后处理音频比 Seedance 原片自己的声音早了 2.586 秒。
| 段 | Seedance 原片声音进入 | TTS 声音进入 | sync_audio 声音进入 | sync_audio 相对 Seedance | 判断 |
|---|---|---|---|---|---|
| s1 | 0.194s | 0.969s | 0.177s | -0.017s | 接近原片,但这不是靠 Scribe 算的。 |
| s2 | 1.264s | 0.722s | 0.453s | -0.812s | 后处理声音早了。 |
| s3 | 3.239s | 0.302s | 0.653s | -2.586s | 明显错位。15-17s 的问题在这里。 |
| s4 | 0.086s | 0.000s | 0.571s | +0.485s | 后处理声音晚了。 |
逐段原片 / 音频 / 对口型 / 最终切片
原始请求也贴出来
| 段 | Seedance request | Lipsync request |
|---|
这里主要给 %271 查“这段到底引用了哪条音频、哪个视频”。