MultiTalk:音訊驅動的多人對話影片生成專案

MeiGen-AI/MultiTalk 是一個音訊驅動的多人對話影片生成專案,支援單人和多人生成、TTS、低顯存推理、LoRA 加速、量化和 Gradio。

MeiGen-AI/MultiTalk 是一個音訊驅動的多人對話影片生成專案,論文標題是 Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation。專案目標是用多路音訊、參考圖像和提示詞生成多人對話影片,讓人物口型、互動動作和提示詞控制保持一致。

MultiTalk 不只面向單人數位人,也強調多人對話、唱歌、互動控制和卡通角色生成。它支援 480P 和 720P 輸出,README 中說明目前程式碼主要支援 480P 推理,720P 需要多 GPU。

主要能力

MultiTalk 的能力可以概括為幾類:

  • 支援單人和多人音訊驅動影片生成。
  • 支援透過 prompt 控制虛擬人物互動。
  • 支援卡通角色、唱歌等更泛化的生成場景。
  • 支援 480P 與 720P 輸出。
  • 支援最長約 15 秒的影片生成。
  • 支援多 GPU、TeaCache、APG、低顯存推理、TTS、Gradio、LoRA 加速和 INT8 量化。

如果你要做多人訪談、Podcast 影片、數位人對話、角色互動或 TTS 驅動的人物影片,MultiTalk 比單人對口型專案更貼近這類需求。

安裝流程

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

先複製倉庫並進入目錄:

1
2
git clone https://github.com/meigen-ai/multitalk.git
cd multitalk

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
pip install misaki[en]
pip install ninja
pip install psutil
pip install packaging
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

模型準備

MultiTalk 需要準備這些模型:

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

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

1
2
3
4
5
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 hexgrad/Kokoro-82M --local-dir ./weights/Kokoro-82M
huggingface-cli download MeiGen-AI/MeiGen-MultiTalk --local-dir ./weights/MeiGen-MultiTalk

如果環境裡沒有 huggingface-cli,先安裝 Hugging Face Hub:

1
pip install -U huggingface_hub

下載完成後,目錄應大致包含:

1
2
3
4
5
weights/
  Wan2.1-I2V-14B-480P/
  chinese-wav2vec2-base/
  Kokoro-82M/
  MeiGen-MultiTalk/

連結或複製 MultiTalk 模型

README 要求把 MultiTalk 模型連結或複製到 Wan2.1-I2V-14B-480P 目錄下。

透過軟連結:

1
2
3
mv weights/Wan2.1-I2V-14B-480P/diffusion_pytorch_model.safetensors.index.json weights/Wan2.1-I2V-14B-480P/diffusion_pytorch_model.safetensors.index.json_old
sudo ln -s {Absolute path}/weights/MeiGen-MultiTalk/diffusion_pytorch_model.safetensors.index.json weights/Wan2.1-I2V-14B-480P/
sudo ln -s {Absolute path}/weights/MeiGen-MultiTalk/multitalk.safetensors weights/Wan2.1-I2V-14B-480P/

或者直接複製:

1
2
3
mv weights/Wan2.1-I2V-14B-480P/diffusion_pytorch_model.safetensors.index.json weights/Wan2.1-I2V-14B-480P/diffusion_pytorch_model.safetensors.index.json_old
cp weights/MeiGen-MultiTalk/diffusion_pytorch_model.safetensors.index.json weights/Wan2.1-I2V-14B-480P/
cp weights/MeiGen-MultiTalk/multitalk.safetensors weights/Wan2.1-I2V-14B-480P/

如果用軟連結,記得把 {Absolute path} 換成自己的絕對路徑。Windows 或 WSL 環境下也要確認軟連結權限和路徑解析沒有問題。

常用參數

README 中給出的參數說明如下:

1
2
3
4
5
6
7
8
9
--mode streaming: long video generation.
--mode clip: generate short video with one chunk.
--use_teacache: run with TeaCache.
--size multitalk-480: generate 480P video.
--size multitalk-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.

這裡保留了 README 原文中的參數寫法。實際複製命令前要注意,sample_text_guide_scalesample_audio_guide_scale 前面的破折號看起來不是標準 --,最好手動確認。

單人推理範例

單人、單卡執行:

1
2
3
4
5
6
7
8
python generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --input_json examples/single_example_1.json \
    --sample_steps 40 \
    --mode streaming \
    --use_teacache \
    --save_file single_long_exp

單人低顯存執行:

1
2
3
4
5
6
7
8
9
python generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --input_json examples/single_example_1.json \
    --sample_steps 40 \
    --mode streaming \
    --num_persistent_param_in_dit 0 \
    --use_teacache \
    --save_file single_long_lowvram_exp

單人多 GPU 推理:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
GPU_NUM=8
torchrun --nproc_per_node=$GPU_NUM --standalone generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --dit_fsdp --t5_fsdp \
    --ulysses_size=$GPU_NUM \
    --input_json examples/single_example_1.json \
    --sample_steps 40 \
    --mode streaming \
    --use_teacache \
    --save_file single_long_multigpu_exp

單人 TTS 執行:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
python generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --input_json examples/single_example_tts_1.json \
    --sample_steps 40 \
    --mode streaming \
    --num_persistent_param_in_dit 0 \
    --use_teacache \
    --save_file single_long_lowvram_tts_exp \
    --audio_mode tts

多人推理範例

多人、單卡執行:

1
2
3
4
5
6
7
8
python generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --input_json examples/multitalk_example_2.json \
    --sample_steps 40 \
    --mode streaming \
    --use_teacache \
    --save_file multi_long_exp

多人低顯存執行:

1
2
3
4
5
6
7
8
9
python generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --input_json examples/multitalk_example_2.json \
    --sample_steps 40 \
    --mode streaming \
    --num_persistent_param_in_dit 0 \
    --use_teacache \
    --save_file multi_long_lowvram_exp

多人多 GPU 推理:

1
2
3
4
5
6
7
8
9
GPU_NUM=8
torchrun --nproc_per_node=$GPU_NUM --standalone generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --dit_fsdp --t5_fsdp --ulysses_size=$GPU_NUM \
    --input_json examples/multitalk_example_2.json \
    --sample_steps 40 \
    --mode streaming --use_teacache \
    --save_file multi_long_multigpu_exp

多人 TTS 執行:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
python generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --input_json examples/multitalk_example_tts_1.json \
    --sample_steps 40 \
    --mode streaming \
    --num_persistent_param_in_dit 0 \
    --use_teacache \
    --save_file multi_long_lowvram_tts_exp \
    --audio_mode tts

FusionX、量化和 Gradio

FusioniX 或 Lightx2v 可以減少採樣步數。README 給出的單人範例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
python generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --input_json examples/single_example_1.json \
    --lora_dir weights/Wan2.1_I2V_14B_FusionX_LoRA.safetensors \
    --lora_scale 1.0 \
    --sample_text_guide_scale 1.0 \
    --sample_audio_guide_scale 2.0 \
    --sample_steps 8 \
    --mode streaming \
    --num_persistent_param_in_dit 0 \
    --save_file single_long_lowvram_fusionx_exp \
    --sample_shift 2

多人範例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
python generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --input_json examples/multitalk_example_2.json \
    --lora_dir weights/Wan2.1_I2V_14B_FusionX_LoRA.safetensors \
    --lora_scale 1.0 \
    --sample_text_guide_scale 1.0 \
    --sample_audio_guide_scale 2.0 \
    --sample_steps 8 \
    --mode streaming \
    --num_persistent_param_in_dit 0 \
    --save_file multi_long_lowvram_fusionx_exp

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
python generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --input_json examples/multitalk_example_2.json \
    --sample_steps 40 \
    --mode streaming \
    --use_teacache \
    --quant int8 \
    --quant_dir weights/MeiGen-MultiTalk \
    --num_persistent_param_in_dit 0 \
    --save_file multi_long_lowvram_exp_quant

量化加 LoRA 範例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
python generate_multitalk.py \
    --ckpt_dir weights/Wan2.1-I2V-14B-480P \
    --wav2vec_dir 'weights/chinese-wav2vec2-base' \
    --input_json examples/multitalk_example_1.json \
    --quant int8 \
    --quant_dir weights/MeiGen-MultiTalk \
    --lora_dir weights/MeiGen-MultiTalk/quant_models/quant_model_int8_FusionX.safetensors \
    --sample_text_guide_scale 1.0 \
    --sample_audio_guide_scale 2.0 \
    --sample_steps 8 \
    --mode streaming \
    --num_persistent_param_in_dit 0 \
    --save_file multi_long_lowvram_fusionx_exp_quant \
    --sample_shift 2

Gradio 範例:

1
2
3
4
5
python app.py \
    --lora_dir weights/Wan2.1_I2V_14B_FusionX_LoRA.safetensors \
    --lora_scale 1.0 \
    --num_persistent_param_in_dit 0 \
    --sample_shift 2

或者:

1
python app.py --num_persistent_param_in_dit 0

量化 Gradio 範例:

1
2
3
4
5
6
python app.py \
    --quant int8 \
    --quant_dir weights/MeiGen-MultiTalk \
    --lora_dir weights/MeiGen-MultiTalk/quant_models/quant_model_int8_FusionX.safetensors \
    --sample_shift 2 \
    --num_persistent_param_in_dit 0

使用時要注意什麼

MultiTalk 的依賴和模型都比較重。實際部署前,建議先確認這些點:

  • 目前程式碼主要支援 480P 推理,720P 需要多 GPU。
  • 官方提示音訊 CFG 通常在 3 到 5 之間效果較好,提高 audio CFG 有助於口型同步。
  • 模型訓練在 25 FPS、81 幀影片上,81 幀更適合 prompt 跟隨;更長幀數可能降低 prompt 跟隨能力。
  • 長影片生成時,Audio CFG 會影響分段之間的色調一致性,可以嘗試設為 3 緩解色調變化。
  • TeaCache 的 --teacache_thresh 推薦範圍是 0.2 到 0.5,值更高可能更快,但也可能降低影片品質。
  • 低顯存環境優先嘗試 --num_persistent_param_in_dit 0、INT8 量化或社群的低顯存方案。

README 還提到,TeaCache 大約可以帶來 2 到 3 倍速度提升。實際效果會受顯卡、解析度、採樣步數、是否多人、是否使用 LoRA 或量化影響。

小結

MultiTalk 是一個面向多人對話影片的音訊驅動生成專案。它適合做多人數位人、訪談影片、TTS 驅動影片、卡通角色互動和唱歌等場景。

如果只是快速體驗,建議先按官方安裝流程準備環境和模型,再完成模型連結或複製,然後從 480P 單人範例開始。跑通後,再逐步嘗試多人、TTS、TeaCache、LoRA 加速、INT8 量化和 Gradio。

參考連結:

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