SadTalker 完整指南:一张照片 + 一段音频,快速生成会说话的视频
【免费下载链接】SadTalker[CVPR 2023] SadTalker:Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation项目地址: https://gitcode.com/GitHub_Trending/sa/SadTalker
把一张人物照片丢给它,再配上一段录音,几十秒后你会拿到一个会眨眼、会张嘴、而且嘴型和声音对得上的视频。这套东西叫 SadTalker,是一个 CVPR 2023 的开源项目,主打"音频驱动的单图说话人脸动画"——输入是静态图,输出是动态的说话视频。下面不讲原理推导,直接带你从零跑通,再把每个旋钮讲清楚。
先说清楚它到底解决什么问题
很多人手里有一张角色立绘、一个头像,或者一段想配上去的旁白,但想让脸"动"起来,以前要么逐帧手动画口型,要么找真人重拍。SadTalker 把这两步压成一个:图负责"长什么样",音频负责"说什么、什么节奏",模型负责让嘴、眼、头跟着声音自然地走。
它的价值就一句话:用最低成本,让一张不会动的图开口说话,并且口型大体对得上。不管是做虚拟形象、视频配音还是短视频素材,这个能力都是刚需。
一句话看懂核心原理:声音怎么变成脸的动作
别被"3DMM"吓到,你可以先把它理解成"把一张脸拆成一组可控的数字"。整个流水线其实就三步,对应仓库里三个位置:
- 对齐裁剪:先找到脸的位置,把脸裁出来并对齐(人脸裁剪与对齐)。
- 音频转系数:把声音波形喂进去,算出每一帧脸该怎么摆、嘴怎么张(音频到系数)。这一步是整个项目最核心的环节。
- 系数转画面:拿着一帧帧的"脸该怎么摆",重新画出对应的画面,最后拼成视频(人脸渲染)。
所以它不是把嘴部区域单独抠出来贴上去,而是让整张脸的姿态和表情一起跟着音频走,这也是为什么它比单纯对口型看起来更自然。
从零搭建:安装与模型下载
环境这块跟官方安装文档保持一致,用 conda 建一个干净的 Python 3.8 环境最省心。下面这段命令直接照抄即可,一共 7 行:
git clone https://gitcode.com/GitHub_Trending/sa/SadTalker cd SadTalker conda create -n sadtalker python=3.8 conda activate sadtalker pip install torch torchvision torchaudio pip install -r requirements.txt bash scripts/download_models.sh几点提醒,能帮你少走弯路:
- 依赖看 依赖清单,里面锁了 numpy、librosa、facexlib、gfpgan 等具体版本,不要自己乱升降。
- 模型靠脚本拉,模型下载脚本 会把推理需要的权重下到
checkpoints/,还会把 GFPGAN 超分权重下到gfpgan/weights/。网络不稳就多跑几遍,脚本用了断点续传,不会重复下。 - 系统层面最好先装好ffmpeg(Linux 用包管理器装,Windows 加进 PATH),后面读写音频和视频都依赖它。
- 有显卡就直接跑,没有显卡它会自动落到 CPU,只是慢一些。
两种调用方式:网页和命令行
网页方式适合边点边看,改参数直观。入口就是根目录的app_sadtalker.py,在 SadTalker 目录下执行python app_sadtalker.py即可,浏览器打开对应地址后,左边传图和音频,右边调参数点生成。它还能在线把文字转成语音再驱动,适合懒得自己找音频的人。
命令行方式适合批量、进流水线,入口是 命令行入口。想跑全身、又要画面稳,用下面这条就够:
python inference.py --driven_audio examples/driven_audio/deyu.wav \ --source_image examples/source_image/full_body_1.png \ --preprocess full \ --still --enhancer gfpgan跑完后,结果视频会落在results/下按时间戳命名的目录里。--preprocess full是让全身入镜,--still让头的动作收着点更自然,--enhancer gfpgan是对脸做超分补细节。
参数对照表:口型自然度的几个关键旋钮
不用记全部参数,先把下面这几个玩明白,效果就能拉开差距:
| 参数 | 管什么 | 怎么选 |
|---|---|---|
--preprocess | 怎么处理原图:crop只取脸 /full取全身 | 想要全身出镜就full,只要脸就crop |
--still | 让头的晃动更少、更稳 | 全身图建议加,半身图看口味 |
--pose_style | 头部姿态的"幅度档位",0 到 45 | 越大头动得越夸张,默认 0 |
--expression_scale | 表情强度 | 表情发木就调到 1.2 左右,太浮夸就调小 |
--size | 渲染分辨率,256 或 512 | 先 256 快速看效果,定稿再上 512 |
--enhancer | 脸部超分,可选gfpgan | 脸糊就开,能明显提清晰度 |
一个小技巧:先用 256 分辨率把preprocess和still试到位,确认构图和动作都满意,再切到 512 出正式片。这样调试成本低很多。
怎么确认它跑对了:验证与避坑
判断成功与否不用猜,直接看三样东西:
- 看产出:去
results/里按最新时间戳找到那个.mp4,正常能播,时长和你给的音频一致。 - 对口型:把视频音画一起看,嘴的张合是否大致跟着说话走。个别字不准很常见,整体对得上就算正常。
- 看脸是否被找到:如果提示
No face is detected,多半是图里人脸太小或角度太偏,换一张脸占比更大、正脸一点的图再试。
几个高频坑,提前排掉:
- 音频格式优先用 WAV;给 MP3 也行,程序会自动转成 16kHz 的 WAV 再处理。
- 脸糊、想更清晰:加
--enhancer gfpgan,前提是gfpgan/weights/里的权重已经下全。 - 显卡显存吃紧:把
--size降到 256、--batch_size调小,或者干脆不加超分先跑通。
下一步建议:先拿仓库自带的examples/里的图和音频把上面那条命令行命令原样跑一遍,确认results/里能出片;跑通后,再把你自己的图和音频换进去调--preprocess和--expression_scale,很快就能找到适合自己素材的甜点位。
【免费下载链接】SadTalker[CVPR 2023] SadTalker:Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation项目地址: https://gitcode.com/GitHub_Trending/sa/SadTalker
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考