前言
hxd要过生日了,他特别喜欢牢大的梗,于是我打算整个活,用AI制作一段牢大的生日祝福给他。
技术调研
需求分析
- 牢大说话视频
- 牢大祝福声音
AI视频技术调研
一开始我想到的有两种技术方法,一个是单纯的类似draggan的一张图片,控制图片嘴巴说话。还有一个就是deepfake的AI换脸。
单一图片生成视频:
这个技术很久以前就玩过,大一做过一个高中数学老师的unravel,用的yanderifier这个东西。但是缺点是很不真实,而且需要一个原动作视频。
视频替换嘴型
记得前段时间看过一个泰勒斯威夫特说中文的视频,在视频上用的就是嘴型替换方案,这个应该是最接近我需求的。查了一下当时泰勒这个视频用的工具是Heygen
Heygen
Heygen 这个软件已经比较成熟了,只需要上传视频,就可以自己制作。但问题也是太商业成熟了,上传牢大的视频的时候检测到了名人肖像,因此不给制作。(好好好,自己官方做泰勒的就不给我们做科比的)另外,单一图片生成嘴型视频的功能在heygen里也有,只是同样有名人检测。
扒拉一下Heygen的瓜,查了一下Heygen背后的公司,发现居然是个中国的企业,但是扯淡的是这网站国内连不上。而且他的服务基本都是面向海外用户。
SD插件wav2lip
在找Heygen的平替的时候,找到了一个StableDiffusion的插件wav2lip,是对视频替换嘴型的,而且还带语音生成功能(当然语音效果不怎么样),而且还支持换脸(虽然我没有这个需求)。
项目地址:https://github.com/numz/sd-wav2lip-uhq
这个应该是我后面会选的方案,一个是我对SD比较熟悉,而且这个东西开源。
AI数字人
之前-LKS-在b站发过一个AI数字人,通过预先录制角色的一些口播视频,然后让AI生成一个说话时带手势,嘴部动作的数字人。这活之前柯洁也做过仿生人。
这东西理论上效果应该是最好的,但是稍微了解了一下市场,所有接AI数字人服务的,基本一个数字人价格就是1k+RMB,很离谱。
AI音频调研
这个方向之前玩了不少了,SOVITS,Bert-VITS,GPT-SOVITS这些都行,b站上找了一个现有的可以在线生成的
https://modelscope.cn/studios/xzjosh/Kobe-Bert-VITS2-2.3/summary/
这个是基于Bert-VITS的,效果一般般,声音是像的,但是没有语气感情。而且语速非常快。
暂时语音会用这个网页在线版的,之后可能会换GPT-SoVITS。
使用SD-wav2lip生成视频
了解SD-wav2lip工作流程
这个插件的工作流程是这样的,你需要事先准备两个资源:
- 替换嘴型的原视频
- 替换嘴型的音频文件
上传这两个文件,AI帮你修改和拟合对应语音的嘴型。
准备素材
视频素材:
找了一段黑曼巴赛后采访的视频,剪辑了一下。
音频素材:
暂时先使用网页在线生成的制作。
踩坑
在装SD-wav2lip插件的时候总是报错,看了下github上的issue,也好多这个问题,安装后在webUI上没有插件的对应界面,后台启动栏里报插件错误。
前置环境安装,git上提到需要先安装VS并且按照python和c++环境,我安装后发现还是同样的问题,有可能是我没有重启电脑,VS还没把环境目录修改掉。
看到b站教程中有回退SD-webUI版本的方法,我回退到了23-8月的,但是奇怪的是要重新安装python和pytorch。
网上又看到有专门的wav2lip的包,打算试试。
解决
SD的插件很难装上,环境依赖和正常使用版本的环境差太多,因此最后还是直接用了wav2lip的独立包。
生成
先说素材准备上,视频和音频时长最好相同或者接近。如果视频时长过长预处理过程耗时就会变高。因为他是先对每帧图像进行人脸识别,然后在开始替换嘴型。
wav2lip也支持图片说话,就是挺怪的。
此外,我发现我视频原素材里,老大老抿嘴,这会导致AI生成的嘴型中上下嘴唇消失,看起来就非常诡异。
生成速度,我的一个55s的祝福短视频大概需要12分钟才能跑完。用的720p。
Q.E.D.