提炼自
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 镜 用什么转场}
---
<!-- 完整口播文案(纯文本) -->
scripts/storyboard.mjs 的 normalizeStoryboard() 会强制:
duration 到 [minShot, maxShot](默认 3~10,可用即梦时按 5~10 检查)start 时间码(按顺序累加)imagePrompt / videoPrompt下游 scripts/video.mjs 在提交前会再调一次
secondsToFrames() → assertValidFrames(),把时长吸附到最近的合法档位,
并在日志里写明「原 Xs → 吸附为 Ys」。不会静默改时长。