MuseTalk 干的事很具体:给一段视频(或一张图)加一段音频,它只重画嘴部到下颌这一块,让唇形和声音对上,其余画面原样保留。它不生成头部动作、不生成表情、也不凭空造人——这一点很多人第一次用会踩坑,想要会动的头,前面得接 MuseV / MusePose 或者干脆用真人录制的底片视频。
架构上它刻意避开了扩散采样:冻结的 sd-vae-ft-mse 把 256×256 的人脸区域压进潜空间,冻结的 whisper-tiny 抽音频特征,中间是一颗从 Stable Diffusion v1.4 改来的 UNet(约 0.85B 参数,fp32 权重 3.4GB),靠 cross-attention 把音频塞进图像潜变量,一步出图。没有 20 步、50 步的去噪循环,这就是官方敢写「30fps+ on an NVIDIA Tesla V100」的原因,也是它显存需求低到离谱的原因。
当前线是 2025 年 3 月 28 日发布的 V1.5:在 V1.0 基础上加了感知损失、GAN 损失和 sync loss,改成两阶段训练配时空采样(Informative Frame Sampling + Dynamic Margin Sampling),清晰度、身份一致性、唇音对齐都比初版明显好。截至目前仓库最后一次提交停在 2025 年 9 月,官方没有放出 2.0,V1.5 就是你现在该部署的版本。
01 —
版本与权重:该下哪一份
download_weights.sh 会把下面这一整套拉齐,别只下 UNet
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| MuseTalk V1.5(models/musetalkV15/unet.pth) | UNet ≈0.85B,checkpoint 3.40GB | fp16 ~4GB 可跑通,社区实测约 3.6GB | 256×256 面部区域 / 25fps | 当前推荐版本。加了感知损失、GAN 损失、sync loss 与两阶段训练,`--version v15` 配 `--extra_margin 10`、`--parsing_mode jaw` 是默认组合。 |
| MuseTalk V1.0(models/musetalk/pytorch_model.bin) | 同为 3.40GB checkpoint | fp16 ~4GB | 256×256 / 25fps | 2024 年 4 月的初版。今天还留着它的唯一理由是 `--bbox_shift` 只在 V1.0 生效——正值张嘴幅度变大、负值收小,先跑一遍看它打印出来的可调区间再定值。 |
| realtime 模式(scripts/realtime_inference.py) | batch_size 默认 20(离线脚本是 8) | 在 V1.5 权重之上随 batch 线性增长 | 官方 30fps+ @ Tesla V100 | 第一次要跑 preparation,把 coords.pkl、latents.pt、mask/、full_imgs/ 缓存到 results/v15/avatars/<avatar_id>/;之后每段音频只走 Whisper → UNet → VAE 解码 → 融合。 |
| 训练 Stage 1(潜空间修补) | 8×H20,batch 32,梯度累积 1 | ≈74GB/卡 | 256×256 | 先把 latent inpainting 本身学出来。80GB 的卡刚好装得下,这一阶段还不是瓶颈。 |
| 训练 Stage 2(GAN + sync 微调) | 8×H20,batch 2,梯度累积 8 | ≈85GB/卡 | 256×256 | 接上判别器和 SyncNet,batch 降到 2 显存反而更高。80GB 卡在这一步会顶到天花板,要往 141GB 档位走。 |
| 配套权重(sd-vae-ft-mse / whisper-tiny / DWPose / face-parse-bisent) | VAE + 音频编码器 + 关键点 + 人脸分割 | 合计不到 1GB | — | DWPose 取 dw-ll_ucoco_384.pth,人脸分割是 79999_iter.pth 加 resnet18-5c106cde.pth;训练还要额外拉 ByteDance/LatentSync 的 latentsync_syncnet.pt。 |
02 —
NexGPU 选卡建议
MuseTalk 不吃显存吃算力,所以选卡逻辑和跑 LLM 完全不一样
效果验证 + 离线批量配音(一次几十上百条口播)
Tesla V100 32GB$0.188/卡·时
官方那句「30fps+」就是在 Tesla V100 上测的,同款卡不用猜性能,而且它是全站最便宜的一档。
实时数字人直播(realtime 模式 + TTS + NVENC 推流)
RTX 4090 24GB$0.540/卡·时
Ada 的 fp16 吞吐足够把 batch_size 20 拉满,同时留出编码器做推流,不必再开第二台机器。
接 GFPGAN / CodeFormer 把 256×256 超分到 1080p,或者多路并发
RTX A6000 48GB$0.817/卡·时
MuseTalk 本体只占几个 GB,48GB 能让超分模型和多个 avatar 缓存常驻同一张卡,省掉反复换入换出。
拿自己的数据做两阶段训练 / 微调
H200 141GB$6.660/卡·时
Stage 2 官方实测 ≈85GB/卡,80GB 的 A100、H100 正好卡在门槛下面;141GB 是不改超参就能直接开跑的档位。
03 —
从空实例到出片,四步
在 NexGPU 上选 PyTorch 预置镜像,下面这套跑完大约半小时
- 01
建环境,装那套 mm 系依赖
Python 锁 3.10。真正会卡住人的是 DWPose 依赖的 mmcv/mmdet/mmpose,必须用 openmim 装指定版本,pip 直接装大概率编译失败。
conda create -n MuseTalk python==3.10 -y && conda activate MuseTalk && pip install -r requirements.txt && mim install mmengine "mmcv==2.0.1" "mmdet==3.1.0" "mmpose==1.1.0" - 02
一次性拉齐全部权重
脚本会依次下 musetalkV15/unet.pth(3.4GB)、sd-vae-ft-mse、whisper-tiny、DWPose 的 dw-ll_ucoco_384.pth、face-parse-bisent 的 79999_iter.pth 和 resnet18。少任何一个都会在人脸检测或融合那一步炸。
sh download_weights.sh - 03
先跑离线推理确认效果
把底片视频和音频路径写进 configs/inference/test.yaml。底片强烈建议先转成 25fps——模型就是按 25fps 训的,帧率不对唇音会整体漂。开 --use_float16 显存直接掉一半。
python -m scripts.inference --inference_config configs/inference/test.yaml --result_dir results/test --unet_model_path models/musetalkV15/unet.pth --unet_config models/musetalkV15/musetalk.json --version v15 --use_float16 - 04
切实时模式,做成可复用的 avatar
在 configs/inference/realtime.yaml 里把 preparation 设成 true 跑一次,缓存生成后改回 false,之后换音频就是秒级响应。真要压帧率务必带 --skip_save_images,否则瓶颈全在往磁盘写 PNG 上。
sh inference.sh v1.5 realtime
一笔真实的账
拿 100 条 60 秒口播视频来算。25fps 下每条 1500 帧,按官方在 Tesla V100 上 30fps+ 的口型生成速度,UNet 那部分每条约 50 秒;再算上 DWPose 人脸检测、VAE 编解码和 ffmpeg 合成,保守按每条 2 分钟计。100 条 = 200 分钟 ≈ 3.34 小时,Tesla V100 32GB 是 $0.188/卡·时,3.34 × 0.188 ≈ $0.63。前面装环境加拉 3.4GB 的 unet.pth 与整套配套权重,算 30 分钟,0.5 × 0.188 ≈ $0.09。整批跑完不到 $0.75。成片按 1080p 共约 10GB 出网,10 × $0.0081 ≈ $0.08。 换成实时数字人直播:RTX 4090 24GB $0.540/卡·时,一天播 8 小时是 8 × 0.540 = $4.32,一个月按 22 个播出日算 ≈ $95。计费按秒走、按小时定价,停机即停止计算费用;只有留在盘上的权重和 avatar 缓存(模型加缓存约 12GB,$0.414/GB·月 ≈ $4.97/月)会继续计费,销毁实例存储即止。没有起租时长、没有开通费、不用提配额申请。
04 —
