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)能把「一张人像 + 一段音频」变成口型对齐的语音驱动说话人视频,不需要视频素材,也不需要训练。但你真上手时,多半会卡在启动之前:依赖装到一半版本冲突、模型文件下了一晚上断了、跑推理才发现找不到 ffmpeg。跟着这篇做完,你会拿到一个能跑的环境、一条出片的首次推理命令,以及一套质量增强与排障的查表方法。
环境基线:SadTalker硬件与Python版本怎么选
先对号入座,不满足最低档就先换机器,后面所有步骤都会白费:
| 项目 | 要求 | 为什么是这个组合 |
|---|---|---|
| GPU显存 | 低配6GB / 中配8-12GB / 高配16GB+ | 256分辨率裸跑约3-4GB;上512模型 + gfpgan增强会叠加,长音频还要留余量 |
| Python | 3.8(3.8-3.10可) | requirements.txt 锁的是 numpy==1.23.4、kornia==0.6.8 这类2023年前版本,3.11+装不上或构建失败 |
| PyTorch | 官方钉1.12.1+cu113,CUDA 11.x | 仓库里的 kornia、basicsr 配套老版 torch,直接上最新 PyTorch 会连环报错 |
| 系统依赖 | ffmpeg | 音频重采样、视频编码都靠它,没有它连报错都不像话 |
结论:老Python + 钉版依赖是这个仓库目前最稳的组合,不要试图用系统默认的新Python直接装。
如果只想先看看效果,官方文档(docs/install.md)给了社区 Docker 镜像,一条命令起步。注意它只适合体验,不适合改代码——你改的东西不会同步进容器:
docker pull wawa9000/sadtalker docker run --gpus "all" --rm -v $(pwd):/host_dir wawa9000/sadtalker \ --driven_audio /host_dir/audio.wav \ --source_image /host_dir/image.jpg \ --still --result_dir /host_dir核心链路:依赖安装、模型获取与首次推理
第1步 | 建环境并按钉版安装依赖
这一段在干什么:克隆代码、建 Python 3.8 环境、装官方钉版的 PyTorch,再用 requirements.txt 一次性装齐其余钉版依赖。
git clone https://gitcode.com/GitHub_Trending/sa/SadTalker.git cd SadTalker conda create -n sadtalker python=3.8 -y && conda activate sadtalker # 官方README钉版,与2023年代依赖组合匹配;CUDA12显卡可换cu121源 pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113 conda install ffmpeg # Linux/Mac;Windows用 scoop install ffmpeg pip install -r requirements.txt系统差异只需记住两点:macOS 和 Windows 原生要额外pip install dlib(M1 机器不装会报 Illegal Hardware Error);WSL 用户先执行export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH,否则 dlib 相关调用会找不到库。
第2步 | SadTalker模型文件下载与离线导入
联网环境直接跑官方脚本,内部用wget -nc(支持断点续传,已有文件自动跳过),网络不稳时中断后重跑同一条命令即可续传:
bash scripts/download_models.sh # 仅Linux/macOS跑完后项目根目录应该是这个结构,checkpoints/与gfpgan/weights/两个目录缺一不可:
checkpoints/ ├── SadTalker_V0.0.2_256.safetensors # 256分辨率打包模型(含ExpNet/PoseVAE/渲染/3DMM) ├── SadTalker_V0.0.2_512.safetensors # 512高分辨率模型(beta) ├── mapping_00109-model.pth.tar # 映射网络 └── mapping_00229-model.pth.tar # 映射网络 gfpgan/weights/ ├── GFPGANv1.4.pth # 面部增强主模型 ├── detection_Resnet50_Final.pth # 人脸检测 ├── alignment_WFLW_4HG.pth # 人脸对齐 └── parsing_parsenet.pth # 人脸解析内网、无外网的服务器用离线导入:先在能联网的机器下齐这8个文件(官方除下载脚本外还提供 Google Drive、百度云盘等备用源,见 README 的 Download Models 一节),把两个目录整体拷进目标机器的项目根目录。缺哪个会报什么:
| 文件 | 作用 | 缺失时的表现 |
|---|---|---|
| SadTalker_V0.0.2_256.safetensors | 256核心模型 | 推理直接起不来 |
| mapping_00109/00229-model.pth.tar | 音频到系数的映射网络 | 卡在 audio2coeff 阶段 |
| GFPGANv1.4.pth | 面部增强 | --enhancer gfpgan报错 |
| gfpgan 其余3个 .pth | 检测/对齐/解析 | 增强阶段 unexpected EOF |
30秒自查:ls -lh checkpoints gfpgan/weights,8个文件都在、大小非零就算过。
第3步 | 首次SadTalker推理跑通
最短命令只给音频和图,其余走默认值(256分辨率、不增强、crop 模式):
python inference.py \ --driven_audio examples/driven_audio/chinese_news.wav \ --source_image examples/source_image/art_0.png \ --result_dir ./results你应该看到:终端依次出现3DMM Extraction for source image→ 音频转系数 → 渲染三段进度;最后一行打印The generated video is named: ./results/<时间戳>_<时间戳>.mp4,该路径下的 mp4 能正常播放且口型在动。这一条命令跑通,环境才算真正就绪。
💡 输入图选择:真人或写实风人像效果最好(官方明确不支持二次元),正脸、清晰、单人最稳。像下面这种写实 AI 人像也可以:
质量增强层:GFPGAN面部增强与参数取舍
不增强时人脸略糊、背景会轻微涂抹,预览够用;加 gfpgan 后每帧人脸都会过一遍修复网络(GFPGAN,腾讯的人脸修复模型),清晰度明显上一个台阶,代价是时间和显存:
| 配置命令 | 质量 | 耗时 | 显存占用 |
|---|---|---|---|
| 默认(不增强) | 人脸略糊,可预览 | 1x(基准) | 最低 |
--enhancer gfpgan | 人脸细节显著变清晰 | 约为基准2-3倍 | 高于基准 |
--background_enhancer realesrgan | 非人脸区域整体提清 | 最慢 | 最高 |
gfpgan、facexlib 已在 requirements.txt 里装好,不用额外操作,直接加开关。想上 realesrgan 背景增强时单独pip install realesrgan。
真正影响观感的只有三个参数,其余可以不动:
| 参数 | 影响 | 建议 |
|---|---|---|
--preprocess | crop=只生成人脸特写;full=全身生成再贴回原图;resize=整图缩放成证件照感 | 半身/全身图用full,resize 对全身图效果差 |
--still | 锁定头部姿态,减少大甩头 | full 模式强烈建议加 |
--expression_scale | 表情幅度,1.0为正常 | 表情夸张时降到0.7 |
pose_style、batch_size保持默认即可,OOM 时再把 batch_size 降到 1。
三级验证:依赖检查到端到端全链路
按级往下做,每级一条命令,过不了就停在这一级修,别跳级:
L1 依赖完整性——确认环境装对了、模型下齐了:
python -c "import torch, face_alignment, gfpgan, librosa, basicsr; print('deps OK', torch.cuda.is_available())" ls -lh checkpoints gfpgan/weights通过标准:打印deps OK True(CUDA 机器);8个模型文件都在且大小非零。
L2 单模块冒烟——用最短音频 + 256px 小图走一遍完整推理,最快1-2分钟出片:
python inference.py --driven_audio examples/driven_audio/bus_chinese.wav \ --source_image examples/source_image/happy.png \ --result_dir ./smoke --enhancer none通过标准:结尾打印The generated video is named:,且对应 mp4 能播放。
L3 端到端全链路——开满增强和 full 模式:
python inference.py --driven_audio examples/driven_audio/chinese_news.wav \ --source_image examples/source_image/art_0.png \ --preprocess full --still --enhancer gfpgan --result_dir ./full_test通过标准:同 L2 的结尾输出,且人脸清晰度明显高于 L2 版本。
卡在哪一级,问题就在哪个环节:L1 挂 = 依赖版本或模型缺失(回第1、2步的表格对文件);L2 一启动就在3DMM Extraction崩 = face_alignment/dlib/hub 模型问题;L2 能跑但 L3 在增强阶段崩 = gfpgan 权重不全;视频出来了但口型不对 = 不是环境问题,是输入图侧脸或参数没配对。
排障手册:SadTalker常见报错速查
看到报错先别慌,下面每张表先花30秒做快速检查,再动手修:
| 症状 | 30秒快检 | 最可能原因 | 修复 |
|---|---|---|---|
ffmpeg is not recognized | ffmpeg -version提示找不到命令 | 未安装或不在 PATH | conda install ffmpeg/brew install ffmpeg/scoop install ffmpeg |
No module named 'face_alignment' | python -c "import face_alignment"复现 | 安装失败或版本冲突 | pip install face_alignment==1.3.5(必须钉版) |
CUDA out of memory | 跑时盯nvidia-smi,显存打满 | 显存不足 | 加--batch_size 1、保持--size 256,并export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128(Windows 用set) |
No module named 'ai' | ls -lh checkpoints看 epoch_20.pth 偏小 | 3DMM 模型没下全 | 重新完整下载模型包 |
unexpected EOF ... file might be corrupted | ls -lh对比文件大小异常 | 下载中断、文件截断 | 用wget -nc续传,或换离线包覆盖 |
| 音频解码错误(Invalid data) | 看输入文件扩展名 | 音频不是 wav/mp3 | ffmpeg -i in.xxx -ar 16000 out.wav转格式 |
| 口型不同步、头部乱甩 | 直接看输出 mp4 | 输入图侧脸/姿态过大,参数没配对 | 换正脸清晰图;--preprocess crop;全身图加--still |
| 输出人脸发糊 | 同参数对比一版加--enhancer gfpgan的 | 没开增强 | 加--enhancer gfpgan,接受2-3倍耗时 |
进阶与延伸:全身动画、参考视频与3D自由视角
- 全身动画:
--preprocess full --still(可加--enhancer gfpgan),人脸区域生成后贴回原图,输出保持原构图,适合半身、全身照。 - 参考视频:
--ref_eyeblink/--ref_pose从另一段视频借真实的眨眼和头部动作(examples/ref_video/ 里有现成样本),明显降低"AI感";参考视频比音频短时会自动循环。 - 3D与自由视角:
--face3dvis输出3D脸与3D关键点(需另装 requirements3d.txt);--input_yaw -20 30 10让头部依次转到新视角,单图生成4D说话人。相关实现在 src/face3d/,参数细节查 docs/best_practice.md。 - WebUI:不想敲命令就
bash webui.sh(Windows 双击 webui.bat),浏览器里上传文件即可。
把这三个开关——--preprocess full --still、--ref_eyeblink、--enhancer gfpgan——用顺了,你拿到的任何输入组合都能接住;接不住时,回到上面的排障表先搜报错,比重新装环境快得多。
【免费下载链接】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),仅供参考