MeiGen-AI/MultiTalk es un proyecto de generación de video conversacional multi-persona impulsada por audio. Su paper se titula Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation. El objetivo es generar videos de conversación con varias personas a partir de audio multi-stream, una imagen de referencia y prompts, manteniendo alineados el movimiento labial, la interacción y el control por prompt.
MultiTalk no se limita a humanos digitales de una sola persona. También enfatiza conversaciones multi-persona, canto, control interactivo y generación de personajes de estilo cartoon. Soporta salida 480P y 720P. El README indica que el código actual soporta principalmente inferencia 480P, mientras que 720P requiere varias GPU.
Capacidades Principales
Las capacidades de MultiTalk se pueden resumir así:
- Generación de video impulsada por audio para una o varias personas.
- Control de interacción de personajes virtuales mediante prompt.
- Escenarios más generales como personajes cartoon y canto.
- Salida 480P y 720P.
- Generación de video de hasta unos 15 segundos.
- Multi-GPU, TeaCache, APG, inferencia con baja VRAM, TTS, Gradio, aceleración LoRA y cuantización INT8.
Si quieres crear entrevistas multi-persona, videos de podcast, conversaciones con humanos digitales, interacción entre personajes o videos impulsados por TTS, MultiTalk encaja mejor que una herramienta de lip sync para una sola persona.
Instalación
A continuación se conserva el proceso de instalación del README oficial. Usa un entorno Linux con CUDA y prepara Conda, Git, suficiente VRAM y suficiente espacio en disco. El entorno del README se llama multitalk.
Primero clona el repositorio y entra en el directorio:
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
|
Esto usa el wheel de PyTorch para CUDA 12.1. Si tu driver, CUDA o plataforma son diferentes, ajusta el comando según la guía oficial de instalación de PyTorch.
2. Instalar 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 es sensible a CUDA, la toolchain de compilación y las versiones de PyTorch. Si falla la instalación, revisa primero si CUDA, nvcc, GCC, Python y el wheel de PyTorch son compatibles.
3. Instalar otras dependencias
1
2
|
pip install -r requirements.txt
conda install -c conda-forge librosa
|
4. Instalar FFmpeg
En el entorno Conda puedes usar:
1
|
conda install -c conda-forge ffmpeg
|
También puedes instalarlo a nivel del sistema. El README da este ejemplo con yum:
1
|
sudo yum install ffmpeg ffmpeg-devel
|
Preparación De Modelos
MultiTalk necesita estos modelos:
| Modelo |
Uso |
Wan2.1-I2V-14B-480P |
Modelo base |
chinese-wav2vec2-base |
Codificador de audio |
Kokoro-82M |
Pesos TTS |
MeiGen-MultiTalk |
Pesos de condición de audio de MultiTalk |
El README usa huggingface-cli para descargar los modelos. Los comandos oficiales son:
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
|
Si el entorno no tiene huggingface-cli, instala primero Hugging Face Hub:
1
|
pip install -U huggingface_hub
|
Tras descargar, el directorio debería contener aproximadamente:
1
2
3
4
5
|
weights/
Wan2.1-I2V-14B-480P/
chinese-wav2vec2-base/
Kokoro-82M/
MeiGen-MultiTalk/
|
Enlazar O Copiar El Modelo MultiTalk
El README pide enlazar o copiar el modelo MultiTalk dentro del directorio Wan2.1-I2V-14B-480P.
Mediante enlaces simbólicos:
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/
|
O copiando los archivos:
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/
|
Si usas enlaces simbólicos, reemplaza {Absolute path} con tu ruta absoluta real. En Windows o WSL, comprueba también permisos de symlink y resolución de rutas.
Parámetros Comunes
El README lista estos parámetros:
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.
|
Se conserva la escritura original del README. Antes de copiar comandos, ten en cuenta que los guiones antes de sample_text_guide_scale y sample_audio_guide_scale quizá no sean -- estándar; conviene revisarlos manualmente.
Inferencia Con Una Persona
Una persona, una 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
|
Una persona con baja 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
|
Una persona con varias 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
|
Una persona con 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
|
Inferencia Multi-Persona
Varias personas, una 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
|
Varias personas con baja 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
|
Varias personas con varias 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
|
Varias personas con 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, Cuantización Y Gradio
FusioniX o Lightx2v pueden reducir los pasos de muestreo. Ejemplo para una persona del 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
|
Ejemplo multi-persona:
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
|
El modelo cuantizado INT8 solo soporta ejecución con una 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
|
Cuantización con 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
|
Ejemplo de 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
|
O:
1
|
python app.py --num_persistent_param_in_dit 0
|
Ejemplo de Gradio cuantizado:
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
|
Aspectos A Tener En Cuenta
MultiTalk tiene dependencias pesadas y modelos grandes. Antes de desplegarlo, conviene comprobar lo siguiente:
- El código actual soporta principalmente inferencia 480P; 720P requiere varias GPU.
- Las notas oficiales indican que audio CFG suele funcionar bien entre 3 y 5, y aumentar audio CFG puede mejorar el lip sync.
- El modelo se entrenó con videos de 81 frames a 25 FPS. 81 frames suele funcionar mejor para seguir el prompt; clips más largos pueden reducir esa capacidad.
- En generación de video largo, Audio CFG afecta la consistencia de color entre segmentos. Se puede probar un valor de 3 para reducir variaciones tonales.
- El rango recomendado de
--teacache_thresh es 0.2 a 0.5. Valores más altos pueden acelerar, pero también bajar la calidad.
- En entornos con baja VRAM, prueba primero
--num_persistent_param_in_dit 0, cuantización INT8 o soluciones comunitarias de baja VRAM.
El README también indica que TeaCache puede aportar una aceleración aproximada de 2 a 3 veces. El resultado real depende de la GPU, resolución, pasos de muestreo, número de personas y uso de LoRA o cuantización.
Resumen
MultiTalk es un proyecto de generación impulsada por audio para video conversacional multi-persona. Encaja con humanos digitales multi-persona, entrevistas, videos impulsados por TTS, interacción de personajes cartoon y canto.
Para una prueba rápida, prepara el entorno y los modelos siguiendo la instalación oficial, completa el enlace o copia del modelo y empieza con el ejemplo 480P de una persona. Cuando funcione, prueba gradualmente multi-persona, TTS, TeaCache, aceleración LoRA, cuantización INT8 y Gradio.
Referencia: