Popiai-skill仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

3.7 KiB

脚本生成

目标

根据歌词拆解的段落结构,为每个段落生成详细的分幕脚本。

重点

  • 脚本的时间段可以对歌词段落进行拆分或合并,不需要与 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 后,必须运行校验脚本:

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 询问用户处理方式