⭐ 设为星标 · 第一时间收到推送
这类视频,究竟换了什么?
下面是这次的 AI 换人演示。原 MV 的粉色舞台、镜头和表演作为基础,Bruno Mars 对应黄仁勋,ROSÉ 对应 Sam,服装也跟着参考图一起换。
我目前整理出来的是 77.33 秒连续片段,不是整首 MV 的验收完整版。
如果只想改脸,普通换脸工具就能先试。连头发、衣服、体型都要换,得用视频人物替换,再用遮罩控制修改范围。这里的“遮罩”,就是告诉模型:画面里哪些地方可以改。
我把换人物、原唱、嘴形和剪辑分开处理。哪一步坏了,就修哪一步。
先把 MiniMax H3 部署到本地
这次用的是 Ubuntu、RTX 4090 24GB 和 ComfyUI。24GB 是我的实测配置,能跑的时长、尺寸还受量化、系统内存和参考素材数量影响。先跑原生 GUI 工作流,再加逐人遮罩。
1. 安装 ComfyUI,确认能看到显卡
先装好 NVIDIA 驱动、Git 和 Python 3.12。终端运行 nvidia-smi,确认系统能识别显卡。然后克隆 ComfyUI,创建独立环境:
git clone https://github.com/Comfy-Org/ComfyUI.git cd ComfyUI python3.12 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install torch torchvision torchaudio \ --extra-index-url https://download.pytorch.org/whl/cu130 python -m pip install -r requirements.txt
这里按 ComfyUI 当前文档的 CUDA 13.0 安装路线写,显卡驱动也要与之兼容。已有 ComfyUI 的人先备份环境,再按更新指南更新;不要在正在用的环境里直接覆盖重装。官方手动安装说明:
https://docs.comfy.org/installation/manual_install
接着检查 CUDA 并启动:
python -c "import torch; print(torch.__version__, torch.version.cuda); print(torch.cuda.is_available())" python main.py
最后一项应该输出 True。浏览器打开 http://127.0.0.1:8188,能看到 ComfyUI 界面,再继续下模型。
2. 下对模型,放对目录
人物替换用 H3 Ref2VA 底模 + Character Swap LoRA。LoRA 是人物替换适配器,单独下载它还不能运行。底模、文本编码器和两个 VAE 都要准备;VAE 负责画面和声音的编码、解码。
下面对应资料包里的 01-author-character-swap-v1.gui.json,目录都在 ComfyUI/models/ 下:
|
|
|
|---|---|
diffusion_models/ |
minimax_h3_ref2va_pruned_int8_convrot.safetensors |
text_encoders/ |
qwen3vl_32b_minimax_h3_nvfp4_awq.safetensors |
vae/ |
minimax_h3_video_vae_int8_convrot.safetensors |
vae/ |
minimax_h3_audio_vae_fp32.safetensors |
loras/ |
h3_character_swap_pro4500_1000.safetensors |
前四个从 Comfy-Org 的模型仓库下载,最后一个从 Character Swap 作者仓库下载:
https://huggingface.co/Comfy-Org/MiniMax-H3
https://huggingface.co/akatz-ai/MiniMax-H3-Character-Swap-LoRA
我核对过这五个文件,仅权重就约 40GB;建议 SSD 预留 100GB,给 Python 环境、中间视频和缓存留空间。网盘包里有按文件下载的命令,不需要把整个模型仓库都下回来。
3. 导入工作流,先跑一个短镜头
把资料包里的 01-author-character-swap-v1.gui.json 拖进 ComfyUI,刷新模型列表或重启服务,在加载器中选中上面的文件。这个原生图使用 ComfyUI 内置节点,作者标注在 0.37.0 验证;缺 MiniMaxH3ReferenceToVideo 等核心节点时,先查 ComfyUI 版本和启动日志。
把替换角色图传给
,把 24fps 连续镜头传给
,再改人物描述。GUI 入口用 V1 LoRA 强度 1.0、20 步、res_multistep / simple,Turbo 关闭。可选 Turbo 加载器已旁路,先不用另下加速权重。
参考图的脸和衣服要清楚,尽量空手、背景简单。不要塞进不需要的麦克风,否则模型可能连道具一起抄过去。原视频也要用清晰源。
原生图默认的 0.4MP 是排错预览。正式出片可按 H3 指南设成 0.98MP、1344×768;输入、输出尺寸遵循 32 的倍数。导出成 1080p,不会自动补出人物细节。
运行后看终端有没有模型加载错误、CUDA OOM,以及 ComfyUI/output/ 里是否有新视频。显存不足先缩短镜头、减少参考素材,再调整生成尺寸;不要把原素材降成低清来凑显存。基础运行与尺寸说明:
https://docs.comfy.org/tutorials/video/minimax/minimax-h3
我在 MV 里还用了逐人裁剪、遮罩与局部合成。下表是这条进阶流程的实测配置,与上面的 GUI 默认图分开看:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
截至 2026 年 10 月 17 日,作者已推荐 V1.5;这次样片、GUI 和进阶配方保留 V1,方便对应已有结果。V1.5 我还没在这套 MV 流程里验证,不能只换一个文件名就沿用全部参数。
进阶 API 图还需要 SAM3、MaskVidExperiments、VEDA 和包里的预处理节点;它保留了旧环境的 FP16 视频 VAE。首次部署先跑通 GUI,准备做逐人遮罩时,再按包内 MODELS_AND_NODES.md 补齐依赖。
第一段先做短:分镜、遮罩,再逐人替换
1. 先找连续镜头
拿到清晰、干净的原版素材,先检查右上角有没有搬运水印。水印和文字本来就在画面里,后面“保留原背景”也会把它们保留下来。优先换干净源,比最后修补省事。
第一次选一个正脸较多、遮挡少的连续镜头,先做三到五秒。MV 切镜很快,比如这次 30—35 秒就跨了三个镜头,应该拆开处理,再按原切点拼回去。
H3 的输出帧数还受工作流的帧格限制。这次用到过 90 帧和 124 帧。24fps 下,5 秒是 120 帧,124 帧约为 5.17 秒。需要补尾帧时,生成后裁回原镜头帧数,不要拉伸视频来凑时长。
2. 先看遮罩有没有选对人
我的进阶流程用 SAM3 跟踪人物,先导出黑白遮罩:白色是修改区,黑色是保留区。这里选中的是前景歌手,后排鼓手另做一份。
至少看首、中、尾几帧。头发有没有漏掉?转身后衣服还在遮罩里吗?手举起来时,麦克风有没有被误切走?多人交叉时,跟踪编号对应谁,也要重新确认。
3. 一个人一轮,分别生成后再合成
我一开始试过同时放两张身份参考,容易串人。后来改成:同一段原视频,先只处理 Sam 对应的遮罩,再单独处理黄仁勋,最后按各自遮罩合回去。
参考图决定身份和服装,动作跟原视频走。唱歌的人保留原麦克风,鼓手保留鼓槌;不要给所有角色都写一句“正在唱歌”。
下面这段 Prompt 可以改,先把人物和道具描述换成自己的:
💡 PROMPT
Prompt:
Replace only the masked performer in <Video 1> with the adult character in <Picture 1>. Use the reference identity, hair and outfit. Follow the source performer's body position, gestures, gaze and mouth state on each frame. Keep closed lips closed. Retain the existing microphone, cable and instruments, including their contact with the hands. Keep unmasked people and the scene unchanged. Do not introduce new props or a new performance.
生成后,先看身份、衣服、人数、道具和动作。脸还是原演员,先修人物替换;麦克风没了,先修道具。别急着往坏底片上继续做嘴形和高清增强。
原唱与嘴形,要分别保住
原唱最容易保留:把音轨留在模型外面,画面处理完再封装回来。输入音频、输出带声音,都不等于原唱无损,更不等于嘴形同步。
整片画面已经与原片时间线对齐、原音轨也适合 MP4 时,可以用 FFmpeg 直接复制音视频流:
ffmpeg -i replaced-silent.mp4 -i original.mp4 \ -map 0:v:0 -map 1:a:0 -c:v copy -c:a copy \ -movflags +faststart final.mp4
这是整段同时间轴的封装示例。做中间五秒样片时,音频也要取对应的那五秒,不能把整首歌从头贴上去;AAC 切片还涉及编码帧边界,精确样本校验要另做。
嘴形更麻烦。H3 会参考原表演,但可能把闭嘴画成张嘴,也可能在侧脸、快速转头和麦克风遮挡时漂移。
我的做法是用 原视频的对应帧驱动 LivePortrait,再只合成嘴部附近的区域。这次一些镜头用了温和的 hybrid 模式,混合权重 0.4,之后继续检查嘴唇张合和麦克风遮挡。LivePortrait 官方项目在这里:
https://github.com/KlingAIResearch/LivePortrait
下面两张图来自同一时刻。检查时看嘴部开合,也看手、麦克风和嘴有没有接在一起。
这仍然是嘴部动作迁移,不是逐像素复制原嘴形。大侧脸、模糊帧、遮挡和多人交叉都可能出错。下载包里的口型脚本是我在 Linux 环境使用的进阶参考,需要单独安装 LivePortrait 和相应权重。
高清和残影怎么检查?
1080p 文件,不代表新生成的人脸每个细节都有 1080p。我保留了原片的 1080p 背景,人物则按遮罩裁剪后生成,再贴回原尺寸。人物区域的分辨率、原镜头清晰度、脸在画面里的大小,都会影响最后效果。
脸糊了,先检查原片、人物裁剪范围、生成尺寸和压缩;超分放到后面。这次清理版没有加入整段高清增强,人物清晰度仍由前面的生成结果决定。
“残影”也要看原因。这张同帧对照里,墙上的头部、手部投影在原片里就存在。换人时背景保留下来,旧投影的轮廓没跟着改,看着就像多了一层人。
这处可以局部修背景,不必因此重做整段。另一种常见重影,是已经合成好的视频又被旧人物遮罩混合了一次,原头发和帽子重新透出来;这种要修合成链路。
我最后会逐镜看身份、衣服、人数、道具和边缘,再连续播放检查嘴形与切点。原唱则解码成 PCM,比对对应时间段的样本。这次 77.33 秒版本通过了原唱前缀的逐样本一致性检查,水印覆盖音箱的位置仍有少量修补纹理。
在公众号后台回复关键词「人物替换」,获取完整工作流
资料包里有作者的 V1 原生 GUI 工作流、本次单角色蒙版 API 配方、预处理节点、Prompt、口型参考脚本、音视频检查工具,以及部署说明和本文配图。先读根目录的使用说明,选 GUI 或进阶 API 入口。
模型权重、原 MV 和歌曲不放进包里,按项目说明另行准备。包内配图用于理解流程,不是已配对的视频输入。示例为 AI 换人演示,公开分享时应明确标注;模型使用范围按原项目许可执行。
先让一个短镜头的脸、衣服、道具和嘴形都过关,再做下一段。批量排队很容易,逐镜找出哪里错了,才是这类 MV 最花时间的部分。

