5.9 KiB
分镜规划
目标
根据脚本为每个场景规划分镜,引用已生成的人设图、背景图和关键物件图作为视频生成的参考素材,不再单独生成分镜图。
重点
- 分镜不再独立生成图片,而是为每幕映射已有的参考图(角色
selected.jpg、背景selected.jpg、物件selected.jpg) - 每幕需要编写视频生成提示词,描述画面动态和镜头运动
- 分镜文档是视频生成阶段的直接输入
流程
1. 解析脚本与关联素材
读取 script.md 提取每幕信息(场景名称、时间码、场景描述、歌词、视觉风格、关键物件)。
结合 story_concept.md 中的核心人物描述和各幕场景描述,为每幕标注:
- 出场角色:场景中出现的角色名 → 对应
characters/{character_name}/selected.jpg - 场景背景:该幕的场景环境 → 对应
backgrounds/{bg_name}/selected.jpg - 关键物件:该幕出现的关键物件 → 对应
props/{item_name}/selected.jpg
判断规则:
- 场景描述中明确提及角色名或角色特征 → 标注该角色
- 场景描述为纯空镜/风景/物件特写 → 出场角色标注为
(无) - 不确定时倾向于标注角色(宁多勿漏,用户可在预览时修正)
2. 生成分镜文档
将每幕信息写入 storyboard.md,为每幕生成:
- 出场角色:该幕出现的角色目录名(即
characters/下的子目录名,不是 design.md 中的 H1 显示名) - 场景背景:该幕对应的背景目录名(即
backgrounds/下的子目录名) - 关键物件:该幕出现的关键物件目录名(即
props/下的子目录名) - 场景描述:中文画面描述(从 script.md 同步)
- 视频提示词:英文 prompt,描述画面动态、镜头运动、角色动作,引用参考图(如
image 1 as background, image 2 as character) - 参考图列表:背景
selected.jpg+ 角色selected.jpg(如有)+ 物件selected.jpg(如有)
3. 生成分镜图
为每幕生成分镜合成图,让用户在视频生成前预览实际画面构图。
生成方式:使用 all_in_one_batch_image_generation(model_name: all_in_one_pro)或 nano_banana_batch_image_generation_v2(model_name: nano_banana_2)批量生成,每幕 1 张。
参考图传入:通过 image_paths 传入背景 selected.jpg + 角色 selected.jpg(如有)+ 关键物件 selected.jpg(如有),并在提示词中用 image 1 as background, image 2 as character 等引用。
提示词:基于分镜文档的 视频提示词: 字段,但去除镜头运动描述(pan、dolly、tracking 等),仅保留画面构图、角色动作、光线氛围和风格描述。这是静态画面提示词,不同于视频提示词。
宽高比:统一 16:9。
存储:保存到 storyboard/ 目录,命名 scene_01.jpg、scene_02.jpg 等(序号与幕序一致)。
写入分镜文档:在 storyboard.md 每幕末尾追加 候选图: 和 选定图: 字段,记录生成的候选图路径。首次生成后默认选定第一张。
4. 用户审阅
调用 MCP 工具 preview_and_collect_feedback 启动预览:
- script:
.opencode/skills/mv-creator/scripts/render_preview.py - args:
[".mv/{song_name}/{theme}", "--type", "storyboard", "--lang", "{lang}"] - feedback_path:
.mv/{song_name}/{theme}/feedback.md
预览页面按时间线展示各幕分镜卡片,显示每幕的参考图缩略图和视频提示词。 工具返回反馈内容后:
LGTM→ 进入视频生成阶段- 其他 → 按建议修改分镜映射或视频提示词,更新
storyboard.md,重新校验和预览
输出格式
严格按用户语言选择对应的 example 和字段名(参见 SKILL.md「输出控制」和「Markdown 字段名中英对照表」):
- 中文用户:参考
references/storyboard-example.md - 非中文用户:参考
references/storyboard-example-en.md
关键要点:
- 二级标题
##用于每幕场景标题,与script.md的幕名保持一致 - 时间码行格式:
* M:SS - M:SS (Xs),与script.md一致 - 歌词引用以
>开头(从 script.md 同步) - 每幕必须包含以下字段(中文/English):
出场角色/Characters— 角色名(逗号分隔),无角色写(无)/(None)场景背景/Scene Background— 对应的背景名关键物件/Key Props— 物件名(逗号分隔),无物件可省略场景描述/Scene Description— 画面描述(用户语言),缩进 2 空格视频提示词/Video Prompt— 英文 prompt,描述动态和镜头,引用参考图编号,缩进 2 空格参考图/Reference— 列表形式,每行注明用途,路径相对 theme 目录候选图/Candidates— 列表形式,每行记录候选图文件名和简要说明选定图/Selected— 用户选定的最终分镜图文件名
- 场景之间用
---分隔
格式校验
storyboard.md 写入后,必须运行校验脚本:
python3 .opencode/skills/mv-creator/scripts/validate_storyboard.py .mv/{song_name}/{theme}/storyboard.md
校验规则:场景标题格式、时间码格式、必填字段完整性、出场角色目录及 selected.jpg 存在性、场景背景目录及 selected.jpg 存在性、关键物件目录及 selected.jpg 存在性、与 script.md 交叉校验(幕数和时间码一致)。
- 通过 → 启动预览供用户审阅
- 未通过 → 由 LLM 根据校验错误信息自动修正,修复后重新校验
文件存储
./.mv/{song_name}/{theme}/storyboard.md # 分镜规划文档
./.mv/{song_name}/{theme}/storyboard/ # 分镜图目录
├── scene_01.jpg # 各幕分镜图
├── scene_02.jpg
└── ...