4 · 故事板与镜头规划
一个子句 = 一个镜头
按逗号、冒号和句号拆分旁白。每一段为一个镜头,从该子句的第一个字开始。30秒的影片大约20个镜头(每个1.0–2.4秒);切勿在超过约2.5秒内保持一个镜头而不引入新动作。
故事板行
为每个镜头写一行(复制故事板模板):
| 字段 | 填写内容 | 示例(镜头12,重力) |
|---|---|---|
| #, 时间 | 镜头编号,开始–结束秒数 | 12 · 15.91–17.90 |
| 台词 | 精确的子句 | "二十四万英里之外。" |
| 场景 | 哪个布景 | 太空 |
| 主体 | 必须在画面中的内容(构图检查使用这些) | 卷尺计数器,月球 |
| 动作 → 落点 | 发生什么以及落在哪个词上 | 卷尺从地球拉到月球;计数器滚动并停在"之外"上 |
| 表情 | 表情替换及其对应的词 | 地球得意;月球惊讶 |
| 镜头 | 轨道运动:主体、距离、偏航、俯仰、视场角(起始→结束) | 整条线的侧视图,逐渐推进 10.6 → 10.0 |
| 数字对象 | 每个数字对应的装置(技能9) | 卷尺 + "240,000 英里" 计数器 |
| 字幕 | 锁定排版(技能11) | ^240,000 / *英里之外。* |
| 音效 | 拟声与重音(技能12) | 卷尺呼呼声 + 计数器滴答声;在240,000处发出一声叮 |
镜头节奏
- 交替距离:全景 → 中景 → 特写 → 插入(物体或装置)→ 全景。
- 将装置插入放在数字上,将特写放在面部反应上。
- 在节拍点(紧张、升级、转折)切换场景,每次进入新场景时使用移动镜头和轻柔的嗖嗖声。
- 钩子镜头和循环镜头使用相同的构图,使循环无缝衔接。
时间辅助(在film.mjs中)
LEAD = 4 * F:一个手势或装置在其对应词前4帧达到关键姿势。FACE = 2 * F:表情替换的新面孔在其对应词前2帧出现(在半闭眼和一帧闭眼之后)。- 镜头
w:镜头第一个词的索引;s.start = W(w),s.end= 下一个镜头的开始。
以图片形式审核故事板
在细化动画细节之前,为每个镜头渲染一幅静帧、一张联系表,以及构图检查:
node recipe/tools/render.mjs examples/<slug>/film.mjs <outDir> --stills shots --qa
检查要点:主体在手机尺寸下可读、字幕区域清晰、场景明确、静音状态下故事依然可理解。
所有者首先批准故事板
所有者的规则(2026年10月27日):"我希望你先创建故事板……这样我自己可以循环播放……如果我喜欢故事板,然后你才能生成。" 这并非可选项。使用所有者的故事板生成工具(recipe/tools/storyboard-board.mjs):
- 头部: 标题 · 时长 · 尺寸 · BPM · 场景数量,接着关于影片的几行简单描述,然后是"为您决策"。
- 每个镜头一个编号面板: 其时间和标题、台词、渲染静帧、一行
explains:、一行sound:、一行→ motion、一个标签("从v2保留","新增")以及👍/👎。 - 故事主线(所有者,2026年10月27日:"确保剪辑遵循故事以及我们如何利用视觉很好地解释")。
- 在面板的
story字段中用一句话概括故事。 - 在每个面板上,写明该镜头承载了故事的哪一部分,以及其画面如何解释它。不能解释任何内容的镜头将被重画。
- 在面板的
写入 storyboard/<v>/storyboard-<n>.json(templates/storyboard.json),指向静帧,然后生成:
node recipe/tools/storyboard-board.mjs examples/<slug>/storyboard/<v>/storyboard-<n>.json
- 输出: 一个PNG文件,以及一个可点击的HTML页面。页面上,所有者标记👍/👎并按下"复制反馈"。
- 然后停止。 将面板呈现给所有者,并修订为
storyboard-2、storyboard-3……(保留之前的面板),直到获得批准。 - 只有在那之后 才能录制配音并详细构建镜头。完成的影片必须与批准的面板相符。
工作示例
重力影片的故事板:20个镜头,每个字段都已填写。