# 脚本生成 ## 目标 根据歌词拆解的段落结构,为每个段落生成详细的分幕脚本。 ## 重点 - 脚本的时间段可以对歌词段落进行拆分或合并,**不需要**与 lyric.md 一一对应 - 各阶段产物相互独立:修改脚本不需要回改歌词,修改分镜不需要回改脚本,以此类推 - **场景拆分后必须重新编号**:若某幕时长超过 15s 需要拆分成多幕,拆分后**必须**将所有场景从第一幕开始重新连续编号(第一幕、第二幕、……第 N 幕),**禁止**使用 `a/b` 后缀(如"第九幕b")。连续编号确保下游分镜图文件命名(scene_01.jpg、scene_02.jpg...)与数组索引严格一致 - 脚本格式**必须**严格遵循模板 `references/script-example.md`(非中文用户参考 `references/script-example-en.md`),否则 HTML 预览解析器无法正确渲染 - **场景描述必须写具体动态**:脚本的场景描述是后续视频提示词的核心输入,描述越具体、动态越丰富,生成的视频动作越自然。**禁止笼统静态描述**(如"旅人站在路边"),必须写清: - **角色动作**:具体的肢体动作和运动轨迹(走、跑、转身、抬手、低头等) - **表情/情绪**:面部表情变化(微笑渐收、皱眉凝视等) - **物件交互**:角色与道具/环境的互动(抚摸琴弦、推开车门、拾起信物等) - **镜头运动**:明确的镜头语言(从脚部缓缓上摇、跟随角色横移、推近面部特写等) - **环境动态**:风吹发丝、水面倒影晃动、光影变化等非静态元素 ## 格式模板 完整格式示例见 `references/script-example.md`(非中文用户参考 `references/script-example-en.md`)。关键要点: - 二级标题 `##` 用于每幕场景标题(如 `## 第一幕:黎明启程`) - 时间码行格式:`* M:SS - M:SS (Xs)` - 不加粗、不标注段落类型(Verse/Chorus 等) - 括号内为时长(秒),必须为 **4~15 秒的整数** - 歌词引用以 `> ` 开头,纯音乐幕无歌词引用 - 每幕必须包含三个字段:`**场景描述:**`、`**视觉风格:**`、`**转场:**` - 可选字段 `**关键物件:**`:列出该幕出现的重要非人物视觉元素,格式为物件名 + 简短外观描述(括号内),多个物件逗号分隔 - 示例:`**关键物件:** 旧皮卡(深蓝色、锈迹斑驳、车顶行李架)、吉他(原木色民谣吉他、琴身有贴纸)` - 场景之间用 `---` 分隔 ## 文件存储 ``` ./.mv/{song_name}/{theme}/script.md # 脚本文件 ``` ## 格式校验 脚本写入 `script.md` 后,**必须**运行校验脚本: ```bash python3 .opencode/skills/mv-creator/scripts/validate_script.py .mv/{song_name}/{theme}/script.md ``` 校验规则:场景标题格式、时间码格式(含时长标签)、时长范围(4~15s 整数)、时间段连续性、必填字段完整性、与 lyric.md 交叉校验。 - **通过** → 调用 MCP 工具 `preview_and_collect_feedback` 启动预览: - **script**: `.opencode/skills/mv-creator/scripts/render_preview.py` - **args**: `[".mv/{song_name}/{theme}/script.md", "--type", "script", "--lang", "{lang}"]` - **feedback_path**: `.mv/{song_name}/{theme}/feedback.md` 预览页面以时间线卡片形式展示各幕,用户可点击场景卡片的 `@` 按钮引用到反馈框中。 工具返回反馈内容后: - `LGTM` → 进入下一阶段 - 其他 → 按建议修改后重新校验和预览 - **未通过** → 由 LLM 根据校验错误信息自动修正 `script.md`,修复后重新校验。 若连续 3 次自动修复仍未通过,通过 `AskUserQuestion` 询问用户处理方式