InfiniteTalk:支援長影片的音訊驅動對口型影片生成

MeiGen-AI/InfiniteTalk 是一個音訊驅動的影片生成專案,支援 video-to-video 和 image-to-video,用於長影片對口型、表情和姿態同步。

MeiGen-AI/InfiniteTalk 是一個音訊驅動的影片生成專案,目標是把輸入音訊同步到人物影片或圖片上,生成口型、頭部動作、身體姿態和表情都跟隨音訊變化的新影片。

它的定位不是普通的「嘴部替換」工具。README 裡強調,InfiniteTalk 面向 sparse-frame video dubbing,可以在 video-to-video 場景中保持身分一致,並支援長影片生成;也可以在 image-to-video 場景中用單張圖片和音訊生成說話影片。

主要能力

InfiniteTalk 的幾個重點功能比較清楚:

  • 支援音訊驅動的 video-to-video。
  • 支援 image-to-video,也就是輸入圖片和音訊生成影片。
  • 不只同步嘴部,還會同步頭部、身體和表情。
  • 支援長影片生成。
  • 相比 MultiTalk,專案說明中強調它減少了手部和身體變形,並提升了口型同步準確度。

這類專案適合做人物訪談配音、數位人影片、本地化口型同步、長影片二次配音和虛擬角色表達。它更偏研究和工程工具,不是開箱即用的輕量桌面軟體。

安裝流程

下面保留官方 README 的安裝流程。建議先準備好支援 CUDA 的 Linux 環境、Conda、Git、足夠的顯存和磁碟空間。README 中的環境名仍沿用 multitalk

先複製倉庫並進入目錄:

1
2
git clone https://github.com/MeiGen-AI/InfiniteTalk.git
cd InfiniteTalk

1. 建立 conda 環境並安裝 PyTorch、xformers

1
2
3
4
conda create -n multitalk python=3.10
conda activate multitalk
pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu121
pip install -U xformers==0.0.28 --index-url https://download.pytorch.org/whl/cu121

這裡使用的是 CUDA 12.1 對應的 PyTorch wheel。如果本機 CUDA、驅動或平台不同,需要按 PyTorch 官方說明調整安裝命令。

2. 安裝 Flash-Attn 相關依賴

1
2
3
4
5
6
pip install misaki[en]
pip install ninja
pip install psutil
pip install packaging
pip install wheel
pip install flash_attn==2.7.4.post1

flash_attn 對 CUDA、編譯工具鏈和 PyTorch 版本比較敏感。如果這一步失敗,通常要先檢查 CUDA 版本、nvcc、GCC、Python 版本和 PyTorch wheel 是否匹配。

3. 安裝其它依賴

1
2
pip install -r requirements.txt
conda install -c conda-forge librosa

4. 安裝 FFmpeg

Conda 環境裡可以用:

1
conda install -c conda-forge ffmpeg

也可以在系統層安裝。README 給出的 yum 範例是:

1
sudo yum install ffmpeg ffmpeg-devel

模型準備

InfiniteTalk 需要準備三類模型:

模型 用途
Wan2.1-I2V-14B-480P 基礎模型
chinese-wav2vec2-base 音訊編碼器
MeiGen-InfiniteTalk InfiniteTalk 音訊條件權重

README 使用 huggingface-cli 下載模型。官方命令如下:

1
2
3
4
huggingface-cli download Wan-AI/Wan2.1-I2V-14B-480P --local-dir ./weights/Wan2.1-I2V-14B-480P
huggingface-cli download TencentGameMate/chinese-wav2vec2-base --local-dir ./weights/chinese-wav2vec2-base
huggingface-cli download TencentGameMate/chinese-wav2vec2-base model.safetensors --revision refs/pr/1 --local-dir ./weights/chinese-wav2vec2-base
huggingface-cli download MeiGen-AI/InfiniteTalk --local-dir ./weights/InfiniteTalk

如果目前環境沒有 huggingface-cli,可以先安裝 Hugging Face Hub:

1
pip install -U huggingface_hub

部分模型可能需要登入 Hugging Face 或接受模型頁面的使用條款。下載完成後,目錄結構應大致包含:

1
2
3
4
weights/
  Wan2.1-I2V-14B-480P/
  chinese-wav2vec2-base/
  InfiniteTalk/

常用執行參數

README 中列出了一些關鍵參數:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
--mode streaming: long video generation.
--mode clip: generate short video with one chunk.
--use_teacache: run with TeaCache.
--size infinitetalk-480: generate 480P video.
--size infinitetalk-720: generate 720P video.
--use_apg: run with APG.
--teacache_thresh: A coefficient used for TeaCache acceleration
—-sample_text_guide_scale: When not using LoRA, the optimal value is 5. After applying LoRA, the recommended value is 1.
—-sample_audio_guide_scale: When not using LoRA, the optimal value is 4. After applying LoRA, the recommended value is 2.
—-sample_audio_guide_scale: When not using LoRA, the optimal value is 4. After applying LoRA, the recommended value is 2.
--max_frame_num: The max frame length of the generated video, the default is 40 seconds(1000 frames).

這裡保留了 README 原文中的參數寫法。實際使用時要注意,有幾行參數前綴看起來像中文或全形破折號,複製命令前最好核對是否應為標準的 --sample_text_guide_scale--sample_audio_guide_scale

單卡推理範例

官方單卡執行範例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
python generate_infinitetalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --infinitetalk_dir weights/InfiniteTalk/single/infinitetalk.safetensors \
    --input_json examples/single_example_image.json \
    --size infinitetalk-480 \
    --sample_steps 40 \
    --mode streaming \
    --motion_frame 9 \
    --save_file infinitetalk_res

如果要跑 720P,把 --size 改成 infinitetalk-720

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
python generate_infinitetalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --infinitetalk_dir weights/InfiniteTalk/single/infinitetalk.safetensors \
    --input_json examples/single_example_image.json \
    --size infinitetalk-720 \
    --sample_steps 40 \
    --mode streaming \
    --motion_frame 9 \
    --save_file infinitetalk_res_720p

低顯存模式可以加入 --num_persistent_param_in_dit 0

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
python generate_infinitetalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --infinitetalk_dir weights/InfiniteTalk/single/infinitetalk.safetensors \
    --input_json examples/single_example_image.json \
    --size infinitetalk-480 \
    --sample_steps 40 \
    --num_persistent_param_in_dit 0 \
    --mode streaming \
    --motion_frame 9 \
    --save_file infinitetalk_res_lowvram

多卡、多人物和 Gradio

多卡推理範例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
GPU_NUM=8
torchrun --nproc_per_node=$GPU_NUM --standalone generate_infinitetalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --infinitetalk_dir weights/InfiniteTalk/single/infinitetalk.safetensors \
    --dit_fsdp --t5_fsdp \
    --ulysses_size=$GPU_NUM \
    --input_json examples/single_example_image.json \
    --size infinitetalk-480 \
    --sample_steps 40 \
    --mode streaming \
    --motion_frame 9 \
    --save_file infinitetalk_res_multigpu

多人物動畫範例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
python generate_infinitetalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --infinitetalk_dir weights/InfiniteTalk/multi/infinitetalk.safetensors \
    --input_json examples/multi_example_image.json \
    --size infinitetalk-480 \
    --sample_steps 40 \
    --num_persistent_param_in_dit 0 \
    --mode streaming \
    --motion_frame 9 \
    --save_file infinitetalk_res_multiperson

Gradio 單人權重範例:

1
2
3
4
5
6
python app.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --infinitetalk_dir weights/InfiniteTalk/single/infinitetalk.safetensors \
    --num_persistent_param_in_dit 0 \
    --motion_frame 9

Gradio 多人權重範例:

1
2
3
4
5
6
python app.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --infinitetalk_dir weights/InfiniteTalk/multi/infinitetalk.safetensors \
    --num_persistent_param_in_dit 0 \
    --motion_frame 9

加速和量化執行

README 還給出了 FusioniX 或 Lightx2v 的範例。FusioniX 需要 8 steps,lightx2v 只需要 4 steps。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
python generate_infinitetalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --infinitetalk_dir weights/InfiniteTalk/single/infinitetalk.safetensors \
    --lora_dir weights/Wan2.1_I2V_14B_FusionX_LoRA.safetensors \
    --input_json examples/single_example_image.json \
    --lora_scale 1.0 \
    --size infinitetalk-480 \
    --sample_text_guide_scale 1.0 \
    --sample_audio_guide_scale 2.0 \
    --sample_steps 8 \
    --mode streaming \
    --motion_frame 9 \
    --sample_shift 2 \
    --num_persistent_param_in_dit 0 \
    --save_file infinitetalk_res_lora

量化模型只支援單卡執行,官方範例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
python generate_infinitetalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --infinitetalk_dir weights/InfiniteTalk/single/infinitetalk.safetensors \
    --input_json examples/single_example_image.json \
    --size infinitetalk-480 \
    --sample_steps 40 \
    --mode streaming \
    --quant fp8 \
    --quant_dir weights/InfiniteTalk/quant_models/infinitetalk_single_fp8.safetensors \
    --motion_frame 9 \
    --num_persistent_param_in_dit 0 \
    --save_file infinitetalk_res_quant

使用時要注意什麼

InfiniteTalk 的依賴和模型都比較重。實際部署前,最好先確認幾件事:

  • 顯卡顯存是否足夠,低顯存機器優先嘗試 --num_persistent_param_in_dit 0 或量化模型。
  • flash_attn 是否能在目前 CUDA 和 PyTorch 組合下正常安裝。
  • Hugging Face 模型是否下載完整,路徑是否和命令裡的 weights/... 對齊。
  • 輸入 JSON 是否和範例格式一致。
  • 720P、長影片、多人物和多卡推理會明顯增加資源需求。

README 也提醒,FusionX LoRA 雖然能加速並提高品質,但超過 1 分鐘時可能加重顏色偏移,並降低影片中的身分保持效果。I2V 從單張圖生成 1 分鐘以內效果較好,超過 1 分鐘顏色偏移會更明顯。

小結

InfiniteTalk 是一個偏研究和工程使用的音訊驅動影片生成專案。它適合需要長影片對口型、人物配音、數位人影片和圖像到說話影片生成的場景。

如果只是想快速體驗,建議先按官方安裝流程準備環境和模型,再從 480P 單卡範例開始跑通。等路徑、依賴和顯存都確認沒有問題後,再嘗試 720P、多人物、多卡、LoRA 加速或量化模型。

參考連結:

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計