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 的完整使用流程后,你得到的是一条命令产出的说话视频:丢一张照片和一段语音进去,它输出口型、表情与语音对得上的 mp4。SadTalker 是 CVPR 2023 的语音驱动人脸动画项目,第一次部署几乎人人会卡在模型文件和环境这两处,下面就按这两个节点展开,每步只给必须执行的命令。
🎬 先看成品:这条视频就是你马上要跑出来的
上图从左到右:输入照片、生成结果、提供动作的参考视频。成品是一个 mp4,默认存在 results/ 下的时间戳目录里。要得到它,需要三样东西:一段驱动音频、一张人脸照片、一组预训练模型。前两个仓库 examples/ 目录里现成有,第三个不会自动出现,它就是下面的第一个节点。
🔐 第一个节点:把模型文件放进 checkpoints/
多数 ModuleNotFoundError、FileNotFoundError 都不是代码问题,而是模型文件没下载或没放对位置。在你机器上克隆仓库并执行下载脚本,一步完成两件事:
git clone https://gitcode.com/GitHub_Trending/sa/SadTalker cd SadTalker bash scripts/download_models.sh脚本会把 mapping 网络、256 和 512 两档生成器权重下到 checkpoints/,把人脸检测和增强权重下到 gfpgan/weights/。
⚠️脚本只能在 Linux/macOS 上跑,Windows 用户按 README 的下载清单手动取同样的文件放进对应目录。
下载完用这条命令核对文件是否齐全:
ls checkpoints gfpgan/weightscheckpoints/ 里应有 mapping_00109-model.pth.tar、mapping_00229-model.pth.tar、SadTalker_V0.0.2_256.safetensors、SadTalker_V0.0.2_512.safetensors 四个文件,gfpgan/weights/ 里有 4 个 .pth。中途断了也没关系,脚本用的是 wget -nc,重跑只会补缺失的部分。
🔧 第二个节点:用一组命令备好 Python 环境
代码基于 torch 1.12 编写,依赖里也锁了不少旧版本,所以环境要按官方版本建,别自己换新的。在你机器上执行:
conda create -n sadtalker python=3.8 conda activate sadtalker 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 pip install -r requirements.txtffmpeg 负责解码输入音频和编码输出视频,缺了它推理会直接报 not recognized。Windows、macOS 的安装差异见 README 安装一节。
⚠️没有 GPU 也能跑:后面的运行命令末尾加 --cpu,速度慢但流程一样。
▶️ 跑第一条会说话的视频:inference.py 完整命令
环境就绪后,在你机器上执行,下面用的是仓库自带的示例素材,零配置:
python inference.py \ --driven_audio examples/driven_audio/chinese_news.wav \ --source_image examples/source_image/full_body_1.png \ --result_dir results屏幕上先打印 3DMM Extraction for source image,然后是渲染进度条,最后给出 The generated video is named: …,视频就在那个时间戳目录里。
⚠️模型只支持写实人像或真人照片,动漫脸会生成扭曲的结果。
加 --verbose 可以保留中间产物(裁剪的人脸、3D 系数文件),排查问题时有用。
🎛 调出你要的效果:三个最实用的开关
全身人物:--preprocess full 配 --still
默认 crop 模式只输出裁剪到人脸的小视频。要动整张全身图,用 full 模式:先在人脸区域做动画,再贴回原图;--still 把头姿固定成原图角度,全身效果最自然:
python inference.py --driven_audio examples/driven_audio/chinese_poem1.wav \ --source_image examples/source_image/full_body_1.png \ --preprocess full --still --enhancer gfpgan --result_dir results_full--enhancer gfpgan 会用 GFPGAN(一个专门修复人脸模糊的模型)提升面部清晰度。另外 resize 模式只适合证件照式半身特写,全身图用它效果差。
表情和转头:--expression_scale 与 --input_yaw
--expression_scale 1.5 让表情幅度变强,1.0 是默认值。--input_yaw -20 30 10 表示头先左转 20 度、再转到右转 30 度、最后停在 10 度,一张照片就能得到不同视角的说话视频:
借参考视频的动作:--ref_pose 与 --ref_eyeblink
只有单图时,头部动作全靠模型自己生成,容易显得漂浮。给一段参考视频,它会借用视频里的头姿和眨眼节奏;参考视频比音频短时会自动循环。在你机器上执行:
python inference.py --driven_audio examples/driven_audio/chinese_poem1.wav \ --source_image examples/source_image/people_0.png \ --ref_pose examples/ref_video/WDA_AlexandriaOcasioCortez_000.mp4🛠 修不跑的错:四类报错与对应动作
- ffmpeg is not recognized:没装 ffmpeg 或不在 PATH 里,conda install ffmpeg 即可(macOS 用 brew install ffmpeg)。
- CUDA out of memory:显存碎片化导致,设置环境变量后重跑:
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128 python inference.py ...Windows 把 export 换成 set 即可。
- FileNotFoundError,提示找不到 checkpoints 下的文件:模型缺失或目录不对,重跑下载脚本;若报 unexpected EOF, expected xxx more bytes,说明文件下载中断损坏,删掉重新下。
- Error while decoding stream:音频格式不支持,只收 wav 和 mp3,其他格式先用 ffmpeg 转换。
更多问题见 docs/FAQ.md,参数细节查 best practice 文档。
下一步你可以:
- 固定一段音频,把 --expression_scale 从 0.5 到 2.0 跑三遍,直观感受表情强度的变化。
- 执行 bash webui.sh 启动本地 Gradio 页面(Windows 双击 webui.bat),用网页上传自己的照片和音频。
- 给第一次生成的素材配上 --ref_pose 参考视频再跑一遍,对比动作自然度的差异。
【免费下载链接】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),仅供参考