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 では 1 枚の画像と音声から話す動画を生成できます。

主な機能

InfiniteTalk の主な機能は次のとおりです。

  • 音声駆動の video-to-video に対応。
  • image-to-video に対応し、画像と音声から動画を生成できる。
  • 口だけでなく、頭部、身体、表情も同期する。
  • 長尺動画生成に対応。
  • MultiTalk と比べて、手や身体の歪みを減らし、リップシンク精度を高めたと説明されている。

この種のプロジェクトは、人物インタビューの吹き替え、デジタルヒューマン動画、ローカライズ用リップシンク、長尺動画の再吹き替え、仮想キャラクター表現に向いています。軽量なデスクトップアプリというより、研究・エンジニアリング向けのツールです。

インストール手順

以下は公式 README のインストール手順を保ったものです。CUDA 対応の Linux 環境、Conda、Git、十分な VRAM、十分なディスク容量を先に用意しておくことを勧めます。README の環境名は multitalk のままです。

まずリポジトリを clone し、ディレクトリに入ります。

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 では 3 種類のモデルを準備する必要があります。

モデル 用途
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 にすべきか確認した方が安全です。

単一 GPU 推論例

公式の単一 GPU 実行例です。

 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 で実行する場合は、--sizeinfinitetalk-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

低 VRAM モードでは --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

複数 GPU、複数人物、Gradio

複数 GPU 推論の例です。

 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

量子化モデルは単一 GPU 実行のみをサポートします。公式例は次のとおりです。

 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 は依存関係もモデルも重めです。実際に導入する前に、次の点を確認しておくと安全です。

  • GPU の VRAM が足りているか。低 VRAM 環境ではまず --num_persistent_param_in_dit 0 または量子化モデルを試す。
  • flash_attn が現在の CUDA と PyTorch の組み合わせで正常にインストールできるか。
  • Hugging Face のモデルが完全にダウンロードされ、コマンド内の weights/... パスと一致しているか。
  • 入力 JSON がサンプル形式と一致しているか。
  • 720P、長尺動画、複数人物、複数 GPU 推論ではリソース要求が大きく増える。

README では、FusionX LoRA は高速化と品質向上に役立つ一方で、1 分を超えると色ずれが強くなり、動画内の同一性保持が弱くなる可能性があるとも説明されています。I2V は 1 枚画像から 1 分以内の生成で比較的良い結果が出やすく、1 分を超えると色ずれが目立ちやすくなります。

まとめ

InfiniteTalk は、研究・エンジニアリング用途寄りの音声駆動動画生成プロジェクトです。長尺動画のリップシンク、人物吹き替え、デジタルヒューマン動画、画像から話す動画を生成する用途に向いています。

まず試すだけなら、公式のインストール手順に沿って環境とモデルを準備し、480P の単一 GPU 例から動作確認するのがおすすめです。パス、依存関係、VRAM に問題がないことを確認してから、720P、複数人物、複数 GPU、LoRA 高速化、量子化モデルを試すと進めやすくなります。

参考リンク:

记录并分享
Hugo で構築されています。
テーマ StackJimmy によって設計されています。