MultiTalk 雙人數位人 · 單視窗根治「畫面崩壞」

「古文不正經」阿哲 × 曉雯 雙主持真人開場的數位人生成紀錄。從 LTX 亂序 → MultiTalk 遷移 → 跨視窗退化 → 找出真因(視窗拼接縫)→ 單視窗一次算完根治。DGX Spark(GB10)實作。

2026-07-01 DGX Spark GB10 Wan2.1 MultiTalk ComfyUI-WanVideoWrapper
一句話結論:「每幾秒畫面崩壞一次」不是模型退化,而是 MultiTalk 的滑動視窗拼接縫(預設每 81 禎=3.24 秒換一個生成視窗,邊界處畫面突變)。把 frame_window_size 開到 ≥ 總禎數,讓短片單一視窗一次算完,接縫完全消失。

前後對照(8 秒雙人樣片)

舊版 · 切窗 每 3.24 秒視窗邊界畫面跳/崩一下,第 6 秒最明顯(frame_window_size=81)。

新版 · 單視窗 200 禎一次算完,全程零接縫、6 秒畫面乾淨(frame_window_size=201)。

診斷與驗證

ffmpeg -vf "select='gt(scene,0.02)',showinfo" 掃描相鄰禎突變,突變禎正好落在視窗邊界=確診接縫(臉部單禎本身都乾淨)。

項目舊版(切窗 81 禎)新版(單視窗 201)
畫面突變禎(scene>0.02)3.24s、6.1–6.3s僅 0.04s(開頭,正常)
第 6 秒畫面崩壞乾淨自然
對比 std(細節)跨窗會掉(細節流失)全程平穩
色彩漂移偏藍變暗colormatch=mkl 鎖定參考圖
生成耗時(8s/200 禎)~20–25 分~16 分(241s/步 ×4)

成功配方

  • frame_window_size = 201(≥ 總禎數 → 單一視窗、零接縫)。上限其實是 10000,並非被鎖在 81;GB10 的 121GB 統一記憶體吃得下 200 禎單窗。關鍵
  • colormatch = mkl:每視窗色彩錨定參考圖,根治偏藍/變暗,取代後製補色。
  • motion_frame = 25、模型用 WanVideo_2_1_Multitalk_14B(單窗不需 InfiniteTalk 續接)。
  • 短片單窗 不需 InfiniteTalk:它的跨視窗續接優勢在單窗下用不到,且其 motion_frame=9 重疊更小、接縫反而更硬。
  • 雙人:LoadAudio×2 → MultiTalkWav2VecEmbeds(男 audio_1/女 audio_2、左右遮罩 ref_target_masks、multi_audio_type=para)→ WanVideoSampler。
  • 保存工作流:apps/worker/workflows/multitalk-dual-singlewindow-8s-WORKING.api.json;builder mt-build-dual.pyMT_WIN 環境變數(MT_WIN=201 重現)。

踩坑歷程

LTX-2.3 v11雙人對嘴會亂序、出現奇怪方格,句子被打斷後崩壞 → 判定不穩、棄用。 → MultiTalk 遷移改用 MeiGen-AI MultiTalk(Wan2.1-I2V-14B,專為「音軌→指定臉」多人對話設計),跑通雙人+左右遮罩+雙音軌。 跨視窗退化硬拉長片+分段鏈接 → 輪廓越來越深、細節消失、色彩偏藍:滑動視窗累積過度銳化。 試 InfiniteTalk長片專用兄弟模型:細節不流失(對比平穩),但 8 秒仍有接縫、重疊更小接縫更硬。 試 Uni3C身分/構圖穩定器 → 與本版 wrapper 不相容(RoPE/multitalk_audio_input 未綁定),死路。 ✅ 單視窗找出真因是視窗接縫,frame_window_size≥ 總禎數 讓短片一次算完 → 接縫消失、畫面全乾淨。定案。

後續策略

  • 真人開場一律走「單視窗短片(≤ 8–10 秒)」,不再硬拉長片跨窗拼接——那是一路所有崩壞/退化的根源。
  • 需要更長時,切成多段各自單窗生成,再於後製剪接(每段換手處落在句間靜音)。
  • 真人開場 → 白板課程的音訊切點以 silencedetect 實測句界對齊,whisper 轉錄確認接縫不跳、不重複。