storyboard-prompt.md 9.2 KB

分镜生成模板(storyboard-prompt)

提炼自 kb-raw/04-SOP工作流/…/flow/3-分镜prompt1.1.md 与 flow/3-分镜-模板.md; 规范依据见 templates/storyboard.schema.json,方法论见 references/narrative-playbook.md。

这是 VOC-SOP 阶段 3 的提示词:把一篇选定文案变成「可拍的镜头表 + 可喂给 AI 的提示词」。 产出直接对接 fmode-mv scene / fmode-mv video。


一、怎么用

# 本技能内自动跑
fmode-mv storyboard --from work/script.json --shots 8 --aspect 16:9

# 若要手工喂给模型,用下面「提示词正文」

产出落在 work/storyboard.json(机器消费)+ work/storyboard.md(人读)。 下游消费顺序:

storyboard.json
   → fmode-mv character-sheet --desc "…"        (先锁定人物)
   → fmode-mv scene --from work/storyboard.json --character out/character/4-多视图.png
       ├ work/scene/shot-XX.png   场景图(无人)
       └ work/frames/shot-XX.png  关键帧(有人)
   → fmode-mv video --from work/storyboard.json
       └ work/clips/shot-XX.mp4
   → fmode-mv assemble --from work/storyboard.json

二、提示词正文

你是资深短视频分镜师。把下面这篇文案拆成一份**可直接投喂 AI 生成模型**的分镜表。
全程无实拍,所有画面由 AI 生成。

【文案全文】
{{文案全文}}

【总时长】约 {{90}} 秒
【镜头数量】{{8}} 个(必须控制在 {{8}}±2 个,这是硬性约束)
【画面比例】{{16:9}}(竖版项目用 9:16)
【风格】{{如:电影感、低饱和、自然光、浅景深}}
【人物设定】{{若已有人物资产:外观锚点原文;否则要求你先定义一段}}

============================================================
硬性约束(违反任一条即返工)
============================================================

1. 【单镜时长】每个镜头的 duration **必须落在 {5, 6, 7, 8, 9, 10} 秒之内**。
   原因:即梦图生视频接口只接受 121/145/169/193/217/241 帧,对应就是这 6 个整数秒。
   **不要**生成 3 秒、4 秒、12 秒、20 秒的镜头。
2. 【首帧】第 1 镜必须是**楼外 / 空旷外部场景**(有利于图生视频起势)。
3. 【首段运镜】第 1 镜的 videoPrompt 必须是**推镜**(从室外推入室内 / 从远推近)。
4. 【末帧呼应】最后一镜必须与第 1 镜有**视觉呼应**(相同空间/构图/道具,不同状态)。
5. 【结构】使用 15 节拍压缩结构组织镜头(按总时长等比缩放)。
6. 【人物一致性】先定义 appearanceAnchor(英文,一句话锁定外貌),
   之后**每个含人物的镜头**的 imagePrompt 都必须原样复述该锚点的英文版。
7. 【分层】镜头分两类交替:
   - "broll":空镜/场景(无人物主体)—— 占多数,观感风险低
   - "talking":人物镜头(口播项目)/"perf"(演唱/表演镜头)
8. 【三层冲突】内心 / 个人 / 外界冲突都要有画面表现。
9. 【景别】景别要有变化(大远景→远景→中景→近景→特写),相邻镜头**景别跳档**。
10.【运镜】每镜最多**一种**运镜,禁止「推+环绕+上摇」叠加,**禁止环绕镜头**。
11.【转场】相邻镜头要设计转场(匹配/动势/淡入淡出),并写入 notes。
12.【色调】相邻镜头场景与色调必须连续(同一空间结构、同一光源方向、同一色温)。
13.【避开】不要两个镜头出现同一个人物(除非有 character-sheet 参考图)。
14.【中国人形象】人物形象须为中国人。
15.【口播对齐】若有口播,narration 必须与 shot 时长匹配:
    每 10 秒 ≤50 个中文字符,语速 ≤4 字/秒。

机位写法(禁止只写「特写」三个字):
  [方位] + [高度] + [俯仰角]
  方位:人物正面/背后/左侧/右侧/左前方45°/右后方45°
  高度:与地面同高/与膝盖同高/与胸口同高/与人眼同高/与肩同高/在人物头顶上方
  俯仰:平视=真实客观;仰拍=主体强大有压迫感;俯拍=主体渺小脆弱
  例:「机位与人眼部同高,平视」

运镜词库(每镜选一个):
  固定机位静止(AI 最稳,优先)/ 缓慢推近 / 缓慢拉远 / 横向跟随 / 缓慢上摇 / 缓慢下摇 / 手持轻微晃动

音效:每个 videoPrompt **必须包含背景音效描述**
  (如:温暖氛围音乐、励志管弦乐、科技感电子音、雨声与远处车流、钢琴单音)

============================================================
输出格式(严格 JSON,顶层结构见下,不要 markdown 围栏)
============================================================

{
  "title": "标题",
  "aspect": "16:9",
  "totalDuration": 90,
  "appearanceAnchor": "英文,一句话锁定主角外貌(性别/年龄/发型/服装/气质)",
  "styleKeywords": "全片统一影像风格关键词(英文)",
  "shots": [
    {
      "id": 1,
      "type": "broll",
      "start": 0,
      "duration": 6,
      "section": "开场画面",
      "location": "英文,地点",
      "timeOfDay": "英文,时间/光线",
      "scenePrompt": "英文,纯环境描述(无人),会用来生成场景图",
      "description": "中文画面描述(给人看的分镜表正文)",
      "imagePrompt": "★英文完整提示词:主体+动作/状态+环境+光线+镜头语言(焦段/景别/角度)+风格+画质词;含人物时须含 appearanceAnchor 英文版",
      "videoPrompt": "★英文运镜描述:主体动作 + 镜头运动 + 节奏 + 音效描述 + 4k 画质词(不含画面内容,内容来自关键帧)",
      "narration": "该镜头对应的口播原文(无口播则留空)",
      "subtitle": "字幕文本(≤20 字,单行显示)",
      "lipSync": false,
      "notes": "中文备注:转场设计、与前一镜的呼应关系等"
    }
  ]
}

生成后请自检并修正:
- [ ] 每个 duration 都在 {5,6,7,8,9,10} 秒内?
- [ ] 第 1 镜是楼外/空旷外部场景,且是推镜?
- [ ] 末镜与首镜有视觉呼应?
- [ ] 每个含人物的 imagePrompt 都含 appearanceAnchor?
- [ ] 每个 videoPrompt 都含音效描述与 4k 画质词?
- [ ] 相邻镜头景别跳档、色调连续、方向不跳轴?
- [ ] 镜头时长之和 ≈ totalDuration?

三、输出模板(人读版,落 分镜{序号}-{篇章名}.md)

# {作品标题}

**话题标签**:#话题1 #话题2 #话题3
**总时长**:约90秒
**风格**:{风格描述}
**故事类型**:{10 种类型之一}
**前提**:{[性格] + [行动] = [后果]}

---

#### 人物设定

{appearanceAnchor 原文 + 中文说明}

---

#### 场景逻辑描述

```
照片1(首帧·楼外) → 视频1(首尾帧·推镜入室内) → 照片2 → 视频2(首帧)
→ ... → 照片N(末帧·与首帧呼应)
```

---

#### 照片生成表格

| 分镜序号 | Prompt(英文) | 场景说明 |
| ---- | ---- | ---- |
| 1 | ... | ... |

---

#### 视频生成表格

| 视频段号 | 时长 | 生成方式 | 运镜 | prompt(中文) | 旁白/字幕 | 用到的分镜序号 |
| ---- | -- | ---- | ---- | ---- | ---- | ---- |
| 1 | 6s | 首尾帧 (method=3) | 推镜 | ... | ... | 1,2 |

> **生成方式**必须写明「首尾帧 (method=3)」或「首帧 (method=2)」。
> **首段必须 method=3**;**场景跨度大的段落改用 method=2**。

---

#### 口播台词(按时间轴)

| 时间 | 画面 | 口播台词 |
| ---- | ---- | ---- |
| 0:00-0:06 | {画面描述} | {口播台词} |

---

#### 分镜设计说明

- **人物视觉弧光**:{开端 → 中段 → 呼应}
- **三层冲突的视觉表现**:内心 {...};个人 {...};外界 {...}
- **景别变化**:{大远景 → 中景 → 特写 → ...}
- **转场设计**:{第 N 镜 → 第 N+1 镜 用什么转场}

---

<!-- 完整口播文案(纯文本) -->

四、人工确认清单(阶段 3 出口条件)

  • 首帧是楼外/空旷外部场景吗?
  • 第一段视频使用推镜从室外推入室内吗?
  • 人物有视觉弧光(服装/表情/环境变化)吗?
  • 三层冲突都有画面表现吗?
  • 景别变化丰富(大远→中→近→特写)吗?
  • 节奏有张弛(每 10–15 秒一个小高潮)吗?
  • 转场有设计(匹配/动势/淡入淡出)吗?
  • 末帧与首帧有视觉呼应吗?
  • AI 提示词足够具体(有画面细节、风格、光影)吗?
  • 所有画面比例统一吗?
  • 口播台词时间轴与视频时长匹配?
  • 每镜 duration ∈ {5,6,7,8,9,10} 秒?(即梦硬约束)
  • 照片 → 视频映射完整?(每张照片都有对应视频段)
  • 每个含人物的 imagePrompt 都复述了 appearanceAnchor?

五、本技能仓的自动校验

scripts/storyboard.mjs 的 normalizeStoryboard() 会强制:

  • 夹取 duration 到 [minShot, maxShot](默认 3~10,可用即梦时按 5~10 检查)
  • 补齐 start 时间码(按顺序累加)
  • 补默认 imagePrompt / videoPrompt

下游 scripts/video.mjs 在提交前会再调一次 secondsToFrames() → assertValidFrames(),把时长吸附到最近的合法档位, 并在日志里写明「原 Xs → 吸附为 Ys」。不会静默改时长。