title: Wan2.2 视频生成工作流详解:从图片到动画的完整技术链路
date: 2025-03-24
tags: [ComfyUI, Wan2.2, AI视频, 图生视频, 工作流]
category: 学习笔记
author: website-manager
Wan2.2 视频生成工作流详解:从图片到动画的完整技术链路
前言
Wan2.2 是阿里通义万相团队开源的图生视频(Image-to-Video)模型,采用双专家架构设计。本文将详细拆解两份 ComfyUI 工作流:GGUF 量化版和 FP8 原生版,从零讲解视频生成的每一个技术环节。
一、核心概念:视频生成的本质
什么是”去噪”?
视频生成的本质是从噪声中雕刻出画面:
- 起点:一张充满随机噪声的潜空间图像
- 过程:每一步让模型去掉一点噪声,逐步清晰
- 终点:噪声变成了连贯的视频帧
就像雕刻:从一块石头(噪声)里,一刀一刀(每一步)削出雕像(视频)。
什么是”潜空间”?
- 直接在高分辨率像素空间计算 → 显存爆炸,速度极慢
- 在压缩后的潜空间计算 → 速度快,显存友好
- VAE(变分自编码器)负责压缩/解压的转换
二、整体数据流
输入图片 ──┐
├──→ WanImageToVideo ──→ KSampler(高噪) ──→ KSampler(低噪) ──→ VAE解码 ──→ 保存视频
提示词 ────┘
三、GGUF 量化版详解
第一步:准备原材料
1. 加载图片(LoadImage)
- 上传的参考图作为视频的”第一帧”
- 模型基于这张图生成后续帧的运动
2. 加载文本编码器(CLIPLoader)
- 模型:
umt5_xxl_fp8_e4m3fn_scaled.safetensors - 作用:把中文/英文提示词翻译成模型能理解的”数字向量”
- 模型不认字,只认向量,CLIP 就是”翻译官”
3. 正/反向提示词(CLIPTextEncode)
- 正向:你想要的画面(如”角色缓慢移动,镜头推进”)
- 反向:你不想要的(如”静止、模糊、变形”)
- 编码后变成两组条件向量,供采样器使用
4. 加载 VAE(VAELoader)
- VAE = 变分自编码器
- 核心功能:
- 编码:把真实图片压缩到潜空间
- 解码:把潜空间结果解压回真实像素
- 生成过程全程在潜空间进行,VAE 只在最后一步工作
5. 加载双 UNet(UnetLoaderGGUF ×2)
这是 Wan2.2 的核心:双专家架构
| 专家 | 文件名 | 职责 |
|---|---|---|
| 高噪专家 | wan2.2_i2v_high_noise_14B_Q4_K_S.gguf |
视频的”骨架”——运动轨迹、大结构 |
| 低噪专家 | wan2.2_i2v_low_noise_14B_Q4_K_S.gguf |
视频的”皮肤”——细节、纹理、光影 |
两个专家接力运行,不是同时跑:
– 高噪专家先跑前半段(搭骨架)
– 低噪专家后跑后半段(补细节)
第二步:潜空间初始化(WanImageToVideo)
这是整个流程的”启动器”,做三件事:
- 编码图片:用 VAE 把输入图片压缩到潜空间
- 生成噪声:根据帧数创建随机噪声视频
- 打包条件:把提示词向量和噪声视频打包,送给采样器
关键参数
| 参数 | 含义 | 影响 |
|---|---|---|
width/height |
输出分辨率 | 越大越清晰,显存和时间暴涨 |
length |
帧数 | 16fps 下:81帧≈5秒,33帧≈2秒 |
batch_size |
并行数 | 16GB 显存必须设为 1 |
默认配置:480×832,81帧(竖版 5 秒视频)
此时得到:一坨有结构的噪声(包含了图片信息和文本信息)
第三步:去噪采样(核心生成过程)
ModelSamplingSD3(噪声调度器)
在送进采样器之前,给模型套一个”噪声调度策略”。
| 参数 | 作用 |
|---|---|
shift |
控制噪声分布的偏移 |
| GGUF 版值 | 8(早期下刀更重,构图更果断) |
第一个 KSamplerAdvanced(高噪专家——粗雕阶段)
| 参数 | 值 | 含义 |
|---|---|---|
add_noise |
enable |
往潜空间加随机噪声,这是起点 |
noise_seed |
随机 | 同一种子+同一提示词=同一结果 |
steps |
20 |
总共要走 20 步去噪 |
cfg |
3.5 |
提示词引导强度(下文详解) |
sampler_name |
euler |
去噪算法,稳定且快 |
scheduler |
simple |
噪声均匀衰减 |
start_at_step |
0 |
从第 0 步开始 |
end_at_step |
10 |
到第 10 步停下 |
return_with_leftover_noise |
enable |
保留剩余噪声,交给下一个采样器 |
这一阶段:高噪专家从第 0 步到第 10 步,把运动骨架搭好。
第二个 KSamplerAdvanced(低噪专家——精雕阶段)
| 参数 | 值 | 含义 |
|---|---|---|
add_noise |
disable |
不再加新噪声,接着上一步 |
noise_seed |
0, fixed |
种子固定,保持一致性 |
steps |
20 |
总步数 20(和上面一致) |
start_at_step |
10 |
从第 10 步接着来 |
end_at_step |
10000 |
跑到第 20 步结束 |
return_with_leftover_noise |
disable |
完全去干净,输出结果 |
这一阶段:低噪专家从第 10 步到第 20 步,把细节补好。
CFG(Classifier-Free Guidance)详解
CFG = 模型"听不听话"的程度
- CFG = 1:模型自由发挥,提示词仅供参考
- CFG = 3-5:平衡,提示词有较强引导但不过度
- CFG > 7:提示词绝对服从,容易过拟合/画面僵硬
Wan2.2 推荐 CFG = 3.5,这是经过调优的甜点值。
第四步:解码回真实画面(VAEDecode)
- 把潜空间的”压缩视频”解压回真实像素
- 这一步比较吃显存(尤其高分辨率时)
- 显存不足时可加
--cpu-vae扔给 CPU
第五步:保存输出
| 节点 | 输出格式 | 参数 |
|---|---|---|
SaveWEBM |
.webm |
fps=16, crf=13(压缩质量) |
SaveAnimatedWEBP |
.webp |
fps=16, quality=80 |
四、FP8 原生版详解
外层结构
FP8 版用子图(Subgraph)封装了复杂逻辑,外层只有 4 个节点:
LoadImage → Image to Video (Wan2.2) → SaveVideo
子图暴露的输入口
| 输入口 | 含义 |
|---|---|
start_image |
输入图片 |
prompt |
正向提示词 |
width/height/length |
分辨率和帧数 |
sampler_name |
采样算法 |
high_noise/low_noise |
双 UNet 文件名 |
enable_turbo_mode |
4步快速模式开关 |
子图内部结构(6 个区域)
区域 1:Models(模型加载)
| 组件 | 文件 |
|---|---|
| 高噪 UNet | wan2.2_i2v_high_noise_14B_fp8_scaled.safetensors |
| 低噪 UNet | wan2.2_i2v_low_noise_14B_fp8_scaled.safetensors |
| 加载节点 | UNETLoader(原生,非 GGUF) |
区域 2:Prompt(提示词编码)
- 与 GGUF 版相同
区域 3:Video size & length
- WanImageToVideo:512×512, length=33
区域 4:Original Settings(标准模式)
| 参数 | 值 | 场景 |
|---|---|---|
| Steps | 20 | 慢但稳 |
| CFG | 3.5 | 标准引导 |
| split_step | 10 | 第 10 步切换 |
区域 5:4steps Light LoRA(Turbo 模式)
| 参数 | 值 | 场景 |
|---|---|---|
| Steps | 4 | 极快 |
| CFG | 1 | 低引导(LoRA 自带方向) |
| split_step | 2 | 第 2 步切换 |
| LoRA | wan2.2_i2v_4steps_lora.safetensors |
注入到双 UNet |
区域 6:切换开关区
5 个 ComfySwitchNode 由 enable_turbo_mode 统一控制:
| Switch | 功能 | false |
true |
|---|---|---|---|
| Model ×2 | 高/低噪模型 | 原始 UNet | UNet + LoRA |
| Steps | 总步数 | 20 | 4 |
| CFG | 引导强度 | 3.5 | 1.0 |
| Split Step | 切换点 | 10 | 2 |
一个开关同时切换 5 个参数,这就是子图封装的好处。
五、两版对比总结
| 项目 | FP8 版 | GGUF 版 |
|---|---|---|
| 模型格式 | .safetensors FP8 |
.gguf Q4_K_S |
| 加载节点 | UNETLoader |
UnetLoaderGGUF |
| 显存占用 | 较高(FP8) | 较低(Q4 量化) |
| 画质 | 原生精度 | 轻微压缩 |
| 有无 LoRA | ✅ 可开关 Turbo | ❌ 无 |
| 结构 | 子图封装 | 扁平直接 |
| shift | 5 | 8 |
| 默认分辨率 | 512×512 | 480×832 |
| 默认帧数 | 33 | 81 |
| 输出格式 | SaveVideo |
SaveWEBM + WEBP |
六、参数调优指南
按重要性排序
| 优先级 | 参数 | 建议 |
|---|---|---|
| ⭐⭐⭐⭐⭐ | width/height |
先定死再调其他,显存杀手 |
| ⭐⭐⭐⭐⭐ | length |
帧数直接决定时间 |
| ⭐⭐⭐⭐ | steps |
20 步标准,4 步极速 |
| ⭐⭐⭐ | cfg |
3.5 默认,别超 5 |
| ⭐⭐⭐ | split_step |
高噪占比,影响运动幅度 |
| ⭐⭐ | shift |
5-8 之间,影响早期构图 |
| ⭐⭐ | seed |
换种子换结果,用于抽卡 |
| ⭐ | batch_size |
16GB 显存 = 1 |
七、一句话总结
你的图 + 你的文字 → 压缩成噪声 → 高噪专家削大形(0→10步)→ 低噪专家补细节(10→20步)→ 解压回画面 → 保存成视频。
这就是 Wan2.2 图生视频的完整技术链路。
参考资源
本文档由 website-manager 自动整理生成