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、低 VRAM 推論、TTS、Gradio、LoRA 高速化、INT8 量子化。
複数人物インタビュー、ポッドキャスト動画、デジタルヒューマン対話、キャラクター同士のやり取り、TTS 駆動の人物動画を作るなら、単一人物リップシンク系のプロジェクトより MultiTalk の方が近い用途です。
インストール手順
以下は公式 README のインストール手順を保ったものです。CUDA 対応の Linux 環境を使い、Conda、Git、十分な VRAM とディスク容量を事前に用意してください。README の環境名は multitalk です。
まずリポジトリを clone し、ディレクトリに入ります。
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 の前のダッシュが標準の -- かどうか手動で確認してください。
単一人物推論例
単一人物、単一 GPU 実行:
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
|
単一人物の低 VRAM 実行:
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
|
複数人物推論例
複数人物、単一 GPU 実行:
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
|
複数人物の低 VRAM 実行:
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 量子化モデルは単一 GPU 実行のみをサポートします。
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_thresh の推奨範囲は 0.2 から 0.5。値を上げると速くなる可能性があるが、動画品質が下がることもある。
- 低 VRAM 環境では、
--num_persistent_param_in_dit 0、INT8 量子化、またはコミュニティの低 VRAM 方案を先に試す。
README では、TeaCache により約 2 から 3 倍の速度向上が可能だとも説明されています。実際の効果は GPU、解像度、サンプリングステップ、人物数、LoRA や量子化の有無に左右されます。
まとめ
MultiTalk は、複数人物対話動画向けの音声駆動生成プロジェクトです。複数人物デジタルヒューマン、インタビュー動画、TTS 駆動動画、カートゥーンキャラクターのインタラクション、歌唱などに向いています。
まず試すだけなら、公式のインストール手順で環境とモデルを準備し、モデルのリンクまたはコピーを済ませてから、480P の単一人物例を実行するのがおすすめです。動作確認後に、複数人物、TTS、TeaCache、LoRA 高速化、INT8 量子化、Gradio を段階的に試すと進めやすくなります。
参考リンク: