Wav2Lip 是一个开源的口型同步(Lip-sync)项目,对应论文《A Lip Sync Expert Is All You Need for Speech to Lip Generation In The Wild》,发表于 ACM Multimedia 2020。该仓库由 xiaoou2 维护,将原版代码从 Python 3.6 升级到 3.9,并更新了视觉质量判别器的权重。
用途
Wav2Lip 用于将任意视频与任意目标语音进行高精度口型同步。根据官方说明,它适用于任意人物身份、声音和语言,也适用于 CGI 面孔和合成语音。项目提供完整的训练代码、推理代码和预训练模型,并提供 Google Colab Notebook 快速上手。
主要能力
- 高精度口型同步:将视频口型与目标语音对齐。
- 支持多种输入:音频源可为 FFMPEG 支持的任意含音频数据文件,如 .wav、.mp3,甚至视频文件(代码会自动提取音频)。
- 提供预训练模型与检查点、样例,可在 Google Drive 文件夹获取。
- 提供评估基准与指标(repo 的 evaluation/ 文件夹),并给出论文中指标的计算说明。
- 提供训练与推理代码,支持在 LRS2 数据集上训练。
使用方式
环境准备:
- 安装 ffmpeg:sudo apt-get install ffmpeg
- 安装依赖:pip install -r requirements.txt;也可使用 docker 镜像(仓库提供说明)。
- 下载人脸检测预训练模型到 face_detection/detection/sfd/s3fd.pth。
推理(使用预训练模型进行口型同步):
- 可将任意视频与任意音频同步,结果默认保存在 results/result_voice.mp4,也可通过参数指定输出位置。
- 可用 --pads 参数调整检测到的人脸边界框,例如 --pads 0 20 0 0 增加底部填充以包含下巴区域,常能改善结果。
- 若出现嘴部位置错位或“两张嘴”等伪影,可能是人脸检测过度平滑,可使用 --nosmooth 参数重试。
- 可用 --resize_factor 参数获得更低分辨率视频;由于模型在较低分辨率人脸上训练,720p 视频有时比 1080p 效果更好(多数情况下 1080p 也可用)。
- 不带 GAN 的 Wav2Lip 模型通常需要更多实验来获得理想结果,有时也能给出更好结果。
训练:
- 训练数据准备:模型在 LRS2 上训练,需将 LRS2 文件列表(train、val、test 的 .txt 文件)放入 filelists/ 文件夹。
- 训练分两大步骤:(i) 训练专家口型同步判别器;(ii) 训练 Wav2Lip 模型。
- 可下载预训练权重跳过第一步。
- 训练可仅训练基础模型(不含额外视觉质量判别器,< 1 天)或加入判别器(约 2 天)。前者运行 wav2lip_train.py,后者运行 hq_wav2lip_train.py,两者参数类似,均支持恢复训练;可通过 python wav2lip_train.py --help 查看详情,也可在 hparams.py 底部设置较少用的超参数。
适用场景
适用于研究、学术和个人用途的视频口型同步实验,包括对任意人物、声音、语言以及 CGI 面孔和合成语音的同步。
限制
- 许可限制:本仓库仅可用于个人/研究/非商业用途。由于模型在 LRS2 数据集上训练,严禁任何形式的商业使用;商业请求需直接联系作者。作者提供托管 API(https://synclabs.so/)及改进的新口型同步模型。
- 非 LRS2 数据集训练:在其他数据集上训练可能需要修改代码。在少量单一说话人数据上训练/微调通常难以获得好结果(这是尚未解决的独立研究问题)。必须先在自有数据集上训练专家判别器,再训练 Wav2Lip。从网络下载的数据集多数需要同步校正。需注意数据集视频的 FPS,改变 FPS 需要大量代码改动。专家判别器的 eval loss 应降至约 0.25,Wav2Lip 的 eval sync loss 应降至约 0.2 才能获得好结果。
- 作者还提到有在允许商业使用的数据集上训练的 HD 模型,生成人脸尺寸为 192 x 288。
- 商业授权:仓库仅限个人/研究/非商业使用;商业请求请联系 rudrabha@synclabs.so 或 prajwal@synclabs.so。
致谢与引用
部分代码结构受某 TTS 仓库启发;人脸检测代码来自 face_alignment 仓库;并感谢 zabique 提供的教程 Colab Notebook。使用本仓库需引用原论文。