跳到主要内容

数字人 / 口型同步

MuseTalk 本地部署:4GB 显存跑得动的实时口型同步

腾讯音乐天琴实验室(TMElyralab)开源的音频驱动唇形同步模型,在潜空间做人脸修补而不是走扩散采样,所以它是少数真能顶到 30fps 的方案。租一张卡,半小时就能把自己的数字人跑起来。

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.40GBfp16 ~4GB 可跑通,社区实测约 3.6GB256×256 面部区域 / 25fps当前推荐版本。加了感知损失、GAN 损失、sync loss 与两阶段训练,`--version v15` 配 `--extra_margin 10`、`--parsing_mode jaw` 是默认组合。
MuseTalk V1.0(models/musetalk/pytorch_model.bin)同为 3.40GB checkpointfp16 ~4GB256×256 / 25fps2024 年 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 + 音频编码器 + 关键点 + 人脸分割合计不到 1GBDWPose 取 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 预置镜像,下面这套跑完大约半小时

  1. 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"
  2. 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
  3. 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
  4. 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 —

常见问题

MuseTalk 本地部署到底需要多大显存?

比你想的小得多。官方 README 里的最低实测是 RTX 3050 Ti 笔记本版 4GB,开 fp16 能跑,8 秒视频约 5 分钟;社区在 RTX 5060 Ti 上量到模型侧约 3.6GB 占用。权重本体 fp32 是 3.40GB,不开 fp16 的话 8GB 卡更稳妥。真正决定体验的是算力不是显存——4GB 卡能出片但远达不到实时。想直接对齐官方 30fps+,在 NexGPU 上开一张 Tesla V100 32GB,$0.188/卡·时。

MuseTalk 有 2.0 吗?现在该部署哪个版本?

没有 2.0。当前线是 2025 年 3 月 28 日发布的 V1.5,仓库最后一次提交停在 2025 年 9 月(修的是音频统一转 16kHz WAV 和 Windows 下载脚本)。除非你要用只在 V1.0 生效的 `--bbox_shift`,否则一律上 V1.5。想两个版本并排对比,NexGPU 按秒计费,开两台跑完就停,成本是几毛钱的事。

生成出来只有 256×256,脸发糊怎么办?

这是架构上限不是配置问题——模型就在 256×256 的人脸区域上训练。官方 limitation 写得很直白:胡子、唇形和唇色这类细节保不住,逐帧生成还会带来轻微抖动。通行做法是后面接 GFPGAN 或 CodeFormer 做超分,另外调 `--extra_margin`、`--left_cheek_width`、`--right_cheek_width`(默认都是 90)改善融合边界。超分和 MuseTalk 想常驻同一张卡,选 RTX A6000 48GB,$0.817/卡·时。

realtime 模式真能做到实时吗?

能,但前提是别踩坑。必须先跑一次 preparation 把 latents.pt、coords.pkl 和 mask 缓存下来,之后每段音频只剩 Whisper 抽特征、UNet 推理、VAE 解码和融合这几步。仓库 issue 里反复出现「到底有没有人真跑到实时」,绝大多数是因为没加 `--skip_save_images`,帧率全耗在往磁盘写 PNG 上。想留出编码器同时推流,NexGPU 的 RTX 4090 24GB $0.540/卡·时是最省心的一档。

RTX 50 系(Blackwell)跑 MuseTalk 会报 no kernel image,怎么解?

sm_120 需要 cu128 起的 PyTorch,老的 2.6.0+cu124 一定报错。另一个坑是 mmcv/mmpose 在 Python 3.12 上没有预编译轮子,社区的绕法是用 mediapipe 的 478 点面网格替掉 DWPose,再把鼻梁那几个点映射回 MuseTalk 需要的索引。不想折腾就直接避开:NexGPU 上 RTX 4090 24GB $0.540、Tesla V100 32GB $0.188 都是老老实实能跑的卡;确实要 Blackwell,RTX 5090 32GB $0.723/卡·时也在列表里。

MuseTalk 能商用吗?授权是什么?

代码是 MIT,权重在 Hugging Face 上标的是 creativeml-openrail-m,作者在免责声明里明确写了训练好的模型可用于任何用途、包括商业用途。两个限制要记住:仓库里的测试素材仅限非商业研究;whisper、sd-vae-ft-mse、DWPose 这些依赖各自的授权要各自遵守。至于跑在哪,NexGPU 覆盖 51 个国家与地区、1,175 个已验证可租节点,合规选址由你自己定,Telegram 上有中英文支持,不排工单队列。

开始使用 NexGPU

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

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