Loading...

文章背景图

Wav2Lip:任意视频与语音精准唇形同步模型,离线推理、参数调节与训练评测非商用部署指南|部署与使用全指南

2026-10-26
0
- 字
- 分钟
|

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.mp4

inference.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.wav

7.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 2

resize_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)提供,不保证在所有素材、语言、分辨率与硬件组合下达到演示效果;使用者自行承担内容合规、肖像 / 声音授权、服务中断与业务损失风险,法律不得排除或限制的责任除外。
评论交流

文章目录