Wav2Lip---嘴型同步模型Wav2Lip

该博客介绍了如何使用Wav2Lip模型将音频与视频唇形同步。该模型基于ACMMM2020的论文,能将任意人物视频与目标音频匹配。提供了在Ubuntu 18.04系统上,使用nvidia GeForce 3090Ti,CUDA 11.4和Python 3.7环境的详细步骤,包括安装依赖、下载模型、准备素材及运行代码。还解决了可能出现的错误和提供了资源下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

嘴型同步模型Wav2Lip

软硬件环境是

  • ubuntu 18.04 64bit

  • nvidia GeForce 3090Ti

  • cuda 11.4

  • anaconda with python 3.7

简介

2020年,来自印度海德拉巴大学和英国巴斯大学的团队,在ACM MM2020发表了的一篇论文《A Lip Sync Expert Is All You Need for Speech to Lip Generation In The Wild 》,在文章中,他们提出一个叫做Wav2Lip的AI模型,只需要一段人物视频和一段目标语音,就能够让音频和视频合二为一,人物嘴型与音频完全匹配。

快速体验

可以先到作者提供的体验站体验一番,地址是:https://bhaasha.iiit.ac.in/lipsync/example3/
在这里插入图片描述
wav2lip
按照上图中的选择视频和音频上传即可同步。

实践

准备环境

首先使用conda创建新的虚拟环境,然后激活这个环境

conda create -n py_video python=3.7
conda activate py_video

接着来到官方网站,使用git克隆代码,或者直接下载源码压缩包解压,安装依赖

git clone https://github.com/Rudrabha/Wav2Lip.git
pip install -r requirements.txt

在windows平台上,使用了阿里云的pip源,发现找不到torch 1.1的版本,
后来使用了最新稳定版1.11也没有问题,其它依赖库使用最新版也是ok的。

接下来需要安装ffmpeg,这是音视频处理的神器,ubuntu版本使用apt安装

sudo apt install ffmpeg

windows用户的话,可以到 https://github.com/BtbN/FFmpeg-Builds/releases 下载,解压后将bin对应的路径添加到系统环境变量PATH中。

准备素材

下面开始准备素材,我们把官方体验站上的测试视频下载下来,使用下面的命令

wget --no-check-certificate https://bhaasha.iiit.ac.in/lipsync/static/samples/game.mp4

这个测试视频只有 3秒,那接下来就去找个对应 3秒 的音频。如果能有现成的音频文件最好,如果没有的话,我的做法是这样的,从某个视频文件中提取音频,然后进行裁剪,这里需要的时长是三秒。这两步会使用到ffmpeg这个工具

视频裁剪,从第15秒开始,总时长是3秒,目标视频的音视频编码格式与原始的保持一致

ffmpeg -ss 00:00:15 -t 00:00:03 -i input.mp4 -vcodec copy -acodec copy test.mp4

从视频中提取音频

ffmpeg -i test.mp4 -vn test.mp3

准备模型文件

第一个需要的模型是脸部检测预训练模型,下载地址是:
https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth,
下载后放到目录 face_detection/detection/sfd 中,并重命名为s3fd.pth。

脸部模型:接下来去下载模型文件,这里作者提供了3个,可以任选一个,后两个优于第一个。

它们的区别如下表所示,本文使用的是Wav2Lip + GAN,下载地址:
https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/EdjI7bZlgApMqsVoEUUXpLsBxqXbn5z8VTmoxp55YNDcIA?e=n9ljGW ,

下载后放在项目 根目录

wav2lip

运行代码

执行下面的命令将视频 test.mp4 和音频 test.mp3 进行合成

python inference.py --checkpoint_path wav2lip_gan.pth --face test.mp4 --audio test.mp3

执行下面的命令将图片1.jpg 和音频 test.mp3 进行合成

python inference.py --checkpoint_path wav2lip_gan.pth --face 1.jpg --audio test.mp3

最后,生成的新视频文件保存在 results/result_voice.mp4 ,生成的中间文件存放在 temp 下,像单独处理后的音频temp.wav、视频 result.avi 等。

在这里插入图片描述

FAQ

ValueError: Face not detected! Ensure the video contains a face in all the frames.

这个一般是由于片头或者片尾没有脸,解决方法也很简单,使用ffmpeg或者剪辑软件,将片头或片尾相应的帧剪掉就可以了

备注
项目作者强调,基于此开放源代码的所有结果仅应用于学术研究和个人目的,由于模型是基于LRS2 (Lip Reading Sentences 2) 数据集进行训练,因此严禁任何形式的商业用途。

资源下载
打包了文中所使用的模型文件,下载地址:

链接:https://pan.baidu.com/s/1uaOC3PEFRvTuC5Xwbj1KUw
提取码:t9pg

参考资料

http://arxiv.org/abs/2008.10010

https://github.com/Rudrabha/Wav2Lip

http://bhaasha.iiit.ac.in/lipsync/

https://github.com/1adrianb/face-alignment

https://xugaoxiang.com/2020/09/29/ffmpeg-cmd/

### Wav2LipWav2Lip-GAN在唇同步技术中的对比及其实现细节 #### 技术背景 音频驱动的面部动画生成是一个重要的研究领域,其中唇形同步(lip-syncing)尤为关键。这项技术旨在通过输入一段语音来精确控制虚拟角色或真实人物视频中口的动作,使其看起来仿佛正在说出这段话。 #### Wav2Lip概述 Wav2Lip是一种基于深度学习的方法,用于创建高质量的个性化说话头像。该模型能够接收任意人的静止图像和对应的音频片段作为输入,并输出一个逼真的、能跟随给定声音变化而移动巴的人脸视频序列[^1]。 #### Wav2Lip-GAN介绍 相较于原始版本,Wav2Lip-GAN引入了对抗网络框架以改进生成效果。具体来说,它利用判别器区分真假样本的能力来指导生成器更好地捕捉细微的表情转换规律,进而提高最终合成结果的真实度。此外,GAN机制还可以帮助缓解过拟合现象并增强泛化能力。 #### 主要区别 - **架构复杂度**: GAN结构增加了系统的整体复杂性和计算成本;然而也带来了更优秀的视觉质量和鲁棒性。 - **训练难度**: 使用标准监督信号训练Wav2Lip相对简单直接;而在加入对抗损失项之后,则需要精心调整超参数才能达到理想状态。 - **数据需求量**: 对抗式学习通常要求更大规模的数据集来进行有效的权衡探索空间内的潜在分布特性。 #### 实现要点 对于两个版本而言,核心组件均涉及以下几个方面: - **预处理阶段** - 音频特征提取:采用梅尔频率倒谱系数(MFCCs)或其他形式表示法; - 图像帧准备:对面部区域进行裁剪并对齐以便后续操作。 - **主干网络构建** ```python import torch.nn as nn class Generator(nn.Module): def __init__(self): super(Generator, self).__init__() # 定义编码解码层... def forward(self,x,audio_features): # 前向传播逻辑... if use_gan: class Discriminator(nn.Module): def __init__(self): super(Discriminator,self).__init__() # 构建鉴别模块... def forward(self,img_sequence): # 判别过程定义... ``` - **优化策略制定** - 设计适合各自目标函数的形式; - 调整权重衰减率等正则化手段防止过度拟合。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心惠天意

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值