Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation

Paper: arXiv:2505.22647 Code: MeiGen-AI/MultiTalk Code reference: main @ 86e98548 (2025-12-18)

1. Motivation (研究动机)

本文的核心问题不是“让一个人按一段音频张嘴”,而是把 audio-driven human animation 推到多人对话视频生成:输入一张包含多人的参考图、多路人物语音以及文本提示,模型需要生成一个能按提示互动、每个人只被自己那一路语音驱动、嘴型与音频同步的视频。这个任务比传统 talking head / talking body 更难,因为它同时要求音频同步、身份绑定、多人空间定位和文本指令遵循。论文把这个新任务命名为 Multi-Person Conversational Video Generation,并给出 MultiTalk 框架。

已有方法的局限可以分成三层。第一层是任务边界:大量 talking head 方法只关注脸部运动,能生成较自然的表情和嘴型,但通常忽略手势、身体姿态、人物与物体互动;一些 talking body 方法虽然开始利用视频扩散模型或额外姿态数据同步身体运动,却仍以单人、单音频为基本假设。第二层是条件输入:对话场景天然包含两路或多路音频,现有模型缺少多路音频注入机制;如果直接把两路音频合成或拼接给模型,模型并不知道哪一段语音应该作用于哪一个人。第三层是空间动态:多人视频中的人物不是静态贴片,身体可能移动、转身、遮挡或产生大幅动作,因此简单按画面左右切分很容易在人物运动后失效。

论文指出,最典型的失败是错误音频绑定:参考图里有两个人,输入一段或两段语音后,模型可能让两个人同时说话,或者让两个人的嘴型都对齐同一路语音。对于真实对话视频,这种失败非常致命,因为对话的自然性来自“轮流发声”和“角色-音频对应关系”。如果模型只能生成左右两个单人视频再拼接,虽然局部嘴型可能同步,但两边的光照、动作、相机运动和人物交互会不一致,不能形成统一场景。

这篇论文的动机还包括指令遵循能力。基座 Wan2.1-I2V 是一个强图像到视频扩散模型,天然拥有较强的人体、场景和动作先验;但在把它改造成音频驱动模型时,如果全量微调或训练数据过窄,模型容易丢失原本的指令跟随能力。论文特别强调,当文本提示要求“大幅身体动作”或“人物与物体/环境互动”时,只用 talking-head / talking-body 数据训练的 audio-to-video 模型会更保守,甚至破坏手部和物体结构。因此,本文不是单纯加一个音频条件,而是在“保持视频生成先验”和“加入音频控制”之间做折中。

主要贡献可以概括为四点:第一,提出 audio-driven multi-person conversational video generation 这个新任务,并定义了多路音频、多人动态定位和身份绑定三类挑战;第二,提出 MultiTalk 框架,在 DiT 视频扩散模型中加入音频 cross-attention 与多路音频注入;第三,提出 Label Rotary Position Embedding (L-RoPE),通过给视频 latent 的人物区域和音频 token 分配接近的标签,使 audio cross-attention 在空间上更容易激活对应人物;第四,系统分析训练策略,指出 partial parameter training 与 multi-task training 对保留基座模型的 instruction-following 能力很关键。

2. Idea (核心思想)

MultiTalk 的核心直觉是:多人对话视频中的“谁在说话”不能只靠音频内容学习出来,必须把人物区域和音频流在 attention 空间里显式绑定。 论文没有让模型从零学习“第一路音频属于左边人物、第二路音频属于右边人物”这种离散对应关系,而是借用 RoPE 的相对位置思想,把“人物身份标签”编码进 audio cross-attention 的 query/key。这样,视频 latent 中属于 person1 的 token 会带有一个标签范围,person1 的音频 token 会带有相近标签;person2 也同理。标签相近会让 attention 更容易在正确区域响应,背景则被赋予中间标签以降低与音频的关联。

整体框架分成三步。第一步是在 Wan2.1-I2V-14B 这样的 DiT-based image-to-video diffusion model 上加入音频条件。视频 latent 负责生成时空内容,文本条件和 CLIP 图像全局特征仍通过原本的 cross-attention 进入模型;MultiTalk 在 text cross-attention 后额外加入 audio cross-attention,使每个 DiT block 可以用音频特征调制视频 latent。第二步是把单人音频驱动扩展到多路音频:论文比较了直接拼接、分别计算再相加、按左右空间切分、L-RoPE 四种方案,前两者不能解决绑定,左右切分只在人物运动很小的时候有效。第三步是通过自注意力图自适应定位人物,再用 L-RoPE 把定位结果转成标签化位置。

“自适应定位”是 L-RoPE 能成立的前置条件。模型需要知道当前视频 latent 中哪些 token 属于 person1、哪些属于 person2、哪些是背景。论文利用 I2V 模型里的 reference-image-to-video self-attention:第一帧既是参考图,又参与视频生成,因此视频 latent 可以和参考图 token 建立相似度。通过参考图上的人物 mask,模型计算每个视频 latent token 与 person1、person2、background 的平均相似度,得到一个三类相似度矩阵;后续 L-RoPE 再根据最大相似度类别给 token 分配不同标签。

这篇文章最有价值的设计不是某个单独模块,而是把三个约束连起来:音频条件必须保留 temporal context;人物区域必须随视频动态变化而不是固定左右切分;训练必须尽量不破坏基座视频模型的指令遵循。于是 MultiTalk 形成了一个相对保守但实用的工程路线:冻结大部分 Wan2.1 参数,只训练音频 cross-attention 和 audio adapter;用两阶段训练先学单人 audio animation,再用双人对话数据学 multi-human animation;同时加入 I2V 多事件互动数据,让模型继续看到非说话类动作和人与物体/环境互动。

3. Method (方法)

3.1 基座模型与单人音频注入

MultiTalk 采用 Wan2.1-I2V-14B 作为 foundational video diffusion model。基座是 DiT 架构,并使用 3D VAE 对视频做空间和时间维度压缩;文本 encoder 产生文本条件 ,CLIP image encoder 提取参考图的全局上下文,二者通过 decoupled cross-attention 注入 DiT。论文选择这个基座的原因很直接:它已经具备高质量人体视频生成和 image-to-video 运动先验,MultiTalk 只需要在不破坏这些先验的前提下加入音频控制。

对于单人音频驱动,论文在每个 DiT block 的 text cross-attention 后加入 layer normalization 与 audio cross-attention。audio cross-attention 中 query 来自 video latent,key/value 来自音频 embedding。音频特征由 Wav2Vec 提取。因为当前视觉运动不仅取决于当前音频帧,也受前后音频影响,论文对当前帧附近的音频 embedding 做拼接: 这里 是 audio context length。由于 3D VAE 对视频做了时间压缩,video latent 的帧数短于原始音频 embedding 的帧数,无法直接逐帧 attention。论文因此设计 audio adapter:把音频 embedding 拆成首帧 和后续帧 ,对后续帧下采样,再分别经过 MLP,最后拼接并投影为压缩音频条件: released code 中的对应实现位于 wan/modules/multitalk_model.pyAudioProjModel 把 first-frame audio embedding 与 latter-frame audio embedding 分开投影,然后拼接为 context tokens;WanAttentionBlock 在原 text cross-attention 后调用 audio_cross_attn,再把输出加回 video latent。这与论文“text cross-attention 后插入 audio cross-attention”的描述一致。

3.2 多路音频注入的失败路径与 L-RoPE

论文先比较了三种朴素多路音频注入方式。第一种是把 直接拼接后与 video latent 做 audio cross-attention;第二种是让 分别与 计算 cross-attention,再把两个结果相加。两者的问题相同:模型没有显式知道哪一路音频属于哪一个人物,训练也难以自动学到稳定绑定。第三种是按照画面左右把 video latent 切开,让左半区域只看左侧音频、右半区域只看右侧音频,再拼接 attention 输出。这可以处理人物几乎不移动的样例,但一旦人物大幅运动、互相靠近或位置变化,固定左右切分就会把音频绑定到错误区域。

L-RoPE 的做法是把“人物身份”写入 cross-attention 的位置编码,而不是写死空间切分。具体地,MultiTalk 首先在参考图 中找到 person1、person2 与背景 mask: 然后利用 I2V 模型中 reference image 与 generated video latent 的 self-attention,得到 。这里 分别是 latent space 的帧数、高和宽。对每个 video latent token,模型计算其与三个参考区域的平均相似度,得到 表示第 个 video token 与第 个参考区域的相似度。用 可以判断 token 当前更像 person1、person2 还是背景,从而实现动态人物定位。

3.3 Label Rotary Position Embedding

普通 RoPE 用旋转位置编码表达 token 的相对位置。L-RoPE 把“位置”替换为“标签”:对 query 序列 ,每个向量有标签 ,先根据标签计算角度,再旋转 query: 论文描述中,video latent 的 query 来自 ,audio key/value 来自 。关键是如何分配标签。person1 的视觉区域被映射到 ,person2 映射到 ,背景被赋值为 。音频端则把 person1 audio 的标签设为 ,person2 audio 的标签设为 ,即分别落在对应人物视觉标签范围的中间。person 区域不是常数标签,而是根据相似度 归一化到对应区间,例如 person1 的标签可写作: released code 与论文的对应非常直接。wan/modules/attention.pySingleStreamMutiAttention 默认 class_range=24class_interval=4,因此 rope_h1=(0,4)rope_h2=(20,24)rope_bak=12;forward 中先用 x_ref_attn_map 计算 human1/human2 的 min/max,再调用 normalize_and_scale 把相似度映射到两个区间;audio key 端把前半 tokens 设为 (0+4)/2=2,后半 tokens 设为 (20+24)/2=22

wan/utils/multitalk_utils.py 中的 get_attn_map_with_target 负责用 reference mask 计算人物 attention map,normalize_and_scale 负责区间归一化。论文公式与 released code 实现差异:论文用紧凑公式描述 LRoPE(q_i,l_i),代码实际通过 RotaryPositionalEmbedding1D 对 query/key 施加由标签构成的 position tensor;语义一致,但代码把音频两路 token 默认按前半/后半划分,训练配置脚本未在 repo 中释放。

用于理解实现的伪代码如下:

# section-level pseudocode, anchored to MeiGen-AI/MultiTalk main@86e98548
ref_masks = [mask_person1, mask_person2, mask_background]
x_ref_attn_map = get_attn_map_with_target(visual_q, ref_k, latent_shape, ref_masks)
cls = argmax(x_ref_attn_map, dim=0)
label_p1 = normalize_and_scale(x_ref_attn_map[0], source_range_p1, (0, 4))
label_p2 = normalize_and_scale(x_ref_attn_map[1], source_range_p2, (20, 24))
label_bg = full_like(label_p1, 12)
video_labels = select_by_class([label_p1, label_p2, label_bg], cls)
q = rope_1d(q, video_labels)
audio_labels = concat(full(n_audio_half, 2), full(n_audio_half, 22))
k_audio = rope_1d(k_audio, repeat_per_frame(audio_labels))
out = cross_attention(q, k_audio, v_audio)

3.4 训练策略与长视频生成

训练分两阶段。第一阶段主要让模型获得单人 audio animation 能力;第二阶段使用双路音频的双人对话数据,学习 multi-human animation。论文还比较了 full-parameter training 与 partial parameter training:在计算和数据有限时,全量训练会破坏基座模型的 motion / interaction 指令遵循能力,并导致手和物体畸变;只训练 audio cross-attention 与 audio adapter 可以把音频能力注入模型,同时保留原 Wan2.1-I2V 的视觉和指令先验。

Multi-task training 是另一个关键点。训练时除了 AI2V(audio + image to video)任务,还加入 I2V 任务;I2V 中通过把 audio embedding 置零移除音频条件,并使用包含多事件、人-物/人-环境交互的数据。论文认为这部分数据对“文本提示中的动作描述”和生成视频之间的对齐很重要。换句话说,MultiTalk 不是只靠说话数据学动作,而是用 I2V 互动数据维持基座模型对复杂动作和场景关系的理解。

长视频生成采用自回归式推理。普通 I2V 用第一帧作为条件;MultiTalk 在续写时把前一段视频的最后 5 帧作为额外条件。经过 3D VAE 压缩后,这 5 帧变成 2 帧 latent noise,再对后续帧补零并拼接 video mask 输入 DiT。这样模型可以连续生成更长的对话视频,而不是只生成短片段。

released code 搜索结果:开源仓库是推理导向,包含 generate_multitalk.pywan/multitalk.pywan/modules/multitalk_model.pywan/modules/attention.pywan/utils/multitalk_utils.py 等核心文件;README 提供 Wan2.1-I2V-14B-480P、Chinese Wav2Vec2、Kokoro TTS、MeiGen-MultiTalk 权重下载与推理命令。代码默认 sample_steps=40size=multitalk-480frame_num=81,支持 audio_type='para'audio_type='add' 两类音频组织方式,并通过 cond_audio 中的 person1/person2 生成两路 Wav2Vec embedding。代码中没有完整公开训练 launch script,因此训练 batch size、GPU 数、学习率等以论文正文为来源,而不是从 repo 默认配置反推。

4. Experimental Setup (实验设置)

训练数据分为三类。第一阶段训练使用约 2K hours 的单人 talking person 视频,覆盖脸部或身体;为了保留复杂动作和指令遵循,论文还收集约 200K 个包含多事件、人-物/人-环境互动的视频片段,平均时长约 10 秒;第二阶段使用 100 hours 双人对话视频学习 multi-human animation。评测数据也分三类:talking head 使用公开 HDTF 与 CelebV-HQ;talking body 使用 EMTD;由于此前没有双人 talking body 对话评测集,作者从互联网收集 40 个视频,称为 MTHM。

指标方面,FID 与 FVD 衡量生成数据质量,E-FID 衡量生成视频中面部表达的 expressiveness,Sync-C 与 Sync-D 衡量音频与嘴唇运动同步。对于 MTHM 这类双人视频,论文把生成视频分成左右两个 segment,每个 segment 只包含一个人物及其对应音频,分别计算 Sync-C、Sync-D、E-FID 后取平均。这种评测方式虽然不能完全覆盖互动一致性,但至少把“每个人是否和自己音频同步”从整体视频中拆出来。

实现细节:实验基座是 Wan2.1-I2V-14B。训练使用 constant learning rate ,带 warm-up,优化器为 AdamW。训练时只 fine-tune audio cross-attention layer 和 adapter,其余层冻结。硬件为 64 NVIDIA H800-80G GPUs;stage 1 batch size 为 64,stage 2 batch size 为 32。所有实验和评估使用 40 sampling steps。采样时论文使用长 negative prompt 过滤过曝、静态、模糊、字幕、低质量、JPEG artifacts、多余手指、畸形手脸肢体、融合手指、杂乱背景、倒走等不希望出现的退化;此外使用 Qwen-VL 给参考图生成 caption。

README 中的开源推理配置与论文设置大体一致但更偏部署:当前代码说明模型兼容 480P 与 720P,但公开代码只支持 480P 推理;720P 需要多 GPU,README 表示后续更新。权重包括 Wan2.1-I2V-14B-480P base model、TencentGameMate/chinese-wav2vec2-base audio encoder、Kokoro-82M TTS weights 以及 MeiGen-MultiTalk audio condition weights。推理命令中 --sample_steps 40 与论文一致,--num_persistent_param_in_dit 0 可用于低显存场景,README 还提到 multi-GPU inference、TeaCache、APG、LoRA acceleration 与 Gradio 支持。

5. Experimental Results (实验结果)

5.1 Talking head 与 talking body 定量结果

在 talking head 上,MultiTalk-single 与 MultiTalk-multiple 都与强 talking-head / talking-body baseline 竞争。HDTF 上,MultiTalk-single 的 Sync-C 为 8.54、Sync-D 为 6.69、E-FID 为 1.00、FID 为 24.01、FVD 为 95.99;其中 Sync-C、E-FID、FID 是表中最优,FVD 次优。MultiTalk-multiple 在 HDTF 上为 Sync-C 8.53、Sync-D 6.81、E-FID 1.24、FID 27.27、FVD 124.06,与单人模型接近,说明多路训练没有明显损害单人能力。CelebV-HQ 上,MultiTalk-multiple 的 Sync-C 7.33 和 FVD 184.86 为表中最优,MultiTalk-single 的 Sync-D 7.13、E-FID 1.41、FID 32.31 为表中最优。

在 talking body 的 EMTD 数据集上,MultiTalk-multiple 的 Sync-C 8.34、E-FID 1.51、FID 31.93 为表中最优;MultiTalk-single 的 Sync-D 7.28 为最优。Echomimic v2 的 FVD 163.60 仍优于 MultiTalk-single 的 221.86 与 MultiTalk-multiple 的 238.77,说明 MultiTalk 在视频分布距离上并非全指标领先;但在音画同步和面部表达相关指标上优势明显。论文自己的解释是“多数指标”超过其他方法,而不是所有指标都最优,这一点在笔记中应保留。

5.2 多人对话、定性对比与训练策略

定性结果强调两件事:第一,给定包含动作描述的 text prompt 时,只有 MultiTalk 更稳定地响应指令,且视频 artifacts 更少;第二,在多人场景中,直接把左右两边单独生成再拼接会造成左右片段不一致,而 MultiTalk 在统一视频中生成两个人,能更自然处理互动关系。论文还可视化了 specific person 的 self-attention map,说明 reference-image-to-video attention 可以动态定位人物区域,并辅助 audio binding。

multi-stream 与 single-stream 分析显示,多路音频训练并没有导致模型在单人任务上显著退化。表 1 和表 2 中 MultiTalk-multiple 与 MultiTalk-single 的指标接近:例如 HDTF Sync-C 几乎相同(8.53 vs 8.54),EMTD Sync-C 甚至 multi 模型更高(8.34 vs 8.18)。这支持论文的一个重要主张:只要音频绑定机制与训练策略设计得当,多人能力可以作为扩展能力加入,而不必牺牲单人 talking animation。

full-parameter training vs cross-attention training 的消融更像是工程经验结论:在有限数据和算力下,全量训练会破坏 base model 已经学到的复杂 motion / interaction 能力,尤其出现手部和物体畸变;只训练 audio cross-attention 和 adapter 可以把“听音频说话”的能力插入模型,同时维持基座 I2V 的指令跟随。这个结果与本文任务设定高度相关,因为对话视频不只是嘴动,还需要人物动作、互动和场景一致性。

5.3 L-RoPE label 消融与长视频生成

L-RoPE 的 label range selection 在 MTHM 上做了小规模消融。variant a 使用 visual label:person1 0—2、person2 2—4,audio label:person1 1、person2 3,结果为 Sync-C 7.47、Sync-D 7.22、E-FID 3.22、FID 52.87、FVD 506.49。variant b 使用 visual label:person1 0—4、person2 20—24,audio label:person1 2、person2 22,结果为 Sync-C 7.56、Sync-D 7.13、E-FID 3.16、FID 54.20、FVD 508.01。两组指标差别不大,论文据此认为 L-RoPE 对具体 label range 不敏感;更重要的是“让对应音频和对应人物区域标签接近、背景与音频标签分离”的结构性约束。

长视频结果展示了一个 305 frames 的生成样例,说明利用最后 5 帧递归续写可以把短片段扩展到更接近真实应用的时长。需要注意的是,论文没有给出长视频定量稳定性指标,例如长时间身份漂移、嘴型同步衰减、动作重复或误差累积;图示只能说明方法可行,而不能证明长视频长度任意扩展时质量仍稳定。

5.4 局限与风险

论文明确承认一个限制:使用真实音频时,面部表情效果优于使用合成音频。作者推测原因是训练数据主要是真实音频,因此模型对合成语音的 prosody、音色或声学伪影泛化不足。后续如果要部署到 TTS 驱动的虚拟主播或角色对话,可能需要在合成语音上做额外训练或增强,否则嘴型同步能成立但表情自然度下降。

社会影响方面,MultiTalk 这类模型可用于多角色电影场景、虚拟播客、电商直播和交互式数字人,但也带来伪造名人或误导性视频的风险。这个风险不是 MultiTalk 独有,而是所有高保真 human animation 方法的共同问题;不过 MultiTalk 把多人对话生成能力做强后,伪造“多人同场对话”的可信度会更高,因此实际发布和部署需要水印、授权、检测和使用边界。

总体来看,本文的贡献强在任务定义 + 绑定机制 + 训练策略的组合,而不是单纯追求更高分辨率或更大模型。L-RoPE 的技术价值在于把多路音频绑定问题转化为 cross-attention 中的标签化相对位置问题;partial / multi-task training 的价值在于提醒 audio-driven generation 不能只优化嘴型同步,否则会牺牲视频扩散基座的动作先验。对后续工作来说,最值得继续验证的是:更多人物数时标签空间如何扩展;人物遮挡、换位、镜头运动时 reference attention 是否可靠;合成语音、跨语言音频和长时对话是否会带来新的绑定或表情退化问题。