WebMD
本页大纲

ComfyUI 图生视频:从单帧到动态

本文用于 综合预览:同一篇 Markdown 里嵌套文本、表格、Python、JSON、图片、视频、内外链接等,方便检查站点在「混合内容」下的排版与媒体表现。

一句话:图生视频(Image-to-Video / I2V)以一张(或一组)静态图为条件,生成时间连贯的短视频;ComfyUI 则用节点图把模型、采样、编码解码串起来。


1. 概念速览

1.1 和文生视频的关系

模式 条件输入 典型用途 可控性
文生视频 T2V 文本提示词 从零创作镜头 语义灵活,画面易跑偏
图生视频 I2V 首帧/关键帧图 + 可选文本 让已有角色/场景动起来 外观更稳,动作靠模型与参数
视频续写 / 插帧 已有视频片段 延长、补帧、升格 依赖时序模型

1.2 常见管线角色

  1. 条件编码器:把图像(及文本)编成 latent / embedding
  2. 时序扩散 / DiT 等:在时间维上生成或细化视频 latent
  3. VAE 解码:latent → 像素帧序列
  4. (可选)上采样 / 插帧 / 音频:后处理成成片

更系统的媒体侧背景可参考站内: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),检查 正文内嵌图 是否居中、是否撑破中间栏。

示例静帧 1

第二张(PNG):

示例静帧 2

第三张:

示例静帧 3

单独全页预览(侧栏打开资源页)也可点:


6. 媒体嵌入:视频

图生视频的结果形态就是视频。下面用站内样例 mp4 检查 HTML5 video 在文档中的表现(controls + preload=metadata)。

6.1 样例 A

6.2 样例 B(中文文件名)


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. 排版自检清单(给本站用)

用本页滚动检查:

  1. 大纲是否出现本节各级标题(含 h1/h2/h3)
  2. 宽表是否在中间栏内铺开或可横向滚动
  3. 代码块 Python / JSON 是否高亮且不溢出
  4. 多图是否居中、间距是否舒适
  5. 视频是否可播放、宽度是否跟中间栏
  6. 内外链接是否可点;底栏 上一页 / 下一页 是否仍贴底

11. 小结

  • 图生视频 = 以图锁定外观 + 以模型/参数控制运动与镜头
  • ComfyUI = 节点化编排上述管线,便于换模型、插后处理
  • 本页刻意堆了 文本 · 表格 · Python · JSON · 图片 · 视频 · 链接,作为混合内容回归样例;真正跑通节点时,以你本机安装的 I2V 工作流与模型卡为准

如需下一篇可写:「ComfyUI I2V 节点对照表」「常见花屏 / 闪烁排查」