跳到主要内容

数字人视频模型

一张照片、一段音频,SadTalker 本地部署只要 8GB 显存

SadTalker 用 ExpNet 和 PoseVAE 把音频翻译成 3DMM 系数,再驱动一张静态照片说话。它不吃显存,吃的是渲染时长——所以按秒计费的 GPU 才是它的正确打开方式。

SadTalker 出自西安交通大学、腾讯 AI Lab 与蚂蚁集团,论文《Learning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation》被 CVPR 2023 收录(arXiv 2211.12194)。它的思路和同期方案不太一样:不直接生成像素,而是先用 ExpNet 从音频回归出 3DMM 表情系数,再用 PoseVAE 单独采样头部姿态,最后经 MappingNet 交给一个 face-vid2vid 血统的 3D 感知渲染器出图。表情和姿态解耦,这就是为什么 SadTalker 的头会自然地转、会眨眼,而不是只有嘴在动——这一点它和只做唇形区域修补的 Wav2Lip、主打实时唇同步的 MuseTalk 是完全不同的路子。

需要坦白讲的是:这个仓库已经冻结了。GitHub 上 OpenTalker/SadTalker 有 1.4 万 star、2,600+ fork、600 多个未关闭的 issue,但主分支最后一次功能提交停在 2023 年 10 月,整个 OpenTalker 组织(video-retalking、StyleHEAT、DPE、ToonTalker)也一并沉寂。官方那个拿了 1,400+ 点赞的 Hugging Face Space 现在是 BUILD_ERROR 状态——连作者自己的演示环境都装不起来了。原因不复杂:requirements.txt 把 numpy 钉在 1.23.4、basicsr 钉在 1.4.2,README 让你用 Python 3.8 配 torch 1.12.1+cu113,而 Python 3.8 早已停止维护,新 CUDA 轮子根本不提供 cp38 包。所以 SadTalker 今天的真实难度不在模型,在于把 2023 年的依赖树重新拼起来。

好消息是,模型本身极轻。全套权重落盘约 3GB,渲染器 SadTalker_V0.0.2_256.safetensors 只有 691MiB,常驻显存的参数量大概 1.4GB。真正的成本是墙上时钟:输出固定 25fps,一分钟成片就是 1,500 帧,而 `--enhancer gfpgan` 是逐帧跑的,整条流水线九成时间都花在这里。换句话说,SadTalker 的选卡问题不是「显存装不装得下」,而是「哪张卡把这 1,500 帧渲完最便宜」。在 NexGPU 上,RTX 3090 24GB 每卡时 $0.193,一条一分钟带增强的口播视频算下来两分多美分;不满意就重开一台,计费按秒停。

01 —

版本、权重与显存实测

SadTalker 没有参数量档位,只有渲染分辨率、增强链路和预处理模式的组合——下面是每种组合的真实体积与占用

版本参数量显存上下文说明
SadTalker V0.0.2 · 256(默认路径)渲染器 691MiB safetensors,全套权重约 3GBfp32 推理 ~4GB(--batch_size 2)256×256 @ 25fps,音频时长不限`--size 256` 是默认值,也是最稳的一条路。口型和头部姿态的质量基准线就在这里,先用它跑通再谈画质。
SadTalker V0.0.2 · 512(beta)SadTalker_V0.0.2_512.safetensors,同为 691MiB~6GB(--batch_size 2),提到 8 约 8GB512×512 @ 25fps2023 年 6 月放出的 beta 渲染器。有意思的是 512 和 256 两个 safetensors 字节数完全一致(725,066,984),网络结构相同、只是训练分辨率不同,所以升到 512 几乎不额外吃权重显存。
叠加 GFPGAN / RestoreFormer 面部增强GFPGANv1.4.pth 约 350MB,另需 facexlib 检测与解析权重在渲染基础上 +2~3GB,512 全链路约 8~10GB逐帧后处理,人脸细节可推到 1024 级`--enhancer gfpgan` 是画质提升最明显的一步,也是整条流水线最慢的一步。做批量生产时,它决定了你的单条成本。
full / extfull 全身贴回模式复用同一套渲染权重,无额外模型随源图分辨率上升,1080p 半身图约 10~12GB;再开 `--background_enhancer realesrgan` 更高输出尺寸等于原图尺寸`--preprocess full --still` 是做半身数字人口播的必选组合:只渲染裁剪出的人脸区域,再贴回原图,同时冻住头部大幅摆动以免贴回时穿帮。
--old_version 旧权重路径facevid2vid_00189-model.pth.tar 单文件 1.97GiB~5~6GB256×256 @ 25fpsV0.0.2 之前的 .pth.tar 权重,比 safetensors 大一个数量级。只在复现旧结果、或 safetensors 加载异常时才需要它,常规部署不用下。
2024 年后的后继与替代方案架构各异,多为扩散 / DiT 骨干轻量的 LivePortrait、MuseTalk 8~12GB 可跑;Hallo2、EchoMimicV2 这类扩散方案一般 24GB 起更长时长、更高分辨率、更强身份保持SadTalker 主分支停更后,社区重心转向了 LivePortrait(快手)、MuseTalk(腾讯 ARC)、EchoMimicV2(蚂蚁)、Hallo 系列(复旦)。它们效果更好但算力需求高一个量级——SadTalker 依然是「一张消费级卡、几分钟出片」这个生态位里最省的选择。

02 —

SadTalker 该租哪张卡

选卡看两件事:显存够不够开大 `--batch_size`,以及这张卡的 CUDA 架构能不能跑得动那套老 torch

  • 照着 README 原样复现,预算压到最低

    Tesla V100 32GB$0.188/卡·时

    全站最便宜的一张卡,还带 32GB 显存;Volta 架构被 README 指定的 torch 1.12.1+cu113 原生支持,是唯一能把官方环境一字不改跑起来的选择。

  • 512 + GFPGAN 批量出片,日常主力

    RTX 3090 24GB$0.193/卡·时

    Ampere sm_86,cu118 轮子完美覆盖;24GB 足够把 `--batch_size` 从默认 2 拉到 8~16,单位时间渲的帧数最多,每美元产出的成片最划算。

  • 交付时间敏感,单条视频要最快出来

    RTX 4090 24GB$0.540/卡·时

    Ada sm_89,逐帧 GFPGAN 增强大约能比 3090 快一倍,单条耗时减半。代价是必须升到 torch 2.x + cu118 及以上,跑不了 cu113 那套老环境。

  • TTS + SadTalker + 后继模型串成一条流水线

    RTX A6000 48GB$0.817/卡·时

    48GB 可以让 GPT-SoVITS 或 CosyVoice 常驻显存直接喂音频给 SadTalker,同时并行开几个渲染 worker,省掉反复加载权重的开销。

03 —

从空实例到出片,四步

重点全在第二步——把 2023 年的依赖树拉回今天能装的状态

  1. 01

    开实例、选预置镜像、拉代码

    在 NexGPU 控制台开一台 Ampere 及以上的卡,镜像直接选 PyTorch 版本,省掉自己装驱动和 CUDA 的功夫。仓库本体只有几十兆,权重才是大头,稍后再下。

    git clone https://github.com/OpenTalker/SadTalker.git && cd SadTalker
  2. 02

    建环境:Python 3.10 + torch 2.1.2,torchvision 必须钉 0.16.2

    README 写的 Python 3.8 今天已经装不出来了。实测可用的组合是 Python 3.10 配 torch 2.1.2+cu118。torchvision 一定要钉在 0.16.2:0.17 删掉了 torchvision.transforms.functional_tensor,而 requirements.txt 里的 basicsr==1.4.2 恰好 import 它,这就是 SadTalker 安装环节出现频率最高的那个 ModuleNotFoundError。如果你因为别的原因必须用更新的 torchvision,就去 basicsr/data/degradations.py 把那行 import 从 functional_tensor 改成 functional。另外 numpy 必须留在 1.x,混进 NumPy 2 会直接 ABI 崩。

    conda create -n sadtalker python=3.10 -y && conda activate sadtalker && pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118 && conda install -y ffmpeg && pip install -r requirements.txt
  3. 03

    下权重:checkpoints/ 和 gfpgan/weights/ 两组

    官方脚本会从 v0.0.2-rc release 拉两个渲染器 safetensors(各 691MiB)和两个 mapping_*.pth.tar(各约 148MiB),再从 GFPGAN 与 facexlib 仓库拉增强权重。此外还要 3DMM 那套资产:epoch_20.pth(275MiB)、BFM_Fitting/01_MorphableModel.mat(230MiB)、s3fd 人脸检测权重等,全部落盘约 3GB。一个坑:音频分支的权重文件上游就叫 auido2exp_00300-model.pth 和 auido2pose_00140-model.pth——audio 拼成了 auido,别顺手「改对」,改了就加载不到。

    bash scripts/download_models.sh
  4. 04

    跑第一条,再决定要不要起 WebUI

    先用仓库自带的中文示例音频验证环境通不通,再换自己的素材。常用旋钮:`--size 512` 提分辨率,`--batch_size` 决定渲染吞吐(24GB 卡上开到 8~16 很舒服),`--expression_scale` 调表情幅度,`--pose_style` 在 0~45 之间换头部动作风格,`--still` 冻住大幅摆头。要图形界面就跑 app_sadtalker.py,但注意它内部是裸的 demo.launch(),只绑 127.0.0.1,远程机器上要么做 SSH 端口转发,要么把那行改成 demo.launch(server_name='0.0.0.0')。真遇到 OOM,官方 FAQ 给的办法是设 PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128。

    python inference.py --driven_audio examples/driven_audio/bus_chinese.wav --source_image examples/source_image/full_body_1.png --result_dir ./results --preprocess full --still --enhancer gfpgan --size 512 --batch_size 8

一条口播视频到底多少钱

SadTalker 输出固定 25fps,所以成本可以直接按帧算。一分钟成片 = 60 × 25 = 1,500 帧。在 RTX 3090 24GB($0.193/卡·时)上跑 512 分辨率 + GFPGAN 增强,按每秒约 4 帧估算,渲染需要 1,500 ÷ 4 = 375 秒,加上 3DMM 提取、音频特征和封装大约 45 秒,合计约 420 秒 = 0.1167 小时。0.1167 × $0.193 ≈ $0.0225——一条一分钟的带增强口播视频,约两分三美分。关掉增强只跑 256,帧率能到每秒约 10 帧,1,500 ÷ 10 = 150 秒,加 45 秒共 195 秒 = 0.0542 小时,×$0.193 ≈ $0.0105,约一美分。批量生产 200 条一分钟视频:200 × 0.1167 = 23.34 卡时,× $0.193 = $4.50。换 RTX 4090($0.540/卡·时)单条时间大约减半到 0.0583 小时,×$0.540 ≈ $0.0315,比 3090 贵约四成但交付快一倍——赶稿时值,跑批量时不值。存储另算:权重 3GB + conda 环境约 12GB + 素材成片,按 20GB 计是 20 × $0.414 = $8.28/月,注意实例停机后计算立刻停止计费、存储会一直计到你销毁它为止。200 条成片各按 30MB 下载,6GB × $0.0081 ≈ $0.05 出网费,基本可以忽略。全程按秒计费、无最低消费、无开通费,也不用提配额申请。

04 —

常见问题

SadTalker 本地部署到底需要多大显存?8GB 的卡够不够?

够,而且很宽裕。SadTalker 常驻显存的参数量只有约 1.4GB,默认 `--size 256 --batch_size 2` 大概 4GB 就能跑;升到 512 并叠加 GFPGAN 面部增强,整条链路约 8~10GB。真正会把显存推上去的是两件事:把 `--batch_size` 开大,以及用 `--preprocess full` 处理 1080p 大图还同时开 realesrgan 背景增强,那种情况可能摸到 12GB 以上。所以显存基本不是瓶颈——渲染时长才是。NexGPU 上 RTX 3090 24GB 每卡时 $0.193,显存管够还能把 batch 拉满,是这个模型性价比最高的搭配。

SadTalker 还在维护吗?2026 年还值得用吗?

主分支最后一次功能提交是 2023 年 10 月,600 多个 issue 挂着没人处理,官方 Hugging Face Space 现在是 BUILD_ERROR,整个 OpenTalker 组织都已沉寂。但它依然值得用:Apache 2.0 授权、权重总共才 3GB、一张消费级卡几分钟出片,这个「便宜且够用」的生态位至今没有更好的替代者——LivePortrait、MuseTalk、EchoMimicV2、Hallo2 效果更好,算力需求也高一个量级。务实的做法是先用 SadTalker 把业务流程跑通,量起来了再评估要不要上扩散方案。NexGPU 按秒计费,两套方案各开一台跑同一批素材做 A/B,成本就是几美元的事。

装依赖报 No module named 'torchvision.transforms.functional_tensor' 怎么解决?

这是 SadTalker 最高频的报错,根因在 requirements.txt 钉死的 basicsr==1.4.2——它在 basicsr/data/degradations.py 里 import 了 torchvision.transforms.functional_tensor,而这个模块在 torchvision 0.17 被删除了。两个办法:把 torchvision 钉回 0.16.2(推荐,配 torch 2.1.2+cu118 正好),或者直接改那一行 import,把 functional_tensor 换成 functional。顺带提醒 numpy 一定要留在 1.x,requirements 里写的是 1.23.4,混进 NumPy 2 会直接 ABI 崩溃。在 NexGPU 的 PyTorch 预置镜像上,这些版本冲突从干净环境开始处理只要几分钟,比在本机反复污染 conda 省心得多。

RTX 4090 和 RTX 5090 能跑 SadTalker 吗?

4090 能,5090 要多花点功夫。README 指定的 torch 1.12.1+cu113 只编到 Ampere(sm_86),拿它跑 4090(Ada,sm_89)会直接报 no kernel image is available for execution on the device,必须升到 torch 2.x + cu118 或更高。RTX 5090 是 Blackwell(sm_120),需要 torch 2.7+ 配 CUDA 12.8,而那会把 basicsr、facexlib 这一串老依赖全部拖着往前挪,工作量不小。除非你有别的理由用 5090,否则跑 SadTalker 就老老实实选 Ampere 世代——NexGPU 的 RTX 3090 24GB 每卡时 $0.193,A10 24GB $0.414,都是零折腾的选择。

SadTalker 和 Wav2Lip、MuseTalk 有什么区别,该选哪个?

输入形态就不一样。Wav2Lip 是拿现成视频做唇形区域修补,只改嘴、不改头;MuseTalk 主打实时唇同步,也需要一段底片视频。SadTalker 只要一张静态照片,用 PoseVAE 单独生成头部姿态、ExpNet 生成表情,所以它会转头、会眨眼,能从零造出一段口播。如果你手上只有一张证件照或一张 AI 生成的人像,SadTalker 基本是唯一选择;如果你已经有真人底片、只想换台词,Wav2Lip 或 MuseTalk 更自然也更快。NexGPU 有 2,000+ 预置镜像和 2,498 张在租 GPU,三个方案同时各开一台跑同一段音频对比,一小时内就能有结论。

生成一条一分钟的数字人视频要多久?能批量跑吗?

按 25fps 算一分钟就是 1,500 帧。RTX 3090 上开 512 + GFPGAN 大约七分钟出片,关掉增强跑 256 大约三分钟;RTX 4090 上再快一倍。批量的关键是把 `--batch_size` 从默认的 2 拉上去,24GB 卡开到 8~16 很稳,吞吐能明显改善。真要上规模,NexGPU 单节点最多可挂 14 张 GPU、节点显存上限 2,152GB,把素材切片并行渲染即可;全球 51 个国家和地区、1,175 个已验证可租节点,就近开机还能省下素材上传的时间。SSH、Jupyter、Web 终端、REST API 和 CLI 都开放,写个脚本轮询任务队列很容易。有问题在 Telegram 上直接找中英文双语支持,没有工单排队。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。