基于ComfyUI 本地部署的「图像 + 音频 → 口型匹配 + 自动运镜」MV 全流程指南
适用人群:有一定电脑(Windows / macOS / Linux)操作经验、显卡(GPU)支持 CUDA/ROCm、能自行安装 Python 第三方库的技术爱好者。
目标:输入一张人像图片 + 一段伴奏/人声音频,自动生成带口型同步、镜头运动(运镜)的短视频(MV)。
1️⃣ 项目概览
| 步骤 | 关键技术/模型 | 说明 |
|---|---|---|
| 1️⃣音频 → 文本 / 音素时间轴 | Whisper(ASR)+VITS‑TTS(可选)或OpenAI‑Whisper+g2p | 获得句子、音素序列以及每个音素的时间戳(用于口型驱动)。 |
| 2️⃣音素时间轴 → 口型控制参数 | Voca‑Sync或Wav2Lip‑Sync‑Extractor | 把音素时间轴转化为 Wav2Lip/ SadTalker 所需的landmark / pose参数。 |
| 3️⃣静态人像 → 动态口型 | SadTalker/Audio‑Driven Talking‑Head(如LivePortrait、Wav2Lip‑3D) | 基于音素/姿态生成逐帧人脸动画(口型、眉眼微动)。 |
| 4️⃣运镜(摄像机轨道) | ComfyUI‑Camera‑Motion(自研节点)或Stable‑Diffusion‑Video‑2‑Depth+motion‑interpolation | 生成镜头平移、缩放、推拉等运动轨迹并把它们映射到渲染帧上。 |
| 5️⃣合成 & 后期 | ComfyUI‑Video‑Edit、FFmpeg | 将动画帧、背景层、运镜信息合成为最终的视频文件,压缩、调色。 |
| 6️⃣渲染 | ComfyUI‑Latent‑Video‑Video或ComfyUI‑Animation‑Scheduler | 把每个帧的 latent → pixel,输出 MP4。 |
核心节点(后面会给出完整 JSON 示例)
Whisper ASR→Phoneme Extractor→SadTalker (Audio‑Driven Face)→Camera Motion Generator→Video Composite→FFmpeg Encoder
2️⃣ 环境准备
| 项目 | 最低/推荐配置 |
|---|---|
| OS | Windows 10/11 (64‑bit) 或 Ubuntu 20.04+ 或 macOS 12+ |
| CPU | 任意 8 核心以上(渲染时多线程可加速) |
| GPU | NVIDIA RTX 3060 (12 GB) 以上或AMD RDNA2/3 with ROCm 5.4+;VRAM≥8 GB推荐。 |
| Python | 3.10.x(不建议3.11+,部分扩展仍在兼容) |
| CUDA/ROCm | 对应显卡的驱动 + CUDA 11.8(或 ROCm 5.4) |
| 磁盘 | 20 GB 以上空余(模型+生成数据) |
Tip:如果你的显存不足,可以在 SadTalker 中打开半精度(fp16),或使用LivePortrait的轻量版。
3️⃣ 软件安装步骤
所有命令均在终端(PowerShell / Terminal / CMD)下执行
3.1 创建虚拟环境 & 安装依赖
# 1) 创建项目文件夹mkdircomfyui-mv&&cdcomfyui-mv# 2) 建立 Python 虚拟环境python-mvenv .venv# Windows.venv\Scripts\activate# macOS / Linuxsource.venv/bin/activate# 3) 升级 pip、setuptoolspipinstall--upgradepip setuptools wheel# 4) 安装 ComfyUI(官方仓库)gitclone https://github.com/comfyanonymous/ComfyUI.gitcdComfyUI pipinstall-rrequirements.txt如果报错
torch版本不匹配,请手动安装对应 CUDA 版本的torch:
# 示例:CUDA 11.8(Linux)pipinstalltorch==2.2.0+cu118torchvision==0.17.0+cu118torchaudio==2.2.0+cu118-fhttps://download.pytorch.org/whl/torch_stable.html3.2 安装常用扩展(ComfyUI‑Custom‑Nodes)
cd../ComfyUI/custom_nodes# Whisper(OpenAI Whisper + pyannote)gitclone https://github.com/kohya-ss/ComfyUI-Whisper.git# SadTalker(音频驱动的 Talking‑Head)gitclone https://github.com/KohakuBlueleaf/ComfyUI-SadTalker.git# Wav2Lip(口型同步提取器,用于精细控制)gitclone https://github.com/xxzy/ComfyUI-Wav2LipSync.git# Camera Motion (自研节点,可自行下载 release 包)gitclone https://github.com/YourName/ComfyUI-Camera-Motion.git# Video Post‑Processing (FFmpeg Wrapper)gitclone https://github.com/ltdrdata/ComfyUI-Video-Tools.git后续:每个仓库里通常都有
requirements.txt,进入对应文件夹执行pip install -r requirements.txt(大多数已经在主环境中安装了,要确保opencv-python,ffmpeg-python,moviepy等已装)。
3.3 下载模型文件(≈2 GB+)
| 模型 | 下载地址 | 放置目录 (ComfyUI) |
|---|---|---|
| Whisper large‑v2 | https://huggingface.co/openai/whisper-large-v2 | ComfyUI/models/whisper/whisper-large-v2/ |
| SadTalker (GFPGAN + wav2lip) | https://huggingface.co/face-anim/SadTalker/ | ComfyUI/custom_nodes/ComfyUI-SadTalker/models/ |
| Wav2Lip | https://github.com/Rudrabha/Wav2Lip#pre-trained-models | ComfyUI/custom_nodes/ComfyUI-Wav2LipSync/models/ |
| Depth/Control‑Net (用于运镜) | https://huggingface.co/controlnet/control_v11p_sd15_depth | ComfyUI/models/controlnet/ |
| Stable Diffusion 1.5 (可选做背景渲染) | https://huggingface.co/runwayml/stable-diffusion-v1-5 | ComfyUI/models/diffusion/ |
提示:下载后确保文件结构与节点脚本读取路径一致(多数节点会自动寻找
models/xxx/)。
4️⃣ 工作流(Workflow)设计思路
下面用流程图形式罗列关键节点,随后给出完整的 ComfyUI JSON(可直接导入)。
┌───────────────────────┐ │ 1️⃣ Audio (wav/mp3) │ └───────┬───────────────┘ ▼ ┌───────────────────────┐ │ 2️⃣ Whisper ASR + │ │ Phoneme Extractor │ └───────┬───────────────┘ ▼ ┌───────────────────────┐ │ 3️⃣ Wav2Lip Sync │ <-- 生成 "mouth‑shape" 参数序列(LIP‑coeffs) | └───────┬───────────────┘ ▼ ┌───────────────────────┐ │ 4️⃣ SadTalker (Audio‑ │ │ Driven Face) │ <-- 依据音素/嘴形生成逐帧人脸动画 | └───────┬───────────────┘ ▼ ┌───────────────────────┐ │ 5️⃣ Camera Motion │ <-- 生成 “pan / zoom / dolly” 轨迹(2‑3 秒关键帧) | │ (Bezier / Random)│ └───────┬───────────────┘ ▼ ┌───────────────────────┐ │ 6️⃣ Video Composite │ <-- 把人脸动画贴到背景、添加摄像机变换 | │ (Background + │ │ Depth‑ControlNet) │ └───────┬───────────────┘ ▼ ┌───────────────────────┐ │ 7️⃣ FFmpeg Encode │ <-- 合并音频、帧率 (30 fps) → MP4 | └───────────────────────┘4.1 关键节点功能说明
| 节点名(示例) | 来源(哪个扩展) | 主要输入 | 主要输出 |
|---|---|---|---|
Audio Load | ComfyUI 原生 | 本地路径(wav/mp3) | audio_tensor |
Whisper Transcribe | ComfyUI‑Whisper | audio_tensor | text,timestamps(每段文字的起止时间) |
Phoneme Extractor | 本仓库(自研) | text,timestamps | phoneme_seq,phoneme_times |
Wav2Lip Sync Extractor | ComfyUI‑Wav2LipSync | audio_tensor | lip_coeffs(每帧嘴形系数) |
SadTalker Generate | ComfyUI‑SadTalker | source_image,audio_tensor,lip_coeffs | frames(RGBA 序列) |
Camera Motion Generator | ComfyUI‑Camera‑Motion | frames或frame_count | camera_matrix_seq(每帧 3×3 仿射矩阵) |
Video Composite | ComfyUI‑Video‑Tools | frames,camera_matrix_seq,background_image | composited_frames |
FFmpeg Encoder | ComfyUI‑Video‑Tools | composited_frames,audio_tensor | output.mp4 |
5️⃣ 完整的 ComfyUI Workflow(JSON)
将以下代码复制为
mv_workflow.json,在 ComfyUI 界面 →“Load workflow”中导入即可。
*注:本工作流使用了上面列出的所有第三方节点,请确保已经安装并下载模型。
{"last_node_id":32,"last_link_id":43,"nodes"</