Wav2Lip:任意视频与语音精准唇形同步模型,离线推理、参数调节与训练评测非商用部署指南|部署与使用全指南
项目仓库: https://github.com/Rudrabha/Wav2Lip
开源协议:仅限个人 / 研究 / 非商业用途(模型基于 LRS2 数据集训练,任何形式商用严格禁止;商业需求联系作者或使用其商业版 Synclabs/Sync.so) · 开发语言:Python 3.6(原版锁定 PyTorch 1.1.0) · 交付形态:命令行离线推理脚本、数据集预处理脚本、专家判别器 / Wav2Lip / HQ-GAN 训练脚本、评测代码 · 无常驻服务端口(本地离线 CLI 推理) · 论文:arXiv:2008.10010(ACM Multimedia 2020) · 项目主页:CVIT IIIT Hyderabad 项目页
非官方声明:本文依据官方 README、
inference.py、requirements.txt、hparams.py源码与官方论文 / 项目页链接整理部署步骤,属于第三方学习部署指南,不是作者团队官方发布的运维文档。Wav2Lip 由 K R Prajwal、Rudrabha Mukhopadhyay、Vinay P. Namboodiri 与 C.V. Jawahar 在 ACM Multimedia 2020 发布;项目名称、论文与第三方模型名称归各自权利人所有。README 顶部介绍的 Sync.so 商业 API、SDK 与 Studio 属于独立商业服务,与本开源仓库不是同一授权主体。
1 项目简介
Wav2Lip 是论文 A Lip Sync Expert Is All You Need for Speech to Lip Generation In the Wild(ACM Multimedia 2020,DOI 10.1145/3394171.3413532)对应的开源代码与预训练模型仓库。任务是**唇形同步(lip-sync)**:给定一段包含人脸的视频(或一张静态人脸图像)与一段目标语音,模型检测人脸、提取音频特征并重新生成与语音对齐的嘴部区域,输出人物嘴型与目标语音一致的新视频。
方法核心是先训练一个"专家"唇形同步判别器(SyncNet,即 README 所称 expert lip-sync discriminator),再以该判别器的对齐约束训练 Wav2Lip 生成模型;仓库同时提供不带视觉质量判别器的基础版 Wav2Lip,与带视觉质量判别器的 Wav2Lip + GAN 两套预训练权重。README Highlights 称模型可适配任意身份、声音与语言,同样适用于 CGI 人脸与合成语音。
授权口径先行说明:README Disclaimer 明确,本开源代码与旧演示站点的所有结果只能用于研究 / 学术 / 个人目的;模型基于 LRS2 数据集 训练,任何形式的商业使用严格禁止;商业需求请直接联系作者(
rudrabha@synclabs.so、prajwal@synclabs.so),或使用作者团队提供的托管商业 API。
1.1 核心信息一览
| 项目项 | 内容 |
|---|---|
| 项目名称 | Wav2Lip |
| 仓库地址 | github.com/Rudrabha/Wav2Lip |
| 项目定位 | "野外"(in the wild)场景下的精准唇形同步视频生成模型与训练 / 推理 / 评测代码 |
| 论文 | arXiv:2008.10010,ACM Multimedia 2020,Seattle,WA,USA,MM '20,pp. 484–492 |
| 授权范围 | 个人 / 研究 / 非商业;商用禁止,须联系作者或使用商业服务 |
| 开发语言 / 框架 | Python 3.6、PyTorch 1.1.0、torchvision 0.3.0、librosa 0.7.0、NumPy
1.17.1(原版 requirements.txt 锁定) |
| 预训练权重 | Wav2Lip(高同步准确率);Wav2Lip + GAN(同步略逊、视觉质量更好);专家判别器权重可从权重渠道一并获取 |
| 人脸检测模型 | SFD(s3fd-619a316812.pth),放置于
face_detection/detection/sfd/s3fd.pth |
| 部署形态 | 本地命令行离线推理(inference.py);无官方
WebUI、无常驻服务端口、无官方 Dockerfile / Compose |
| 输入 | 含人脸的视频或静态图像(--face);FFmpeg
可解码的音频或含音频的视频(--audio) |
| 默认输出 | results/result_voice.mp4 |
| 模型人脸尺寸 | 原版 img_size=96;README 另述新模型生成人脸尺寸为
192×288(HD 商业模型口径) |
| 采样率 / 帧率 | 音频 16000Hz;默认输出帧率 25fps(静态图像模式 --fps
可调) |
| 官方评测 | 仓库 evaluation/
目录提供论文报告指标所需的评测基准与计算说明 |
1.2 适用场景
- 口播视频重配音:把已有真人 / 数字人口播视频的嘴型对齐到一段新的语音(外语配音、旁白替换、文案改写后的口型修正等研究与个人创作场景)。
- 静态照片说话:
--face传入 jpg / png / jpeg 图像时脚本自动进入静态模式,用单帧图像配合语音生成说话动画视频。 - CGI 与合成语音适配:README 口径模型同样适用于 CGI 人脸与合成语音,可作为虚拟形象研究链路中的嘴部对齐组件。
- 唇形同步研究基线:完整提供专家判别器训练、生成模型训练、LRS2
预处理与
evaluation/评测基准,供复现论文指标与二次研究使用。 - 多语言声音适配:README 称可适配任意身份、声音与语言;具体语言效果以实测与训练数据覆盖范围为准。
1.3 能力边界(官方口径)
- 非商用红线:开源模型基于 LRS2 训练,README 明确禁止任何形式的商业使用;开源仓库不含可商用的 HD 模型。README 提到存在一套在允许商用数据集上训练的 HD 模型(生成人脸 192×288),其获取与授权须走作者商业渠道。
- 单人脸前提:
inference.py在未检测到人脸的帧上会抛出Face not detected! Ensure the video contains a face in all the frames.错误;多人脸场景需先用--crop框定区域,或预先裁剪源视频。 - 训练数据与跨数据集限制:README 提示在单说话人几分钟的少量数据上微调 / 训练通常得不到好结果;训练自有数据集前必须先训练自己的专家判别器;网络下载的素材多数需要做音画同步校正;数据集 FPS 改变需要较大代码改动。
- 评测收敛参考值:专家判别器 eval loss 应降到约 0.25,Wav2Lip eval sync loss 应降到约 0.2 才能取得较好效果;这是 README 给出的训练参考口径,不是保证结果。
- 硬件与现代环境兼容性:
requirements.txt为 2020 年锁定版本(Python 3.6、torch 1.1.0、numpy 1.17.1、librosa 0.7.0、numba 0.48);在新版 Python、CUDA 与现代显卡上的依赖适配属于社区实践范畴,README 未给出新的官方兼容矩阵,以官方仓库最新说明为准。 - README 未公布逐场景硬性显存下限;本章不补充臆造数值,硬件余量以实际推理日志为准。
2 功能特性
2.1 任意身份、声音与语言的唇形对齐
README Highlights 称模型对任意身份、声音与语言均可获得高准确率唇形同步;推理链路先由 SFD 人脸检测器在帧上定位人脸,再由 Wav2Lip 生成器依据音频特征替换嘴部区域,最后把生成结果贴回原视频帧。
2.2 两套预训练权重,精度与画质取舍
| 权重 | 特点(README 口径) | 适用倾向 |
|---|---|---|
| Wav2Lip | 唇形同步准确率高(Highly accurate lip-sync) | 优先追求嘴型与语音对齐度 |
| Wav2Lip + GAN | 同步略逊,但视觉质量更好(slightly inferior lip-sync, better visual quality) | 优先追求面部画面自然度 |
README 提示:不带 GAN 的 Wav2Lip 通常需要更多地调整
--pads、--resize_factor
等参数才能得到理想结果,某些情况下反而可能取得更好的最终效果。
2.3 人脸检测与检测框平滑
- 基于 face_alignment
仓库提供的 SFD
检测模型(
LandmarksType._2D,flip_input=False)。 - 默认对短时窗(
T=5)内的检测框做平滑平均(get_smoothened_boxes);--nosmooth可关闭该平滑,用于解决嘴部错位或"两张嘴"等伪影。 --pads在检测框上下左右追加内边距,保证下巴区域纳入裁剪范围。
2.4 静态图像驱动与帧率控制
- 输入为图片时
inference.py自动置args.static=True,仅使用首帧做人脸参考。 - 静态图像模式可用
--fps指定输出帧率(默认 25.0);视频模式按源视频帧率处理。
2.5 批量推理与批次参数
--face_det_batch_size(默认 16)控制人脸检测批次;--wav2lip_batch_size(默认 128)控制 Wav2Lip 生成批次;- 显存不足时可调小批次,检测到 GPU 无法承载大图时源码会提示使用
--resize_factor。
2.6 画面预处理参数
--resize_factor:按系数降低分辨率再推理,README 提示模型训练于较低分辨率人脸,480p / 720p 视频有时比 1080p 得到更悦目的结果。--crop:在resize_factor与旋转之后把视频裁剪到更小区域(top, bottom, left, right),-1表示按高宽自动推断;多人脸场景实用。--box:指定固定人脸边界框(top, bottom, left, right),仅在人脸检测失败、且人脸移动不大时作为最后手段使用。--rotate:部分手机拍摄视频旋转 90° 时,加该参数把视频向右旋转 90° 后再处理。
2.7 完整训练与评测代码
- 数据预处理:
preprocess.py把 LRS2 视频切帧并抽取音频,加速后续训练。 - 专家判别器:
color_syncnet_train.py训练唇形同步专家判别器。 - Wav2Lip 基础版训练:
wav2lip_train.py在专家判别器约束下训练 Wav2Lip 模型(不带视觉质量判别器)。 - Wav2Lip + GAN
训练:
hq_wav2lip_train.py带视觉质量判别器训练;两个训练脚本参数相近,均支持断点续训。 - 评测基准:
evaluation/目录发布了若干更可靠的评测基准与指标,并给出论文报告指标的计算方法。 - 不常用超参数集中在
hparams.py文件底部,可按需调整。
2.8 多来源音频输入
README 说明音频源可以是任何 FFmpeg
支持的含音频文件:*.wav、*.mp3,甚至另一段视频文件——代码会自动从中抽取音频作为唇形驱动信号。
3 官方界面预览(省略)
开源仓库为命令行工具,未随附官方 WebUI、界面截图或宣传静态图;本指南不配图,也不以第三方截图冒充官方界面。官方提供的在线体验入口为商业 / 演示站点(见第 4 章),其队列、算力与素材规则由对应站点维护,不等同于本地开源部署。
4 官方跳转链接汇总
下表列出仓库 README 与论文页面给出的官方入口,均可直接点击访问;商业服务与开源仓库分列说明。
| 类别 | 链接 | 说明 |
|---|---|---|
| 开源仓库 | github.com/Rudrabha/Wav2Lip | 推理、预处理、训练、评测代码与说明 |
| 论文 PDF | arxiv.org/abs/2008.10010 | A Lip Sync Expert Is All You Need for Speech to Lip Generation In the Wild |
| 论文 DOI | doi.org/10.1145/3394171.3413532 | ACM Multimedia 2020 正式发表记录 |
| 项目主页 | CVIT 项目页 | 论文介绍与项目资源 |
| 演示视频 | youtu.be/0fXaDCZNOJc | 官方 Demo Video |
| 旧演示站点 | bhaasha.iiit.ac.in/lipsync | README Disclaimer 提及的旧在线演示 |
| 商业在线体验 | synclabs.so / sync.so | 作者团队商业站,非开源授权范围 |
| Colab 原始笔记 | Colab Notebook | 官方快速上手笔记本 |
| Colab 更新版 | Updated Colab Notebook | 教程向更新笔记本 |
| 易上手社区 Colab | j.mp/wav2lip | Eyal Gruss 提供的增强功能笔记本(社区产物) |
| 权重 Google Drive | Wav2Lip 权重目录 | Wav2Lip 高同步权重 |
| GAN 权重 | Wav2Lip + GAN 权重文件 | 视觉质量优先权重 |
| 权重与样本总目录 | Google Drive Checkpoints & Samples | README Highlights 提到的检查点与样本目录 |
| 人脸检测模型 | s3fd-619a316812.pth | 下载后放到 face_detection/detection/sfd/s3fd.pth |
| 检测模型备用链接 | IIIT 备用下载 | 主链接不可用时的备用地址 |
| 评测目录 | evaluation/ | 论文指标计算说明与基准 |
| Issues 反馈 | github.com/Rudrabha/Wav2Lip/issues | 官方问题跟踪区 |
| 致谢:deepvoice3_pytorch | github.com/r9y9/deepvoice3_pytorch | 部分代码结构受该仓库启发 |
| 致谢:face_alignment | github.com/1adrianb/face-alignment | 人脸检测代码来源 |
| 教程视频 | YouTube: What Make Art | 社区教程(README 致谢) |
README 商业版本章节中的
syncsdk、@sync.so/sdk、https://api.sync.so、模型lipsync-2、sync_mode="cut_off"等属于 Sync.so 商业 API 文档,使用前须在 sync.so/keys 申请 API Key 并遵守商业服务条款;本文第 6、7 章仅覆盖开源本地仓库。
5 前置要求与服务器配置
5.1 软件前提(官方 README 口径)
- Python 3.6:README Prerequisites 标注
Python 3.6;requirements.txt与之配套锁定旧版依赖。 - FFmpeg:
sudo apt-get install ffmpeg(README 写法);推理脚本通过 FFmpeg 解码视频、抽取音频并合成最终输出。 - Python
依赖:
pip install -r requirements.txt;README 同时提供一份社区 Docker 镜像参考(见 6.1 节末尾,非官方)。 - 人脸检测预训练模型:把 s3fd-619a316812.pth
下载到
face_detection/detection/sfd/s3fd.pth;主链接不可用时使用 README 给出的 IIIT 备用链接。
5.2
requirements.txt 原版锁定版本
| 依赖 | 锁定版本 | 备注 |
|---|---|---|
librosa |
0.7.0 |
音频加载与特征 |
numpy |
1.17.1 |
数值计算 |
opencv-contrib-python |
>=4.2.0.34 |
视频帧读写与图像处理 |
opencv-python |
4.1.0.25 |
OpenCV 主包 |
torch |
1.1.0 |
原版 PyTorch 锁定 |
torchvision |
0.3.0 |
图像模型配套 |
tqdm |
4.45.0 |
进度条 |
numba |
0.48 |
JIT 加速 |
上表为仓库
requirements.txt原文锁定值。这些版本对应 2020 年环境;在新版 Python(3.8+)、CUDA 11/12 与现代显卡上直接安装旧轮子可能失败。如何适配新环境属于社区实践(Issues 与第三方 Colab 中有大量讨论),README 未发布新的官方兼容矩阵;现代环境的依赖组合以官方仓库最新说明与经核验的社区实践为准,不要把本文未核验的版本号当作官方要求。
5.3 硬件与系统建议
| 项目 | 说明 |
|---|---|
| 操作系统 | README 示例面向
Ubuntu(sudo apt-get install ffmpeg);本地 CLI 推理在
Linux 上最顺,Windows / macOS 可按 Python + FFmpeg
路径尝试,依赖兼容性需自行核验 |
| GPU | 推理与训练使用 PyTorch;README
未公布硬性显存下限,face_det_batch_size 与
wav2lip_batch_size 可按显存下调;检测到 GPU
无法承载大图时按提示加 --resize_factor |
| CPU | 可在 CPU 上运行小规模调试,但速度明显下降;README 未承诺 CPU 推理性能 |
| 磁盘 | 需容纳两套权重、检测模型、results/
输出、训练数据集与预处理产物;训练场景另需 LRS2 原始数据与
lrs2_preprocessed/ 目录空间 |
| 网络 | 权重通过 Google Drive 获取;人脸检测模型来自作者个人站点 / IIIT 备用链接;国内网络访问受限可使用可信镜像或代理,不要把未核验的第三方权重冒认为官方版本 |
5.4 端口与服务形态
Wav2Lip 开源仓库不提供常驻网络服务:没有官方 WebUI、没有 HTTP/gRPC 服务端、没有默认端口。推理是一次性命令行进程,结束后释放显存;第 6 章所有命令均为本地离线执行。若需要在线接口形态,须由部署方自行封装 Flask/FastAPI 等外层服务,并自行承担鉴权、队列与合规责任。
6 方式一:官方本地环境与命令行推理(无官方 Docker 如实说明)
容器化现状(如实说明):仓库根目录不存在官方
Dockerfile,也不存在docker-compose.yml;本章不编造 Compose 文件。官方面向普通用户的路径是本地 Python 环境 +inference.py命令行。README 仅在 Prerequisites 中引用一份社区维护的 Docker 镜像 gist(xenogenesi/e62d3d13dadbc164124c830e9c453668),并指向 Issues #131 的评论区;该 gist 为非官方社区方案,不在官方授权与维护范围内,遇到问题应查阅 gist 与 Issues 评论,不代表官方部署方式。
6.1 克隆仓库并安装依赖
git clone https://github.com/Rudrabha/Wav2Lip.git
cd Wav2Lip
# 按 5.1 节先安装 FFmpeg(Ubuntu 示例)
sudo apt-get install ffmpeg
# 建议在独立虚拟环境中安装(README 原始口径为 Python 3.6)
pip install -r requirements.txt下载人脸检测模型到指定路径:
# 主链接(adrianbulat.com)
mkdir -p face_detection/detection/sfd
# 浏览器或下载工具把 s3fd-619a316812.pth 保存为:
# face_detection/detection/sfd/s3fd.pth主链接不可用时,使用 README 给出的 IIIT 备用链接下载,落盘路径保持不变。
6.2 下载预训练权重
| 权重 | 来源 | 落盘建议 |
|---|---|---|
| Wav2Lip | Google Drive 目录 | 放入 checkpoints/wav2lip.pth(路径按推理命令
--checkpoint_path 指定) |
| Wav2Lip + GAN | Google Drive 文件 | 放入 checkpoints/wav2lip_gan.pth(路径按
--checkpoint_path 指定) |
| 专家判别器 | 权重目录内随附(跳过自训练时使用) | 训练 wav2lip_train.py 时通过
--syncnet_checkpoint_path 指向 |
README 未在仓库内固化权重目录名;
--checkpoint_path直接指向.pth文件即可,目录结构以本地习惯为准,注意不要把权重提交到公开仓库。
6.3 执行第一次唇形同步推理
官方最简命令(README 原文):
python inference.py \
--checkpoint_path <ckpt> \
--face <video.mp4> \
--audio <an-audio-source>示例化写法:
# 视频 + WAV 音频,使用 Wav2Lip 高同步权重
python inference.py \
--checkpoint_path checkpoints/wav2lip.pth \
--face inputs/portrait.mp4 \
--audio inputs/voice.wav \
--outfile results/result_voice.mp4
# 视频 + MP3 音频
python inference.py \
--checkpoint_path checkpoints/wav2lip_gan.pth \
--face inputs/portrait.mp4 \
--audio inputs/voice.mp3
# 音频源直接用另一段视频(自动抽取音轨)
python inference.py \
--checkpoint_path checkpoints/wav2lip.pth \
--face inputs/portrait.mp4 \
--audio inputs/source_voice.mp4结果默认保存到
results/result_voice.mp4;--outfile
可指定其他输出路径。
6.4 静态图片驱动
python inference.py \
--checkpoint_path checkpoints/wav2lip.pth \
--face inputs/photo.jpg \
--audio inputs/voice.wav \
--fps 25 \
--outfile results/photo_talk.mp4inference.py 判断 --face 后缀为
jpg / png / jpeg
时自动置静态模式;--fps 仅在静态图像输入时生效,默认
25.0。
6.5 官方推荐的调参技巧(README Tips 原文口径)
- 调整检测框内边距:尝试
--pads改善结果;通常需要加大底部内边距把下巴纳入裁剪范围,例如--pads 0 20 0 0(上、下、左、右顺序)。 - 嘴部错位 /
两张嘴:若嘴部位置错位或出现"两张嘴"等怪异伪影,多因检测框过度平滑导致,使用
--nosmooth关闭短时窗平滑后重试。 - 降低分辨率:尝试
--resize_factor得到低分辨率视频;模型训练于较低分辨率人脸,720p 视频有时比 1080p 得到更悦目的结果。 - 基础版权重更需调参:不带 GAN 的 Wav2Lip 通常需要更多地试验上述两个参数才能取得理想结果;某些情况下基础版反而可能得到更好的最终效果。
6.6 社区 Docker 镜像(非官方备选,仅单列说明)
README Prerequisites 提供的 Docker 参考地址为 gist.github.com/xenogenesi/e62d3d13dadbc164124c830e9c453668,并建议遇到问题时查阅 Issues #131 评论。该方案由社区维护,镜像基础、Python 版本、依赖组合与权重下载方式均与官方源码环境不同:
- 官方仓库不保证社区镜像的可用性、兼容性与安全性;
- 把开源模型用于镜像内部署仍受第 11 章非商用授权约束;
- 生产或对外服务前应自行审计镜像来源、依赖漏洞与权重完整性。
7 方式二:源码训练、预处理与二次开发
本章面向复现论文、在自有数据上研究训练的场景;普通离线口型对齐只需要第 6 章推理流程。训练依赖 LRS2 数据集与较长 GPU 训练时间,README 对跨数据集训练有明确限制提示(见 7.5 节)。
7.1 准备 LRS2 数据集目录结构
README 给出的 LRS2 目录结构:
data_root (mvlrs_v1)
├── main, pretrain(本工作只使用 main 文件夹)
│ ├── 一组文件夹
│ │ ├── 五位数字编号、以 (.mp4) 结尾的视频 ID把 LRS2 的 train、val、test 文件清单(.txt)放入仓库
filelists/ 目录。
7.2 预处理数据集加速训练
python preprocess.py \
--data_root data_root/main \
--preprocessed_root lrs2_preprocessed/README 说明可通过附加参数设置 batch_size 与并行使用的
GPU 数量。预处理后的目录结构:
preprocessed_root (lrs2_preprocessed)
├── 一组文件夹
│ ├── 五位数字编号视频 ID 对应的文件夹
│ │ ├── *.jpg
│ │ ├── audio.wav7.3 训练专家唇形同步判别器(第一步)
python color_syncnet_train.py \
--data_root lrs2_preprocessed/ \
--checkpoint_dir <folder_to_save_checkpoints>想跳过这一步时,可直接使用第 6.2
节权重渠道中的预训练专家判别器。README 给出的训练参考:专家判别器 eval
loss 应降到约 0.25。
7.4 训练 Wav2Lip 生成模型(第二步)
不带视觉质量判别器(README 口径:训练不到 1 天):
python wav2lip_train.py \
--data_root lrs2_preprocessed/ \
--checkpoint_dir <folder_to_save_checkpoints> \
--syncnet_checkpoint_path <path_to_expert_disc_checkpoint>带视觉质量判别器(README 口径:约 2 天,即 Wav2Lip + GAN 路径):
python hq_wav2lip_train.py \
--data_root lrs2_preprocessed/ \
--checkpoint_dir <folder_to_save_checkpoints> \
--syncnet_checkpoint_path <path_to_expert_disc_checkpoint>两个训练脚本参数相近,均支持断点续训;更多参数查看
python wav2lip_train.py --help;不常用超参数集中在
hparams.py 文件底部。README 参考口径:Wav2Lip eval sync
loss 应降到约 0.2 才能取得较好结果。
7.5 在 LRS2 以外数据集上训练(README 限制提示)
README "Training on datasets other than LRS2" 明确:
- 在几分钟单说话人数据上训练 / 微调通常得不到好结果,这是独立的研究问题,官方暂无解决方案;
- 在自有数据集上训练前,必须先为该数据集训练自己的专家判别器;
- 网络下载的自有数据集多数情况下需要先做音画同步校正;
- 需要留意数据集 FPS;改变 FPS 会带来较大代码改动;
- 提 issue 讨论此类问题时,README 要求先确认已了解上述各点。
7.6 评测
按 evaluation/
目录内说明计算论文报告的唇形同步指标与视频质量指标;README Highlights
称该目录发布了若干更可靠的评测基准与指标,以及论文指标的计算说明。评测口径、脚本依赖与数据格式以
evaluation/ 目录内最新文档为准。
8 配置项说明
8.1
inference.py 命令行参数(源码 argparse
口径)
| 参数 | 类型 / 默认值 | 是否必填 | 说明 |
|---|---|---|---|
--checkpoint_path |
str,无默认 |
是 | 加载的模型检查点路径(Wav2Lip 或 Wav2Lip + GAN 的
.pth) |
--face |
str,无默认 |
是 | 含人脸的视频或图像文件路径 |
--audio |
str,无默认 |
是 | 作为原始音频源的视频 / 音频文件路径,FFmpeg 解码 |
--outfile |
str,默认 results/result_voice.mp4 |
否 | 结果视频保存路径 |
--static |
bool,默认 False |
否 | 为 True 时仅使用视频第一帧推理;传入图片时脚本自动置
True |
--fps |
float,默认 25. |
否 | 仅静态图像输入可指定;输出帧率 |
--pads |
int 列表,默认 [0, 10, 0, 0] |
否 | 检测框内边距(上、下、左、右),至少保证下巴纳入 |
--face_det_batch_size |
int,默认 16 |
否 | 人脸检测批次大小 |
--wav2lip_batch_size |
int,默认 128 |
否 | Wav2Lip 模型批次大小 |
--resize_factor |
int,默认 1 |
否 | 按系数降低分辨率;480p / 720p 有时效果更好 |
--crop |
int 列表,默认 [0, -1, 0, -1] |
否 | 裁剪区域(上、下、左、右),在 resize
与旋转之后生效;-1 按高宽自动推断;多人脸时使用 |
--box |
int 列表,默认 [-1, -1, -1, -1] |
否 | 固定人脸边界框(上、下、左、右);检测失败且人脸移动不大时作为最后手段 |
--rotate |
store_true,默认 False |
否 | 手机竖屏翻转 90° 时向右旋转 90° 再处理 |
--nosmooth |
store_true,默认 False |
否 | 关闭短时窗人脸检测框平滑 |
源码内 args.img_size = 96(推理人脸裁剪尺寸,与
hparams.py 的 img_size=96 一致)。
8.2 hparams.py
关键超参数
| 字段 | 默认值 | 说明 |
|---|---|---|
num_mels |
80 |
Mel 频谱通道数与局部条件维度 |
sample_rate |
16000 |
音频采样率 |
n_fft |
800 |
FFT 窗口大小(补零对齐该参数) |
hop_size |
200 |
16000Hz 下对应 12.5ms |
win_size |
800 |
16000Hz 下对应 50ms |
rescale / rescaling_max |
True / 0.9 |
预处理前是否重缩放及重缩放值 |
signal_normalization |
True |
是否把 Mel 归一化到预设范围 |
symmetric_mels / max_abs_value |
True / 4. |
是否围绕 0 对称缩放及最大绝对值 |
preemphasize / preemphasis |
True / 0.97 |
频谱预加重滤波开关与系数 |
min_level_db / ref_level_db |
-100 / 20 |
分贝下限与参考电平 |
fmin / fmax |
55 / 7600 |
频谱频率下限 / 上限(备注:男性可保持 55,女性噪声抑制可用 95) |
img_size |
96 |
训练人脸尺寸 |
fps |
25 |
训练帧率 |
batch_size |
16 |
训练批次 |
initial_learning_rate |
1e-4 |
初始学习率 |
num_workers |
16 |
数据加载并行数 |
checkpoint_interval / eval_interval |
3000 |
保存检查点 / 评测间隔(步数) |
save_optimizer_state |
True |
是否保存优化器状态(断点续训需要) |
syncnet_wt |
0.0 |
初始为 0,后续自动置 0.03,加快收敛 |
syncnet_batch_size |
64 |
专家判别器批次 |
syncnet_lr |
1e-4 |
专家判别器学习率 |
syncnet_eval_interval /
syncnet_checkpoint_interval |
10000 |
判别器评测 / 保存间隔 |
disc_wt |
0.07 |
视觉质量判别器权重 |
disc_initial_learning_rate |
1e-4 |
判别器初始学习率 |
8.3 训练脚本参数对照
| 脚本 | 关键参数 | 用途 |
|---|---|---|
preprocess.py |
--data_root、--preprocessed_root,附加
batch_size、GPU 数量 |
LRS2 视频切帧与音频抽取 |
color_syncnet_train.py |
--data_root、--checkpoint_dir |
训练专家唇形同步判别器 |
wav2lip_train.py |
--data_root、--checkpoint_dir、--syncnet_checkpoint_path |
训练 Wav2Lip 基础版(无视觉质量判别器) |
hq_wav2lip_train.py |
与上者相近 | 训练带视觉质量判别器的 HQ / GAN 版本;支持续训 |
8.4 权重与模型文件位置核对表
| 文件 | 期望位置 / 引用方式 |
|---|---|
人脸检测 s3fd.pth |
face_detection/detection/sfd/s3fd.pth(固定路径) |
| Wav2Lip 权重 | --checkpoint_path 指向 .pth 文件 |
| Wav2Lip + GAN 权重 | --checkpoint_path 指向 .pth 文件 |
| 专家判别器权重 | wav2lip_train.py / hq_wav2lip_train.py 的
--syncnet_checkpoint_path |
| 训练检查点目录 | --checkpoint_dir 指定;配合
save_optimizer_state=True 续训 |
| 输出视频 | 默认 results/result_voice.mp4,--outfile
可改 |
| 故障帧临时图 | 检测失败时写入
temp/faulty_frame.jpg,用于定位问题帧 |
9 常用运维命令
# ---- 环境进入(按本地虚拟环境方式)----
# conda activate wav2lip # 或 source venv/bin/activate
# ---- 依赖核对 ----
pip install -r requirements.txt
ffmpeg -version
# ---- 权重与检测模型核对 ----
ls face_detection/detection/sfd/s3fd.pth
ls checkpoints/*.pth
# ---- 离线推理 ----
python inference.py --checkpoint_path checkpoints/wav2lip.pth \
--face inputs/portrait.mp4 --audio inputs/voice.wav
python inference.py --checkpoint_path checkpoints/wav2lip_gan.pth \
--face inputs/photo.jpg --audio inputs/voice.mp3 --fps 25
python inference.py --help
# ---- 调参常用组合 ----
python inference.py --checkpoint_path checkpoints/wav2lip.pth \
--face inputs/portrait.mp4 --audio inputs/voice.wav \
--pads 0 20 0 0 --nosmooth --resize_factor 2
# ---- 训练流程 ----
python preprocess.py --data_root data_root/main --preprocessed_root lrs2_preprocessed/
python color_syncnet_train.py --data_root lrs2_preprocessed/ --checkpoint_dir checkpoints/syncnet
python wav2lip_train.py --data_root lrs2_preprocessed/ --checkpoint_dir checkpoints/wav2lip \
--syncnet_checkpoint_path checkpoints/syncnet/xxx.pth
# ---- 产物与临时文件 ----
ls results/
ls temp/更新代码用
git pull;权重、参考素材与输出视频不要提交到公开仓库;训练检查点目录定期备份
--checkpoint_dir 与优化器状态;temp/
内为调试临时帧,排查完毕可清理。推理进程结束后显存自动释放,不存在常驻服务需要
stop / restart。
10 常见故障排查
10.1 FFmpeg 未安装或不在 PATH
现象:视频解码、音频抽取或最终封装阶段报错,提示找不到 FFmpeg 相关工具。
处理:按系统安装 FFmpeg 并确认
ffmpeg -version 可执行;Ubuntu 参照
sudo apt-get install ffmpeg,其他系统参考
assets/docs 同级社区安装说明。音频文件必须是 FFmpeg
可解码格式;损坏或加密的媒体文件先转码为标准 wav / mp3 再试。
10.2 人脸检测模型缺失
现象:启动即报错,指向
face_detection/detection/sfd/s3fd.pth 加载失败。
处理:确认权重已按固定路径落盘;主链接不可用时换
README IIIT 备用链接;文件名必须为
s3fd.pth,不要保留下载文件名
s3fd-619a316812.pth。
10.3 Face not detected!
错误
现象:推理中途抛出
Face not detected! Ensure the video contains a face in all the frames.,并在
temp/faulty_frame.jpg 留下问题帧。
处理:
- 先打开
temp/faulty_frame.jpg确认该帧是否真的无人脸、侧脸、遮挡或过暗; - 调大
--pads(如--pads 0 20 0 0)让检测框包含下巴与完整脸颊; - 多人脸视频用
--crop框定目标人脸所在区域; - 检测持续失败且人脸移动不大时,最后手段使用
--box指定固定边界框; - 视频光线昏暗、人脸过小或大幅侧脸时,先在源素材上改善光照与构图。
10.4 嘴部错位、两张嘴或面部伪影
现象:生成视频中嘴部位置偏移、出现重复嘴型或融合异常。
处理:按 README Tips 使用 --nosmooth
关闭检测框短时窗平滑;微调 --pads
下内边距;仍不理想时切换另一套权重对比(基础版与 GAN
版表现倾向不同)。
10.5 高分辨率视频效果差或显存不足
现象:1080p 视频伪影明显,或检测阶段 GPU 提示图片过大。
处理:
python inference.py --checkpoint_path checkpoints/wav2lip.pth \
--face inputs/portrait.mp4 --audio inputs/voice.wav \
--resize_factor 2resize_factor 大于 1 先降低分辨率再推理;同时按显存下调
--face_det_batch_size 与
--wav2lip_batch_size。
10.6 输出视频方向颠倒 / 横躺
现象:手机竖屏拍摄素材经推理后人脸方向异常。
处理:加 --rotate 参数把视频向右旋转
90° 后再检测;若方向仍不对,先用 FFmpeg
预处理源视频为标准横向画面,再走推理流程。
10.7 新版 Python / CUDA 下旧依赖装不上
现象:pip install -r requirements.txt
时
torch==1.1.0、numpy==1.17.1、librosa==0.7.0、numba==0.48
找不到适配轮子或运行时报 ABI / 版本错误。
处理:
- 优先在 README 原始口径的 Python 3.6 独立环境中复现官方流程;
- 需要新环境运行时,参考 Issues 与社区 Colab 中经核验的依赖组合调整
torch、numpy、librosa、numba、opencv-python版本;本文未核验具体新版本号,以官方仓库最新说明与社区已验证方案为准; - 不要把未经验证的版本锁定写进对外发布的部署文档。
10.8 音频抽不出来或时长不匹配
现象:--audio
指向视频时抽取出空音频;或输出视频时长与音频不一致。
处理:确认源音频 / 视频可被 FFmpeg 正常解码(先用
ffprobe 查看流信息);素材损坏时先转码为标准
wav;语音过短、过长或首尾静音异常时,先在音频编辑工具中裁剪到目标片段。
10.9 多人脸画面只处理了错误的人
现象:画面中多人脸,模型裁剪或替换了非目标人物的嘴部。
处理:用 --crop top bottom left right
在检测前框定目标人脸区域;必要时预先用视频编辑工具裁出单人镜头;--box
仅在人脸基本静止时作为固定框使用。
10.10 训练不收敛 / 评测 loss 偏高
现象:专家判别器或 Wav2Lip 的 eval loss 长期高于 README 参考值(判别器约 0.25、Wav2Lip 同步损失约 0.2)。
处理:核对预处理是否完成、文件清单是否放入
filelists/、音频采样率与帧尺寸是否符合
hparams.py;跨数据集训练先完成自身专家判别器训练并做音画同步校正;单说话人少量数据训练属于已知限制,不要期望复现官方效果。
10.11 权重下载中断或校验异常
现象:Google Drive 下载中断、文件半截,加载权重时报尺寸 / 维度错误。
处理:删除损坏的 .pth
重新下载;核对权重文件名与 --checkpoint_path 一致;基础版与
GAN 版权重不要混用;不要从非官方渠道下载来源不明的"破解版 /
商用版"权重。
11 风险与合规说明
以下条款整理自官方 README Disclaimer、License and Citation 章节与论文引用信息;如与官方原文不一致,以仓库 README、
evaluation/说明与作者最新公告为准。
11.1 开源授权与商业使用限制
- README License 章节明确:本仓库只能用于个人 / 研究 /
非商业用途;商业使用需求直接联系作者
rudrabha@synclabs.so或prajwal@synclabs.so。 - 模型基于 LRS2 数据集 训练,README Disclaimer 据此声明任何形式的商业使用严格禁止;本地训练的 Wav2Lip 模型同样受代码与数据授权约束,不能视为自动获得商用权利。
- README 提及的 HD 模型在允许商用的数据集上训练、生成人脸尺寸 192×288;该模型不包含在开源仓库内,商用获取须走作者商业渠道。
- 代码结构部分受 deepvoice3_pytorch 启发,人脸检测代码取自 face_alignment;二次分发时需保留对应第三方组件的许可与署名声明。
11.2 商业 API 与开源仓库的边界
- README 顶部 Sync.so 商业版本章节(
syncsdk/@sync.so/sdk、api.sync.so、lipsync-2模型、sync_mode="cut_off"、Studio)是独立的付费托管服务,有独立的 API Key、计费、服务条款与内容审核规则;其授权状态、模型质量与 SLA 均不由本开源仓库背书。 - 把开源 Wav2Lip 封装成对外付费网站、API、SaaS 或嵌入商业产品,不属于 README 允许的个人 / 研究 / 非商业范围;如需商用替代方案,应评估作者商业 API 或其他已获商用授权的模型。
11.3 肖像权、声音权与深度伪造合规
- 唇形同步本质是修改他人 / 本人面部运动与语音匹配结果:只能使用本人肖像,或已取得肖像权人、声音权人明确书面授权的素材;不得未经授权对公众人物、陌生人的视频做换嘴配音或伪造发言。
- 禁止把生成内容用于冒充真人身份、电信诈骗、虚假新闻、伪造证词、恶意诋毁、色情 / 暴力内容传播或其他违反法律法规与公序良俗的深度伪造场景。
- 对外发布 AI 生成的人物视频时,应按当地法规与平台规则标注 AI 合成属性;保留原始素材、授权记录、音频来源与处理日志以备核查。
11.4 数据隐私与素材管理
- 本地推理默认不上传视频与音频;若部署方在此基础上搭建在线服务并保存上传素材、日志或人工复核样本,须自行依法发布隐私政策、取得用户同意并落实访问控制、加密与留存期限管理。
- 参考视频、目标语音、检查点与输出文件属于敏感素材,应限制目录权限,不要提交到公开仓库、公开数据集或不可信第三方服务器;Google Drive 等权重链接仅限下载官方授权模型。
11.5 评测署名与论文引用
- 使用本仓库或复现论文结果时,按 README 引用如下文献(ACM Multimedia 2020,DOI 10.1145/3394171.3413532):
@inproceedings{10.1145/3394171.3413532,
author = {Prajwal, K R and Mukhopadhyay, Rudrabha and Namboodiri, Vinay P. and Jawahar, C.V.},
title = {A Lip Sync Expert Is All You Need for Speech to Lip Generation In the Wild},
year = {2020},
isbn = {9781450379885},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3394171.3413532},
doi = {10.1145/3394171.3413532},
booktitle = {Proceedings of the 28th ACM International Conference on Multimedia},
pages = {484–492},
numpages = {9},
keywords = {lip sync, talking face generation, video generation},
location = {Seattle, WA, USA},
series = {MM '20}
}11.6 免责声明
- README Disclaimer 口径:开源代码与旧演示站点的所有结果只能用于研究 / 学术 / 个人目的;官方不对用户生成结果的使用承担法律责任。
- 本指南依据官方
README、
inference.py、requirements.txt、hparams.py与论文页面整理;命令、参数、默认值、权重链接与训练参考值均来自上述官方材料;现代 Python / CUDA 环境的依赖适配、第三方 Colab 与社区 Docker 方案不属于官方承诺范围。 - 项目按现状(AS-IS)提供,不保证在所有素材、语言、分辨率与硬件组合下达到演示效果;使用者自行承担内容合规、肖像 / 声音授权、服务中断与业务损失风险,法律不得排除或限制的责任除外。