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 设计