输入
文件读取
- 从
story/episodes/$ARGUMENTS[0]/outline.md的「本集资产清单」中提取本集引用的资产名称 - 使用 Glob 获取
assets/**/*.md全部文件路径列表,仅读取文件名与清单中资产名称匹配的文件 story/episodes/$ARGUMENTS[0]/keyframes.json— 必须读取(关键帧描述与序号,决定每个 shot 引用哪些 keyframe)- 使用 Glob 获取
assets/keyframes/$ARGUMENTS[0]/*.md— 必须列出(本集所有关键帧 .md,用于 shot 引用) story/episodes/$ARGUMENTS[0]/script.md— 必须读取story/episodes/$ARGUMENTS[0]/outline.md— 必须读取(含资产清单)config.md— 必须读取skills/short-storyboard/rules.md— 必须读取并严格遵循(输出格式、字段约束、规则)
动态参数($ARGUMENTS)
$ARGUMENTS[0]— 当前集数(如 ep01)
职责描述
核心使命
把短视频剧本转化为完整分镜——每个镜头是即梦视频模型的一次独立提交,提示词必须自包容、画面与声音连贯叙事、状态与上下镜头衔接。每个 shot 必须围绕 keyframes 展开:keyframes.json 是 director 提供的本集视觉锚点序列,每个 shot 必须引用 ≥1 张 keyframe 作为画面参考;相邻 shot 若需要画面连续,应在前 shot 末段与后 shot 起始段引用同一张 keyframe(首尾共享)。下游和 storyboarder-storyboard 相同(即梦视频模型 + short-review-storyboard)。和系列剧分镜不同:单集短视频时长有限(通常 1-3 分钟),铺垫和高潮挤在一集内,分镜密度更高、节奏更紧。
工作思路
整体规划(动笔前):
- 建立三层认知:通读 script + outline,建立三层心理模型——剧情层(铺垫/冲突/高潮/收束的弧线)、信息层(本集需要观众知道的事——主角姓名/身份/伏笔,对照「角色出场」和故事弧线)、状态层(角色的视觉与知识状态如何演变)
- 读 keyframes.json 建立视觉锚点序列:按集内序号通读所有 keyframe 的 narrative_purpose + composition,形成本集"视觉节拍"——每张 keyframe 是一个剧情视觉节点,shot 规划必须围绕这些节点展开
- 划分场景节拍 + 围绕 keyframes 切分 shot:剧本已按场景组织,每个场景内识别关键节拍。按 config「单镜头时长」规划每个 shot 包含哪些 keyframe 对应的剧情——若一个 shot 时长够覆盖多张 keyframe 的画面演进,则该 shot 引用多张 keyframe;若一个 keyframe 的画面需要长时间表现则单 keyframe 撑一个 shot。对照 config「每集分镜数」预算分配镜头——短视频时长有限,节拍数要节制,节拍太多让节奏支离破碎,太少让镜头空洞
- 首尾策略决定:第一镜头——根据故事类型设计开场抓眼方案(紧张/悬念/视觉冲击/共鸣),前几秒决定观众是否继续看;集尾镜头——呼应大纲的「结局设计」(反转/温馨/幽默/...),结局执行必须有力度,最后几秒包含结束转场
每个镜头的设计:
- shot ↔ keyframe 引用映射:本 shot 涵盖的剧情画面对应 keyframes.json 中的哪些 KF-id?两处都要写:(a) 头部「引用资产」字段加入 keyframe 引用(用于人类可读与自检);(b)「画面与声音描述」正文中以
画面参考 [KF-id](path):{叙事}形式引用同一批 keyframe(用于视觉锚定);头部声明与正文引用必须一致。相邻 shot 画面连续时首尾共享同一 keyframe 作为视觉衔接锚 - 节奏曲线分配:短视频节奏比系列剧更紧——铺垫段适度(不能像系列剧那样长),冲突段加快,高潮短而强。若 config「单镜头时长」是范围 → 在范围内按节奏需要灵活分配,不要每个镜头都同样时长;若 config「单镜头时长」是单一数字 → 每个镜头时长必须严格等于该值,节奏曲线只通过镜头数量、内容密度、景别变化来体现。镜头总数遵循 config「每集分镜数」
- 景别按叙事功能选择:远/全景建立场景与空间、中景表现互动与动作戏、近景承载对白和反应、特写放大情绪/关键道具/决定性表情、俯/仰表达力量关系或视角差异。一段戏的景别要有变化——全程同一景别会让短视频更显平淡
- 镜头运动按情绪选择:固定(稳定叙事/对白);推(聚焦关键/情绪积累);拉(揭示全貌/情感后撤);摇/移/跟(跟随角色或揭示空间);升/降(突破或压抑)
- 声音设计层级:信息传达优先用主角内心独白——短视频节奏快,观众无法慢慢推断,内心独白还能增强代入感;其次对白和讨论;最后才是旁白;旁白必须以具体角色口吻并标声音特征;任何镜头不得超过 2s 无声窗
- 状态衔接先于内容:写本镜头前先提取上一镜头结束状态(视觉位置/姿势/手持物 + 知识"已告知什么"),本镜头开头要么直接衔接,要么用一两句写出过渡。任何视觉或知识突变必须有显式过渡描写。衔接通过本镜头自身的描述实现,绝不通过"延续上镜头"等引用实现
- 「画面与声音描述」连贯叙事:每个时间段是一段连贯文字,画面动作与台词自然交织。视觉描述用 AI 视频模型能理解的具体直白语言——直接描写身体姿态、动作轨迹、面部表情、环境细节、光影效果——禁止文学比喻和抽象修辞。禁止画面/台词/音效分栏列项
- 画面文字与不可感知信息处理:招牌/屏幕/信件等画面文字 → 改角色读出(AI 难以稳定渲染文字);气味/温度/触感等不可感知信息 → 改角色台词表达
整集级自检:
- keyframe 覆盖自检:枚举 keyframes.json 中所有 KF-id,每张 keyframe 必须至少被一个 shot 引用;未被引用的 keyframe 必须返工。每个 shot 必须引用 ≥1 张 keyframe——零 keyframe 引用的 shot 必须返工
- 铺垫覆盖:枚举剧本中的铺垫元素+回收点,逐项映射到具体镜头,时序检查。短视频铺垫挤压风险更高,必须保证每个回收点在前都有铺垫镜头
- 时长综合流程:估算非台词时间 → 推算台词可用时间 → 创建阶段心算评估 → 综合判断。短视频总时长本就紧,台词超时风险更高,脚本批量验证不可省
常见误区
- 零 keyframe 引用 shot — 模型容易写出"画面我自己描述就够了"的 shot 而忘了引用 keyframe — 每个 shot 必须引用 ≥1 张 keyframe 作为视觉锚点;自检必查
- 跳过 keyframe — keyframes.json 有 N 张,模型只引用了部分 — 每张 keyframe 必须至少被一个 shot 引用,未被引用必须补
- 相邻 shot 画面连续却不共享 keyframe — 本 shot 结尾画面 = 下 shot 起始画面,但两 shot 引用了不同 keyframe → 视频生成时画面不连续 — 首尾共享同一 keyframe
- 剧本搬运 — 把剧本台词直接搬到镜头「画面与声音描述」里,没做视听设计;剧本是舞台指示,分镜是视频模型提示词,性质不同 — 每镜头先想画面构图(景别/运动/视觉重点),再嵌入台词
- 跨镜头引用 — 模型本能想写"接上镜头",但 dreamina 每镜头独立生成,rules.md 已禁但写流畅故事时本能违反 — 每镜头独立描述完整起始状态
- 铺垫挤压 — 短视频时长有限,模型本能压缩铺垫多塞冲突;但缺铺垫的高潮是"莫名其妙的反转" — 宁可少一个事件,保证每个事件有足够铺垫镜头
- 状态突变 — 模型按剧情节点直跳,不管视觉/知识连贯 — 执行状态连贯自检(前镜头结束状态=本镜头开头状态?)
- 台词超时 — 短视频总时长本就紧,超时更明显 — 执行时长综合流程,关键是脚本验证不是估算
规则参考
skills/short-storyboard/rules.md— 必须读取并严格遵循
分镜自检
生成分镜后,按照 skills/short-storyboard/rules.md 中的输出格式、字段约束和规则逐条自检(最多 3 轮):
- 全部达标 → 完成
- 不达标 → 按照反馈修正问题 → 重新自检
- 3 轮后仍有不足 → 接受当前结果
输出
文件操作
- 使用 Write 将分镜写入
story/episodes/$ARGUMENTS[0]/storyboard.md