LatentSync
论文信息
- 标题:LatentSync: Taming Audio-Conditioned Latent Diffusion Models for Lip Sync with SyncNet Supervision
- 作者:Chunyu Li, Chao Zhang, Weikai Xu, Jingyu Lin, Jinghui Xie, Weiguo Feng, Bingyue Peng, Cunjian Chen, Weiwei Xing
- 单位:ByteDance;北京交通大学;Monash University
- 发表:ICCV 2025 (Paper ID: 8867)
- 开源:https://github.com/bytedance/LatentSync
唇形同步(lip sync)是一类视频编辑任务:给定一段目标音频和一段包含说话人的视频,模型需要重新生成嘴部运动以匹配音频,同时保持头部姿态和个人身份不变 #prajwal2020lip。这在视频配音、虚拟数字人和视频会议等场景中有广泛需求。
当前唇形同步方法主要分为两大阵营。GAN 方法以 Wav2Lip #prajwal2020lip 和 StyleSync #guan2023stylesync 为代表,虽然推理速度快,但难以扩展到大规模多样化数据集——GAN 训练的不稳定性和模式崩塌 #arjovsky2017wasserstein 是根本瓶颈。扩散方法 #mukhopadhyay2024diff2lip #bigioi2024speech 能轻松泛化到不同身份,但现有方案各有局限:像素空间扩散受限于硬件无法生成高分辨率视频,两阶段方案 #zhong2024style #yu2024make 则因不同声音映射到相同运动表示而丢失情感语调的细微表达。
ByteDance 团队提出了 LatentSync——首个基于音频条件潜在扩散模型(LDM)的端到端唇形同步框架。它直接在 Stable Diffusion 1.5 #rombach2022high 的潜在空间中操作,生成高分辨率说话视频。然而,研究团队在将 EMO #tian2024emo 和 Hallo #xu2024hallo 等肖像动画方法直接用于唇形同步时发现了一个令人意外的现象:模型的唇形同步精度很差。深入分析后,他们定位到了一个此前被忽视的根本问题——捷径学习(shortcut learning)#geirhos2020shortcut。
本文的三大核心贡献由此展开:(1) 提出 LatentSync——首个基于音频条件 LDM 的端到端唇形同步框架,并引入 TREPA 增强时间一致性;(2) 识别并验证了唇形同步任务中的捷径学习问题,探索了将 SyncNet 监督融入 LDM 的不同方法;(3) 对 SyncNet 收敛性进行了首次系统性实证研究,设计了 StableSyncNet 架构,将准确率从 91% 提升到 94%。代码已在 GitHub 开源 #latentsync-github。
什么是捷径学习
唇形同步方法通常基于视频到视频的修复(inpainting)框架:模型接收遮罩帧(masked frame)和音频作为输入,预测唇形。问题出在哪里?研究者发现,音频条件 LDM 倾向于从遮罩帧中唇部周围的视觉信息(面部肌肉、眼睛、脸颊)直接推断唇形运动,而忽略音频信息。这就是捷径学习——模型走了一条"视觉→视觉"的近路,绕过了"音频→视觉"这条本该走的路。
这个发现有一个自然的疑问:为什么 EMO、Hallo 等音频驱动肖像动画方法不存在这个问题?答案在于框架差异:肖像动画基于图像到视频框架,不涉及输入遮罩帧,因此不存在视觉捷径 #tian2024emo #xu2024hallo。而唇形同步的视频到视频修复框架天然提供了视觉捷径的条件。
Mask 大小实验:用数据说话
为了验证捷径学习的存在和 SyncNet 监督 #chung2017out #prajwal2020lip 的有效性,研究者设计了一个精巧的实验:训练音频条件 LDM 时使用不同大小的遮罩,分别在有无 SyncNet 监督的条件下测试,用 sync confidence score #chung2017out 评估同步精度。
结果令人深思:无 SyncNet 监督时,mask 越大,同步精度反而越高。这看似矛盾,实则完美印证了捷径学习的存在——mask 越大意味着遮蔽了更多唇部周围的视觉信息,模型"走捷径"的条件被削弱,被迫依赖音频来做推断。而有 SyncNet 监督时,精度在不同 mask 大小下保持稳定,说明模型已经学会了真正的音频-视觉关联。
整体框架
LatentSync 的核心思路是:在 Stable Diffusion 1.5 的潜在空间中进行视频修复,通过 SyncNet 监督将音频-视觉关联"注入"模型。整个框架可以用一句话概括——用 U-Net 在潜在空间去噪,用一步法估计 clean latent,解码到像素空间后施加 SyncNet 监督。
13 通道输入设计
U-Net 的输入是 13 个通道的拼接:4 通道噪声 latent + 1 通道 mask + 4 通道遮罩帧 latent + 4 通道参考帧 latent。这里的设计动机值得展开:
- 噪声 latent(4ch):标准 SD 的去噪输入,承载扩散过程
- Mask(1ch):覆盖整张脸的二值遮罩,标记需要重新生成的区域
- 遮罩帧 latent(4ch):被 mask 处理后的帧,提供身份和背景信息
- 参考帧 latent(4ch):训练时随机选取,推理时取当前帧,提供面部特征参考
模型以 SD 1.5 #rombach2022high 参数初始化,但第一个 conv_in 层(13 通道)和 cross-attention 层(维度 384)随机初始化。这意味着大部分参数继承了 SD 的视觉先验,只有与音频相关的部分需要从头学习。
音频层:Whisper + Cross-Attention
LatentSync 使用预训练的 Whisper #radford2023robust 提取音频嵌入。一个关键设计是音频窗口:对于每帧生成,不只使用当前帧的音频,而是将前后若干帧的音频打包输入。研究者定义音频特征为:
其中 $m$ 是单侧的音频帧数。更大的音频窗口为模型提供了更丰富的时间信息——唇形不仅与当前瞬间的语音有关,还受到前后语音的影响。音频嵌入通过原生 cross-attention 层注入 U-Net,维度为 384。
仿射变换与固定遮罩
数据预处理阶段,LatentSync 对每帧做人脸正面化(affine transformation),统一面部角度 #guan2023stylesync。这让模型在侧面等困难场景下也能有效学习面部特征。
一个容易被忽视但极为重要的设计是固定遮罩。LatentSync 不使用 landmarks #lugaresi2019mediapipe #bulat2017far 来绘制遮罩,因为移动的 landmarks 本身就包含了唇形运动的线索——这恰恰是捷径学习的入口。固定位置和形状的遮罩切断了这条捷径。
SyncNet 监督:像素空间 vs 潜在空间
潜在扩散模型在噪声空间预测,而 SyncNet #chung2017out 需要图像空间输入。LatentSync 的解决方案是一步法:用预测的噪声 $\epsilon_\theta(z_t)$ 直接估计 $\hat{z}_0$:
这意味着不需要完成完整的多步去噪就能获得估计的 clean latent,从而在训练时施加监督。
接下来是一个关键选择:在哪个空间施加 SyncNet 监督?研究者探索了两种方案:
- (a) 解码像素空间监督:将 $\hat{z}_0$ 通过 VAE 解码器还原为图像,与 Wav2Lip #prajwal2020lip 的 SyncNet 训练方式一致
- (b) 潜在空间监督:直接在 VAE 编码后的 latent vector 上训练 SyncNet
实验表明,潜在空间 SyncNet 的收敛明显劣于像素空间——原因可能是 VAE 编码过程中唇部信息已经丢失。因此 LatentSync 最终选择了解码像素空间监督。
TREPA:时间表征对齐
研究者注意到生成视频的高频细节(牙齿、嘴唇、面部毛发)存在闪烁。为增强时间一致性,他们提出了 TREPA(Temporal Representation Alignment)——用大规模自监督视频模型 VideoMAE-v2 #wang2023videomae 提取时间表征,然后对齐生成帧序列与真实帧序列的时间表征:
其中 $\mathcal{T}$ 是 VideoMAE-v2 编码器(取 head projection 前的嵌入),$\mathcal{D}$ 是 VAE 解码器,计算前对表征做 $\ell_2$ 归一化。TREPA 的直觉类似于 LPIPS #zhang2018unreasonable,但关键区别在于它利用的是时间表征而非空间表征——单张图像的距离损失无法改善序列级别的一致性。
一个有趣的反直觉发现(记录在论文 TeX 源码注释中):研究者曾尝试用 AnimateDiff #guo2023animatediff 的 temporal layer 增强时间一致性,但它反而损害了唇形同步精度。原因可能是 temporal layer 增加了额外参数,分散了音频 cross-attention 层的梯度。TREPA 不引入新参数,反而促使模型更有效地利用音频窗口中的时间信息,间接强化了音频层训练。
两阶段训练策略
解码像素空间监督有一个工程问题:VAE 解码过程的激活值需要存储用于反向传播,极大消耗显存。为此 LatentSync 设计了两阶段训练:
第一阶段——学习视觉特征。不添加 temporal layer,训练 U-Net 全部参数。损失函数仅有标准去噪损失:
其中 $A$ 是输入音频,$\tau_\theta$ 是音频特征提取器(Whisper)。此阶段不需要 VAE 解码,因此可以用更大的 batch size 高效学习视觉特征和修复能力。
第二阶段——学习音频-视觉关联。冻结 U-Net 主体参数,只训练 temporal layer 和音频层。16 帧解码后的视频与对应音频送入 SyncNet 计算同步损失,同时施加 LPIPS 感知损失和 TREPA:
其中 SyncNet 损失为:
LPIPS 损失用 VGG #simonyan2014very 特征改善唇齿等细节区域的视觉质量。研究者观察到,音频条件 LDM 大部分时间在学视觉特征,音频-视觉关联的学习相对快速——两阶段策略恰好利用了这一特性。
graph LR
subgraph Stage1["第一阶段:学习视觉特征"]
S1A["全 U-Net 参数
(含 conv_in 13ch)"] --> S1B["无 temporal layer"]
S1B --> S1C["损失:L_simple 仅去噪"]
S1C --> S1D["无需 VAE 解码
→ 大 batch size"]
end
subgraph Stage2["第二阶段:学习音视关联"]
S2A["冻结 U-Net 主体"] --> S2B["仅训 temporal + audio layer"]
S2B --> S2C["损失:L_simple + L_sync
+ L_lpips + L_trepa"]
S2C --> S2D["需 VAE 解码
→ 显存受限"]
end
Stage1 -->|"切换"| Stage2训练配置披露
| 配置项 | 披露状态 | 值 / 说明 |
|---|---|---|
| 训练数据 | 已披露 | VoxCeleb2(100万+条语音,6000+说话人)+ HDTF(362条高清视频,720p-1080p),HyperIQA #su2020blindly 过滤低质量视频 |
| 训练硬件 | 未披露 | 原文未明确给出 |
| 优化器 | 未披露 | 原文未明确给出 |
| 学习率 | 未披露 | 原文未明确给出 |
| Batch size | 未披露 | 原文未明确给出(SyncNet 训练 batch size 1024) |
| 训练步数 / 轮数 | 未披露 | 原文未明确给出 |
| 训练时长 | 未披露 | 原文未明确给出 |
| 模型参数量 | 部分披露 | 基于 SD 1.5,新增 conv_in(13ch)和 cross-attention(dim 384);总参数量未明确 |
| 精度格式 | 未披露 | 原文未明确给出 |
| Checkpoint 策略 | 未披露 | 原文未明确给出 |
| 初始化来源 | 已披露 | SD 1.5 预训练参数(conv_in 和 cross-attention 随机初始化) |
| Stage 1 训练范围 | 已披露 | 全 U-Net 参数,无 temporal layer,仅 $\mathcal{L}_{\text{simple}}$ |
| Stage 2 训练范围 | 已披露 | 仅 temporal layer + audio layer,其余冻结,四项 loss 联合 |
| 损失权重 $\lambda_{1\text{-}4}$ | 未披露 | 原文未明确给出具体数值 |
StableSyncNet:SyncNet 收敛性研究
SyncNet 的质量直接决定唇形同步精度,但 SyncNet 恰出了名地难训练——训练损失经常卡在 0.69 不再下降。LatentSync 团队对此做了首次系统性消融研究。
为什么 loss 卡在 0.69?
SyncNet 的训练是二分类任务(音画是否同步),随机 50% 正样本/负样本。当模型无法区分正负样本时,它倾向于对所有输入输出 0.5 的概率。此时交叉熵损失为:
因为 $\log 0.5 \approx -0.693$,这正是模型"什么都不学、随机猜测"时的损失值。SyncNet 卡在 0.69 意味着它完全没有获得判别能力。
五个关键收敛因素
研究者从五个维度进行了消融实验,每个维度控制其他变量不变:
(1) Batch size:1024 最佳——收敛快且稳定,验证损失最低。128 可能完全不收敛,256 虽收敛但剧烈振荡。对比学习需要大 batch 提供足够的负样本多样性。
(2) 架构:研究者用 SD 1.5 的 U-Net encoder 重新设计了 SyncNet 的视觉和音频编码器,保留 residual blocks #he2016deep 和 self-attention #vaswani2017attention,去掉 cross-attention(SyncNet 不需要额外条件)。这个架构被命名为 StableSyncNet,训练全程保持低于 Wav2Lip SyncNet 的训练和验证损失。
(3) 嵌入维度:512 太小,语义信息不足;4096/6144 太大,表征稀疏阻碍收敛。2048 是 256×256 输入的最优维度。
(4) 输入帧数:16 帧帮助收敛,25 帧过多反而导致训练早期卡在 0.69,且最终验证损失无显著优势。
(5) 数据预处理:野外视频天然存在音画偏移,必须用预训练 SyncNet #chung2017out 校正到零偏移,并移除 sync confidence 低于 3 的视频。关键发现:先做仿射变换再调偏移效果更好——因为正面化后预训练 SyncNet 能更准确地预测偏移。
推理流程
LatentSync 的推理管线清晰直接:
- 预处理:输入视频转为 25 FPS,基于 face-alignment #bulat2017far 检测的 landmarks 做仿射变换,获得 256×256 的人脸视频。音频重采样到 16kHz。
- 音频编码:Whisper 提取梅尔频谱图特征,打包成音频窗口 $A^{(f)}$
- Latent 拼接:噪声 latent + mask + 遮罩帧 latent + 参考帧 latent → 13 通道 U-Net 输入
- DDIM 去噪:20 步 DDIM #song2020denoising 采样,逐步去噪得到 clean latent
- VAE 解码:解码到像素空间,获得最终唇形同步帧
- 后处理:将 256×256 人脸贴回原视频对应位置
实时性与部署分析
20 步 DDIM 采样意味着每帧需要 20 次 U-Net 前向传播,这在实时性上是一个明显瓶颈。根据社区实测,LatentSync v1.5 在 8GB 显存的 GPU 上可运行,v1.6 需要 18GB #latentsync-github。对于非实时场景(如视频后期配音、虚拟人内容制作),20 步推理完全可以接受。但对于实时视频会议等低延迟场景,LatentSync 的推理速度仍有差距。
推理时的参考帧策略值得注意:训练时参考帧随机选取(增加数据多样性),推理时取当前帧作为参考(保证身份一致性)。这意味着推理时每帧的参考信息来自自身——模型利用当前帧的非遮罩区域(眼睛、脸颊、额头等)来辅助唇部生成。
分辨率限制是另一个实践考量。由于仿射变换将人脸裁剪到 256×256,最终生成的唇部区域分辨率受限于这个尺寸。虽然可以通过后处理将结果贴回原始分辨率视频,但唇部细节的清晰度上限由 256×256 决定。对比来看,MuseTalk #zhang2024musetalk 虽然也工作在潜在空间,但它是单步推理(非扩散过程),在实时性上有显著优势——代价是同步精度较低(Sync_conf 5.9-6.8 vs LatentSync 的 7.3-8.9)。这种"质量 vs 速度"的权衡是当前唇形同步领域的核心张力。
社区已围绕 LatentSync 构建了完整的 ComfyUI 集成生态,多个 wrapper 和工作流使其可以在 ComfyUI 中作为节点使用,还有 Replicate、WaveSpeed 等平台提供 API 托管服务 #latentsync-github。这大大降低了使用门槛——即使没有 GPU 的用户也可以通过 API 调用 LatentSync 的能力。
实践提示
LatentSync v1.5(2025年3月)和 v1.6(2025年6月)是两个重要版本。v1.6 修复了"牙齿和嘴唇模糊"的问题——这是 TREPA 和 LPIPS 损失未能完全解决的高频细节问题。如果使用 v1.5 遇到唇齿模糊,建议升级到 v1.6。
实验配置
| 配置项 | 披露状态 | 值 / 说明 |
|---|---|---|
| 评测数据集 | 已披露 | HDTF(30条随机选取)、VoxCeleb2(30条随机选取) |
| 评测指标 | 已披露 | FID↓(跨生成)/ SSIM↑(重建)/ Sync_conf↑(同步精度)/ LMD↓(口型距离)/ FVD↓(时间一致性) |
| Baseline 方法 | 已披露 | Wav2Lip、VideoReTalking、Diff2Lip、MuseTalk |
| 推理硬件 | 未披露 | 原文未明确给出 |
| 推理分辨率 | 已披露 | 256×256(仿射变换后人脸裁剪区域) |
| 推理环境 | 未披露 | 原文未明确给出 |
评测分两个设置:重建设置(使用原始音频)评估 SSIM,跨生成设置(使用不同音频)评估 FID。Sync confidence 评估音画同步,LMD 评估口型距离,FVD 评估时间一致性。
主实验结果
| 方法 | HDTF | VoxCeleb2 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| FID↓ | SSIM↑ | Sync_conf↑ | LMD↓ | FVD↓ | FID↓ | SSIM↑ | Sync_conf↑ | LMD↓ | FVD↓ | |
| Wav2Lip #prajwal2020lip | 12.5 | 0.70 | 8.2 | 0.34 | 304.35 | 10.8 | 0.71 | 7.0 | 0.53 | 257.85 |
| VideoReTalking #cheng2022videoretalking | 9.5 | 0.75 | 7.5 | 0.49 | 270.56 | 7.5 | 0.77 | 6.4 | 0.60 | 215.67 |
| Diff2Lip #mukhopadhyay2024diff2lip | 10.3 | 0.72 | 7.9 | 0.36 | 260.45 | 9.8 | 0.73 | 6.9 | 0.54 | 210.45 |
| MuseTalk #zhang2024musetalk | 9.35 | 0.74 | 6.8 | 0.56 | 246.75 | 7.1 | 0.80 | 5.9 | 0.64 | 203.43 |
| LatentSync | 7.22 | 0.79 | 8.9 | 0.30 | 162.74 | 5.7 | 0.81 | 7.3 | 0.51 | 123.27 |
LatentSync 在所有 10 项指标上全面领先。最值得关注的是:Sync_conf 达到 8.9(Wav2Lip 为 8.2),这是 94% 准确率 StableSyncNet 和 U-Net cross-attention 层共同作用的结果——音频与唇形的关联被更充分地学习。FVD 从 Wav2Lip 的 304.35 降至 162.74,降幅近 47%,归功于 temporal layer 和 TREPA 的双重时间一致性增强。
消融实验
SyncNet 监督空间
| 方法 | Sync_conf↑ | FVD↓ |
|---|---|---|
| 无 SyncNet 监督 | 4.6 | 220.37 |
| 潜在空间 SyncNet | 7.9 | 180.45 |
| 像素空间 SyncNet | 8.9 | 162.74 |
无 SyncNet 监督时 Sync_conf 仅有 4.6——印证了捷径学习问题的严重性。潜在空间 SyncNet 优于无监督但仍劣于像素空间,原因在于 VAE 编码导致唇部信息损失。一个有趣的附带发现:唇形同步精度的提升伴随着时间一致性的改善——因为音频窗口本身蕴含丰富时间信息,模型对音频的更好利用也带来了时间一致性的增益。
TREPA
| 方法 | FID↓ | SSIM↑ | FVD↓ |
|---|---|---|---|
| LatentSync | 7.71 | 0.77 | 176.35 |
| LatentSync + TREPA | 7.22 | 0.79 | 162.74 |
TREPA 在三项指标上均有提升,FVD 从 176.35 降至 162.74(降幅 7.7%)。这归功于 VideoMAE-v2 #wang2023videomae 表征中封装的视觉和时间双重信息。
方法定位
LatentSync 的方法论贡献可以提炼为两层:表面是"把 SyncNet 监督融入 LDM",深层是"用监督目标的设计对抗模型的惰性"。捷径学习不是 LDM 独有的现象——任何输入中同时包含捷径特征和目标特征的模型都可能落入这一陷阱。LatentSync 的经验提示我们:当模型走捷径时,问题往往不在模型容量,而在监督信号。
局限性
- 推理速度:20 步 DDIM 限制了实时应用,20 次 U-Net 前向传播的延迟在百毫秒级
- 高频细节闪烁:尽管 TREPA 改善了时间一致性,论文自己承认牙齿、嘴唇等高频细节仍有闪烁——v1.6 更新部分解决了此问题
- 整脸遮罩:遮罩覆盖整张脸,意味着眼睛和脸颊也会被重新生成,这可能改变面部微表情
- 关键超参数缺失:损失权重 $\lambda_{1\text{-}4}$、DDIM $\eta$、Whisper 具体型号、音频窗口 $m$ 等均未在论文中披露,需查代码
- mask 泄露风险:后续工作 OmniSync 指出固定 mask 可能存在 lip shape leakage 问题
后续影响
LatentSync 在 GitHub 上获得了近 6000 stars #latentsync-github,是 2024-2025 年开源唇形同步的质量天花板。它的影响体现在三个方向:
- 学术:OmniSync(NeurIPS 2025)#omnisync2025 以 LatentSync 为基线,将方法论迁移到 DiT 架构,在 HDTF 上 FID/FVD 再降 7.8%/8.0%
- 工程:ComfyUI 生态完整集成,Replicate 等平台提供 API,降低了使用门槛
- 实时方向:MuseTalk #zhang2024musetalk 等方法在实时性上互补,形成"质量选 LatentSync、速度选 MuseTalk"的格局
参考来源
- Prajwal, K. et al. (2020). Wav2Lip: A Lip Sync Expert Is All You Need. ACM Multimedia 2020. arXiv:2008.10010
- Chung, J.S. & Zisserman, A. (2017). Out of time: automated lip sync in the wild. ACCV 2016 Workshop.
- Rombach, R. et al. (2022). High-Resolution Image Synthesis with Latent Diffusion Models. CVPR 2022. arXiv:2112.10752
- Mukhopadhyay, A. et al. (2024). Diff2Lip: Audio-Conditioned Diffusion Models for Lip-Sync. 3DV 2024.
- Guo, H. et al. (2023). AnimateDiff: Animate Your Personalized Text-to-Image Diffusion. arXiv:2307.04725
- Radford, A. et al. (2023). Whisper: Robust Speech Recognition via Large-Scale Weak Supervision. ICML 2023.
- Wang, J. et al. (2023). VideoMAE V2: Scaling Video Masked Autoencoders with Dual Masking. NeurIPS 2023.
- Tian, Q. et al. (2024). EMO: Emote Portrait Alive. ICML 2024.
- Xu, M. et al. (2024). Hallo: Hierarchical Audio-Driven Visual Synthesis.
- Geirhos, R. et al. (2020). Shortcut Learning in Deep Neural Networks. Nature Machine Intelligence.
- Zhang, T. et al. (2024). MuseTalk. GitHub
- Cheng, Z. et al. (2022). VideoReTalking: Audio-based Lip Synchronization. SIGGRAPH Asia 2022.
- Guan, Z. et al. (2023). StyleSync.
- Zhong, M. et al. (2024). StyleSync (Diffusion).
- Yu, H. et al. (2024). MyTalk.
- Bigioi, A. et al. (2024). DrivenVideoEditing.
- Song, J. et al. (2020). DDIM. ICLR 2021.
- Zhang, R. et al. (2018). The Unreasonable Effectiveness of Deep Features. CVPR 2018.
- He, K. et al. (2016). Deep Residual Learning. CVPR 2016.
- Vaswani, A. et al. (2017). Attention Is All You Need. NeurIPS 2017.
- Chung, J.S. et al. (2018). VoxCeleb2. Interspeech 2018.
- Zhang, Z. et al. (2021). HDTF.
- Su, J. et al. (2020). HyperIQA. CVPR 2020.
- Bulat, A. & Tzimiropoulos, G. (2017). How far are we from solving the 2D & 3D Face Alignment problem?.
- Simonyan, K. & Zisserman, A. (2014). VGG. ICLR 2015.
- Arjovsky, M. et al. (2017). Wasserstein GAN. ICML 2017.
- Lugaresi, C. et al. (2019). MediaPipe.
- Gupta, K. et al. (2023). Towards high-fidelity lip sync.
- OmniSync (2025). OmniSync: Towards Universal Lip Sync. NeurIPS 2025.
- ByteDance. LatentSync GitHub Repository. github.com/bytedance/LatentSync