ComfyUI 图生视频:从单帧到动态
本文用于 综合预览:同一篇 Markdown 里嵌套文本、表格、Python、JSON、图片、视频、内外链接等,方便检查站点在「混合内容」下的排版与媒体表现。
一句话:图生视频(Image-to-Video / I2V)以一张(或一组)静态图为条件,生成时间连贯的短视频;ComfyUI 则用节点图把模型、采样、编码解码串起来。
1. 概念速览
1.1 和文生视频的关系
| 模式 | 条件输入 | 典型用途 | 可控性 |
|---|---|---|---|
| 文生视频 T2V | 文本提示词 | 从零创作镜头 | 语义灵活,画面易跑偏 |
| 图生视频 I2V | 首帧/关键帧图 + 可选文本 | 让已有角色/场景动起来 | 外观更稳,动作靠模型与参数 |
| 视频续写 / 插帧 | 已有视频片段 | 延长、补帧、升格 | 依赖时序模型 |
1.2 常见管线角色
- 条件编码器:把图像(及文本)编成 latent / embedding
- 时序扩散 / DiT 等:在时间维上生成或细化视频 latent
- VAE 解码:latent → 像素帧序列
- (可选)上采样 / 插帧 / 音频:后处理成成片
更系统的媒体侧背景可参考站内:AI生成式媒体_图像视频音频_认知手册。
2. 输入输出约定(示意)
2.1 推荐输入
- 分辨率:尽量贴合模型训练分辨率(如 512 / 768 / 1024 一侧对齐)
- 画幅:固定比例(16:9、9:16、1:1),避免半路改画幅导致裁切乱跳
- 内容:主体清晰、背景不过分杂乱;极端透视或大量小字容易糊
2.2 输出常见参数
| 参数 | 含义 | 实践提示 |
|---|---|---|
frames / num_frames |
总帧数 | 与时长、fps 联动:时长 ≈ 帧数 / fps |
fps |
帧率 | 8–24 常见;过低顿挫,过高算力暴涨 |
motion_bucket / motion_scale |
运动强度 | 过大易糊、结构崩;过小几乎静帧 |
seed |
随机种子 | 固定种子便于 A/B 对比提示词与步数 |
steps / cfg |
采样步数与引导 | 步数↑更稳更慢;CFG 过高易过曝纹理 |
3. 代码示例:Python 侧组装任务描述
下面不是某一固定 ComfyUI 节点的官方 API,而是 任务描述 JSON 的构造示例,方便和自动化脚本对接。
from __future__ import annotations
import json
from dataclasses import asdict, dataclass
from pathlib import Path
from typing import Any
@dataclass
class I2VJob:
"""图生视频任务描述(示意)"""
image_path: str
prompt: str
negative_prompt: str = "blurry, low quality, watermark, text"
width: int = 768
height: int = 432
num_frames: int = 49
fps: int = 12
steps: int = 25
cfg: float = 6.5
seed: int = 42
motion_scale: float = 1.0
def duration_sec(self) -> float:
return self.num_frames / max(self.fps, 1)
def to_workflow_payload(self) -> dict[str, Any]:
return {
"task": "image_to_video",
"engine": "comfyui",
"inputs": {
"image": self.image_path,
"prompt": self.prompt,
"negative_prompt": self.negative_prompt,
},
"video": {
"width": self.width,
"height": self.height,
"num_frames": self.num_frames,
"fps": self.fps,
"motion_scale": self.motion_scale,
},
"sample": {
"steps": self.steps,
"cfg": self.cfg,
"seed": self.seed,
},
"meta": {
"duration_sec": round(self.duration_sec(), 3),
"notes": "示例 payload,具体字段需映射到实际节点",
},
}
def save_payload(job: I2VJob, out: Path) -> None:
payload = job.to_workflow_payload()
out.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8")
print(f"written: {out} (~{payload['meta']['duration_sec']}s)")
if __name__ == "__main__":
job = I2VJob(
image_path="/content/image/1.jpg",
prompt="slow camera push-in, soft wind, cinematic lighting, high detail",
num_frames=36,
fps=12,
seed=20260729,
)
save_payload(job, Path("i2v_job.json"))
4. JSON 示例:任务 payload
与上一节 Python 输出结构对应的示例:
{
"task": "image_to_video",
"engine": "comfyui",
"inputs": {
"image": "/content/image/1.jpg",
"prompt": "slow camera push-in, soft wind, cinematic lighting, high detail",
"negative_prompt": "blurry, low quality, watermark, text"
},
"video": {
"width": 768,
"height": 432,
"num_frames": 36,
"fps": 12,
"motion_scale": 1.0
},
"sample": {
"steps": 25,
"cfg": 6.5,
"seed": 20260729
},
"meta": {
"duration_sec": 3.0,
"notes": "示例 payload,具体字段需映射到实际节点"
}
}
也可对照站内其它 JSON 样例:notes/data.json。
5. 媒体嵌入:图片
下面用站内已有图片(同步到 public/files),检查 正文内嵌图 是否居中、是否撑破中间栏。

第二张(PNG):

第三张:

单独全页预览(侧栏打开资源页)也可点:
6. 媒体嵌入:视频
图生视频的结果形态就是视频。下面用站内样例 mp4 检查 HTML5 video 在文档中的表现(controls + preload=metadata)。
6.1 样例 A
6.2 样例 B(中文文件名)
- 全页预览:赤坂のカーブ.mp4
- 相关音频(对照多媒体路由):赤坂のカーブ.mp3
7. ComfyUI 工作流心智模型(文字)
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ Load Image │────▶│ Encode / Cond│────▶│ I2V Model │
└─────────────┘ └──────────────┘ └──────┬──────┘
│ latent frames
┌──────────────┐ ▼
│ Text Encode │◀── optional
└──────────────┘
│
▼
┌─────────────┐
│ VAE Decode │
└──────┬──────┘
│
▼
┌─────────────┐
│ Save Video │
└─────────────┘
实践建议(检查列表):
- 模型与 VAE 版本匹配,避免色偏/条纹
- 首帧图颜色空间与预处理一致(是否自动 resize)
- 显存不够时:降分辨率、减帧、开 tiling / sequential offload
- 成片后人工扫:脸崩、肢体抖动、背景闪烁
8. 提示词写法(简表)
| 目标 | 可写方向 | 少写 |
|---|---|---|
| 镜头 | slow pan, gentle zoom-in, tracking shot | 突然 360 环绕(易崩) |
| 运动 | hair lightly moving, fabric flutter, idle breath | 剧烈打斗、复杂多人交互 |
| 画质 | cinematic lighting, sharp subject, natural motion | 堆砌 50 个画质词 |
| 稳定 | consistent character, same outfit | 要求「完全换装」同时大动作 |
英文示例(可直接试):
soft daylight, subtle camera drift left, leaves gently moving, shallow depth of field, natural skin texture
中文思路: 先写「镜头怎么动」→「主体做什么小动作」→「光与质感」→「要避免什么」放进 negative。
9. 链接区(站内 + 站外)
9.1 站内
| 链接 | 说明 |
|---|---|
| 主页 | 入口 |
| guides/example | 普通 md 样例 |
| script/game_ui_design.py | 代码资源页 |
| notes/sample.pdf | PDF 内嵌预览 |
9.2 站外参考(概念资料)
10. 排版自检清单(给本站用)
用本页滚动检查:
- 大纲是否出现本节各级标题(含 h1/h2/h3)
- 宽表是否在中间栏内铺开或可横向滚动
- 代码块 Python / JSON 是否高亮且不溢出
- 多图是否居中、间距是否舒适
- 视频是否可播放、宽度是否跟中间栏
- 内外链接是否可点;底栏 上一页 / 下一页 是否仍贴底
11. 小结
- 图生视频 = 以图锁定外观 + 以模型/参数控制运动与镜头
- ComfyUI = 节点化编排上述管线,便于换模型、插后处理
- 本页刻意堆了 文本 · 表格 · Python · JSON · 图片 · 视频 · 链接,作为混合内容回归样例;真正跑通节点时,以你本机安装的 I2V 工作流与模型卡为准
如需下一篇可写:「ComfyUI I2V 节点对照表」 或 「常见花屏 / 闪烁排查」。