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 量化。
如果你要做多人访谈、播客视频、数字人对话、角色互动或 TTS 驱动的人物视频,MultiTalk 比单人对口型项目更贴近这类需求。
安装过程
下面保留官方 README 的安装过程。建议使用支持 CUDA 的 Linux 环境,提前准备 Conda、Git、足够的显存和磁盘空间。README 中的环境名为 multitalk。
先克隆仓库并进入目录:
1
2
|
git clone https://github.com/meigen-ai/multitalk.git
cd multitalk
|
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_scale 和 sample_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。
参考链接: