AI短剧系列 | 第 10 天:ComfyUI 关键帧与分镜——多镜头序列工作流搭建

欢迎回到 AI 短剧系列。前几篇我们完成了 ComfyUI 的安装、基础工作流、角色一致性控制,以及 AnimateDiff 视频生成实战。今天我们要解决一个短剧创作中至关重要的问题:如何把多个镜头串成一段有叙事感的完整片段。单个 2~4 秒的镜头只是素材,真正的短剧需要镜头之间的切换、景别变化与节奏控制。本篇将带你搭建一套「关键帧 + 分镜」驱动的多镜头序列工作流,让你用 ComfyUI 就能产出一段可剪辑的分镜素材。

AI短剧 第10天

为什么短剧需要关键帧与分镜

短剧的核心是「信息密度」与「情绪节奏」。一个 60 秒的短剧片段,通常由 8~15 个镜头组成,每个镜头承担不同的叙事功能:交代环境(远景)、展示人物动作(中景)、强调表情(特写)。如果只靠单一提示词一次性生成长视频,角色动作会失控、场景会漂移、风格会崩塌。

关键帧(Keyframe)的本质,是在时间轴上「钉住」某些必须保持稳定的画面——比如人物开场时的站位、转身后的朝向、镜头的起始构图。分镜(Storyboard)则把这些关键帧按叙事顺序排列,形成一条可复用的生产流水线。掌握了这两者,你就能从「碰运气出片」进阶到「按计划生产」。

核心概念:关键帧在 ComfyUI 中的三种形态

在 ComfyUI 生态里,关键帧通常通过以下三种方式落地,理解它们的区别是搭工作流的前提:

  • 图像关键帧(Image Keyframe):用一张确定构图的参考图,作为 AnimateDiff 或视频节点的首帧,锁定镜头起点。
  • 提示词关键帧(Prompt Keyframe):在时间轴的不同区间切换提示词,实现「镜头 A 推镜头 B」的语义变化。
  • 控制网关键帧(ControlNet Keyframe):用深度图、边缘图、姿态图等控制信号,约束每一帧的结构不跑偏。

下面我们用一个完整的多镜头工作流,把这三种关键帧组合起来。

实战步骤:搭建多镜头序列工作流

第一步:准备分镜脚本 JSON

先用 JSON 描述你的分镜,包括镜头编号、持续时间、提示词、起始关键帧图像路径。这样后续节点可以批量读取:

{
  "shots": [
    {
      "id": 1,
      "duration_frames": 32,
      "prompt": "远景,城市夜晚街头,女主撑伞站立,霓虹灯倒影,电影感",
      "keyframe_image": "keyframes/shot01_start.png"
    },
    {
      "id": 2,
      "duration_frames": 24,
      "prompt": "中景,女主转身回眸,雨滴滑落,浅景深",
      "keyframe_image": "keyframes/shot02_start.png"
    },
    {
      "id": 3,
      "duration_frames": 16,
      "prompt": "特写,女主眼神坚定,湿发贴在脸颊,情绪张力",
      "keyframe_image": "keyframes/shot03_start.png"
    }
  ]
}

第二步:加载 AnimateDiff 运动模块

视频生成的核心是 AnimateDiff 运动模块(Motion Module)。在 ComfyUI 中加载它,并设置帧数与帧率:

# ComfyUI 节点配置示意(AnimateDiff Loader)
motion_module = "mm_sd_v15_v2.ckpt"
frames = 32          # 单镜头帧数
fps = 8              # 每秒帧数,短剧常用 8~12
# 输出一个 4 秒的镜头(32 / 8 = 4 秒)

第三步:用批量提示词节点切换镜头语义

使用 Batch Prompt Schedule(批量提示词调度)节点,让不同镜头区间的提示词自动切换。时间轴按帧数切分:

# Batch Prompt Schedule 配置
prompt_schedule:
  - frame: "0"
    text: "远景,城市夜晚街头,女主撑伞站立,霓虹灯倒影,电影感"
  - frame: "32"
    text: "中景,女主转身回眸,雨滴滑落,浅景深"
  - frame: "56"
    text: "特写,女主眼神坚定,湿发贴在脸颊,情绪张力"

第四步:用 Load Image 批量挂载关键帧首图

每个镜头的第一帧,用 Load Image (Batch)Load Image List from Dir 节点挂载对应的关键帧图像,锁定镜头起点构图:

# Load Image List from Dir 节点配置
input_directory = "keyframes/"
pattern = "shot*.png"
# 节点会按文件名顺序输出图像批次,作为 AnimateDiff 的 latent 初始化

第五步:串联 ControlNet 保持结构稳定

为避免长镜头中人物结构崩坏,接入 ControlNet,用深度图或姿态图约束每一帧。以深度控制为例:

# ControlNet Apply 节点配置
control_net_model = "control_v11f1p_sd15_depth.pth"
strength = 0.85          # 控制强度,越高结构越稳定
start_percent = 0.0      # 从第 0 帧开始控制
end_percent = 1.0        # 控制到最后一帧

把以上五步按顺序连线:分镜 JSON → Load Image → ControlNet → AnimateDiff → KSampler → VAE Decode → Save Video,就得到一段三镜头连续输出的素材。

常见问题

Q:镜头切换时画面会「跳」怎么办?
关键帧之间的过渡需要给足 overlap(重叠帧)。在 AnimateDiff 或视频插值节点中设置 2~4 帧的重叠,让上一个镜头的尾帧与下一个镜头的首帧自然融合。若仍跳变,检查两个镜头的 ControlNet 强度是否一致。

Q:批量提示词切换时角色外观漂移了?
提示词本身不承载角色外观。务必配合上一篇讲的 LoRA 与参考图(IPAdapter/ControlNet)锁定角色一致性,提示词只负责景别、动作与情绪。

Q:为什么生成的视频时长对不上?
视频时长 = 帧数 / fps。先确定目标时长,再反推帧数。短剧镜头一般 2~4 秒,fps 取 8 时对应 16~32 帧。帧数太大容易崩,帧数太小没动作。

Q:批量挂载关键帧后第一帧颜色发灰?
检查 Load Image 输出的图像是否经过了正确的 VAE 编码,以及 ControlNet 预处理是否匹配模型类型(深度图用 depth,姿态用 openpose)。预处理不匹配会导致控制信号错误。

总结

今天我们把 ComfyUI 的「单镜头生成」升级到了「多镜头序列生产」:用 JSON 定义分镜、用批量提示词调度切换语义、用 Load Image 挂载关键帧首图、用 ControlNet 锁定结构稳定。这套工作流是你从「做一段动图」迈向「做一条短片」的关键一步。下一阶段,我们将进入 ComfyUI 的高级技巧——自定义节点、批处理与性能优化,让这条流水线跑得更快、更省显存。

下期预告:第 11 天《ComfyUI 高级技巧——自定义节点、批处理与性能优化》,教你用自定义节点扩展能力、用批处理解放双手、用显存优化把单卡跑出多卡效率,敬请期待。

微信二维码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容