软硬件环境是
ubuntu 18.04 64bit
nvidia gtx 1070Ti
cuda 11
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/
按照上图中的选择视频和音频上传即可同步。
实践
准备环境
首先使用conda
创建新的虚拟环境,然后激活这个环境
conda create -n lip python=3.7
conda activate lip
接着来到官方网站,使用git
克隆代码,或者直接下载源码压缩包解压,安装依赖
git clone https://github.com/Rudrabha/Wav2Lip.git
pip install -r requirements.txt
在windows
平台上,使用了阿里云的pip
源,发现找不到torch 1.1
的版本,后来使用了最新稳定版1.7也没有问题,其它依赖库使用最新版也是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
这个工具
# 视频裁剪,从第10秒开始,总时长是3秒,目标视频的音视频编码格式与原始的保持一致
ffmpeg -ss 00:00:10 -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 ,下载后放在项目根目录
运行代码
执行下面的命令将视频test.mp4
和音频3s.mp3
进行合成
python inference.py --checkpoint_path wav2lip_gan.pth --face test.mp4 --audio 3s.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/14r8Ow46GnmFohS2eC3NHYA
提取码:4ykb
参考资料
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/