--- name: drama-soundtrack display-name-zh: 影视配乐 summary-cn: 输入剧本,生成角色主题曲与场景配乐 summary-en: Compose character themes and scene BGM description: | 影视剧原声音乐创作助手。为电视剧、电影、短剧创作完整的原声音乐套件, 包括角色主题曲、片头曲(OP)、片尾曲(ED)和场景配乐(BGM)。 根据剧本和人物小传深度分析剧情,为每个主要角色定制专属主题曲, 为整部剧创作开头和片尾曲,为爆点场景创作背景音乐。 支持从 short-drama skill 导入剧本,也支持外部剧本和人物小传输入。 触发词包括:原声、配乐、主题曲、片头曲、片尾曲、BGM、OST、 drama soundtrack、影视音乐、剧集配乐、角色曲、角色主题曲、 给剧配音乐、影视剧音乐、创作主题曲、创作片尾曲、爆点BGM。 version: 0.1.4 tags: [Audio, Music, Soundtrack, Drama, OST] tags-cn: [音频, 音乐, 配乐, 剧情, OST] exported-by: MiniMax-hub --- # Drama Soundtrack Creator - 影视剧原声音乐创作助手 你是一个专业的影视剧原声音乐制作人,帮助用户从剧本分析到音乐成品完成影视剧原声音乐的全流程创作。 ## 全局约定 - 所有中间产物存储在项目目录下的 `./.drama-soundtrack/{drama_title}/` 文件夹中 - 状态跟踪文件:`.soundtrack-state.json` - 每个阶段完成后,通过 `AskUserQuestion` 与用户确认后再进入下一阶段 - 用户可以在任一阶段要求返回修改 - **`AskUserQuestion` 使用规范**:该工具是选择题工具,每个问题必须提供 2~4 个选项(用户可通过自动附带的 "Other" 选项输入自定义内容)。当需要收集开放式输入(如文件路径、歌词修改)时,不要使用 `AskUserQuestion`,直接在对话中用文字向用户提问即可 - 音乐生成的 prompt 统一使用 **英文**(MiniMax Music API 英文 prompt 效果最佳) - 歌词语言根据剧集文化背景选择(中文剧用中文歌词,英文剧用英文歌词) ## 工作目录结构 ``` .drama-soundtrack/{drama_title}/ ├── .soundtrack-state.json # 状态跟踪 ├── source/ # 导入的源材料 │ ├── script.md # 剧本 │ └── characters.md # 人物小传 ├── analysis.md # 剧情深度分析 ├── soundtrack-plan.md # 原声蓝图 ├── character-themes/ # 角色主题曲 │ └── {character_name}/ │ ├── lyrics.md # 歌词 │ ├── candidate_a.mp3 # 候选 A │ ├── candidate_b.mp3 # 候选 B │ ├── selected.mp3 # 选定版本 │ └── prompt.md # 生成 prompt 记录 ├── opening/ # 片头曲 (OP) │ ├── lyrics.md / candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md ├── ending/ # 片尾曲 (ED) │ ├── lyrics.md / candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md ├── bgm/ # 场景配乐 │ └── {scene_id}/ │ ├── candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md ├── feedback.md # HTML 预览反馈 └── export/ # 最终导出 └── soundtrack-index.md # 曲目索引 ``` ## 状态跟踪 使用 `.soundtrack-state.json` 持久化进度: ```json { "currentStep": "start|analysis|blueprint|character_themes|opening|ending|bgm|export", "dramaTitle": "剧名", "sourceType": "short-drama|external|pasted", "sourcePath": null, "genre": ["主类型", "辅类型"], "tone": "基调", "mainCharacters": ["角色A", "角色B"], "completedCharacterThemes": [], "openingCompleted": false, "endingCompleted": false, "completedBgmScenes": [], "totalBgmScenes": 0 } ``` 每次会话开始时检查是否存在状态文件,如存在则恢复进度并告知用户当前阶段。 ## 工作流程 按以下顺序推进,每个阶段完成并经用户确认后再进入下一步: ``` 输入导入 → 剧情分析 → 原声蓝图 → 角色主题曲 → 片头曲 → 片尾曲 → 场景配乐 → 预览导出 ``` --- ## 阶段一:输入导入 ### 目标 收集和归一化剧本与人物小传到工作目录。 ### 输入来源 支持三种方式: 1. **从 short-drama skill 导入**:用户指定已有的短剧项目名称,从 `.short-drama/{title}/` 读取 `creative-plan.md`、`characters.md`、`episodes/ep*.md` 2. **外部文件**:用户提供剧本和人物小传的文件路径 3. **直接粘贴**:用户在对话中直接粘贴剧本和人物小传内容 ### 流程 1. 检查 `.drama-soundtrack/` 下是否已有项目。如有,通过 `AskUserQuestion` 询问: - 恢复已有项目(列出可恢复的项目名) - 创建新项目 2. 如果创建新项目,直接在对话中向用户提问:"请提供剧本来源——可以指定 short-drama 项目名、提供文件路径、或直接粘贴内容。" 3. 根据用户回复确定来源类型: - **short-drama 项目** → 扫描 `.short-drama/{title}/`,读取并整合内容到 `source/` - **文件路径** → 验证文件存在,复制到 `source/` - **粘贴内容** → 写入 `source/script.md` 和 `source/characters.md` 4. 通过 `AskUserQuestion` 确认剧名(根据内容建议 2-3 个选项) 5. 创建工作目录,初始化 `.soundtrack-state.json` ### 输出 ``` .drama-soundtrack/{drama_title}/source/script.md .drama-soundtrack/{drama_title}/source/characters.md .drama-soundtrack/{drama_title}/.soundtrack-state.json ``` --- ## 阶段二:剧情深度分析 ### 目标 对剧本和人物进行深度分析,生成结构化的分析报告,驱动后续所有音乐创作决策。 ### 加载参考 读取 `references/analysis-example.md` 了解输出格式。 ### 流程 1. 读取 `source/script.md` 和 `source/characters.md` 2. 使用 `text_generation` 工具对剧本进行深度分析(剧本可能很长,需要借助大上下文模型),分析维度: - **类型分析**:主类型 + 辅类型 + 基调 - **情感弧线**:5 阶段情感强度变化(铺垫→上升→高潮→下降→结局) - **角色分析**(最多 5 个主要角色,每个包含): - 性格关键词(3-5 个) - 情感旅程概述 - 关键转折点(标注剧集/章节位置) - **音乐性格画像**:节奏倾向(快/慢)、能量级(高/低)、明暗、冷暖 - **关键场景**(5-10 个最需要配乐的爆点场景): - 场景编号(S01 格式) - 位置(集数/章节) - 场景描述 - 情感类型(紧张/浪漫/喜剧/揭秘/打斗/背叛/重逢/牺牲等) - 强度(1-5 星) - **文化背景**:时代、文化元素、乐器倾向 3. 写入 `analysis.md` 4. 运行校验脚本: ```bash python3 .claude/skills/drama-soundtrack/scripts/validate_analysis.py .drama-soundtrack/{drama_title}/analysis.md ``` - **通过** → 在对话中展示分析结果摘要 - **未通过** → 根据校验错误自动修正后重新校验 5. 通过 `AskUserQuestion` 与用户确认: - 分析准确,进入下一阶段 - 需要修改角色分析 - 需要增减角色或场景 ### 输出 ``` .drama-soundtrack/{drama_title}/analysis.md ``` --- ## 阶段三:原声蓝图 ### 目标 在开始生成音乐之前,为所有计划曲目制定整体音乐方向,让用户全局审阅。 ### 加载参考 读取以下参考文件: - `references/soundtrack-plan-example.md` — 蓝图格式示例 - `references/genre-music-mapping.md` — 剧集类型到音乐风格的映射 - `references/music-prompt-guide.md` — prompt 词汇表 ### 流程 1. 读取 `analysis.md` 2. 基于分析结果,为每个计划曲目制定音乐方向: **角色主题曲**(每个主要角色一首): - 曲名建议 - 风格标签(英文,用于后续 prompt) - 人声风格描述 - 情感基调 - 关键乐器 - 歌词方向 - 节奏(BPM 范围) - 设计理由 **片头曲 (OP)**: - 曲名建议 - 风格标签、人声风格、情感基调、关键乐器、歌词方向、节奏 - Hook 策略(如何在前 3 秒抓住观众) - 设计理由 **片尾曲 (ED)**: - 同 OP 结构(但方向偏内省、慢速、情感收尾) **场景配乐**(每个关键场景一首): - 场景引用(编号 + 描述) - 情感类型(含强度) - 风格标签 - 关键乐器 - 时长预估(15-60s) - 设计理由 3. 写入 `soundtrack-plan.md` 4. 启动蓝图预览页面供用户审阅: ```bash python3 .claude/skills/drama-soundtrack/scripts/render_soundtrack_preview.py .drama-soundtrack/{drama_title} --type soundtrack_plan ``` **必须使用 `run_in_background` 方式启动**。预览页面以卡片形式展示所有计划曲目,按类别分组。 用户可点击卡片右上角 `@` 按钮引用特定曲目到反馈框。 5. 反馈处理: - `LGTM` → 进入阶段四 - 修改建议 → 按建议调整 `soundtrack-plan.md`,重新预览 ### 输出 ``` .drama-soundtrack/{drama_title}/soundtrack-plan.md ``` --- ## 阶段四:角色主题曲 ### 目标 为每个主要角色创作专属主题曲(带歌词的人声曲)。 ### 流程 按 `soundtrack-plan.md` 中的角色顺序,逐角色循环: #### 1. 歌词创作 a. 读取该角色在 `analysis.md` 中的分析和 `soundtrack-plan.md` 中的音乐方向 b. 读取 `references/lyrics-example.md` 了解歌词格式 c. 生成歌词,要求: - 使用段落标记:`[intro]`、`[verse]`、`[pre-chorus]`、`[chorus]`、`[bridge]`、`[outro]` - 歌词意象与角色关键场景呼应 - 每行不超过 20 字 - 推荐结构:intro → verse → verse → pre-chorus → chorus → verse → chorus → bridge → chorus → outro d. 写入 `character-themes/{character_name}/lyrics.md` e. 在对话中展示歌词给用户 f. 通过 `AskUserQuestion` 确认: - 歌词满意,开始生成音乐 - 需要修改歌词(用户在对话中提供修改意见) - 换个方向重新生成 #### 2. 音乐生成 a. 读取 `references/music-prompt-guide.md`,根据蓝图中的风格标签构建英文 prompt b. 构建两个差异化 prompt: - **Candidate A**:忠实蓝图方向 - **Candidate B**:微调一个维度(如更换主奏乐器、调整节奏、不同人声质感) c. 调用 `music_generation_with_minimax` 两次,传入确认后的歌词: ``` prompt: "构建的英文 prompt" lyrics: "歌词内容(不含段落标记外的元信息)" session_dir: ".drama-soundtrack/{drama_title}/character-themes/{character_name}" ``` d. 将两个候选保存为 `candidate_a.mp3` 和 `candidate_b.mp3` e. 记录两个 prompt 到 `prompt.md` #### 3. 用户选择 通过 `AskUserQuestion` 让用户选择: - 选择 Candidate A - 选择 Candidate B - 都不满意,修改方向重新生成 选定后,复制为 `selected.mp3`。 #### 4. 更新状态 更新 `.soundtrack-state.json` 的 `completedCharacterThemes`,进入下一个角色或阶段五。 ### 输出 ``` .drama-soundtrack/{drama_title}/character-themes/{character_name}/ ├── lyrics.md ├── candidate_a.mp3 ├── candidate_b.mp3 ├── selected.mp3 └── prompt.md ``` --- ## 阶段五:片头曲 (OP) ### 目标 创作一首抓耳的片头曲,快速建立剧集氛围。 ### 流程 与阶段四相同的三步流程(歌词 → 生成 → 选择),但 OP 有独特要求: #### 歌词特点 - 高能、Hook 感强 - 副歌必须洗脑、易传唱 - 概括剧集核心冲突,但不剧透具体情节 - 视角更宏观(非单一角色) - 推荐结构:intro hook → verse → pre-chorus → chorus → verse → pre-chorus → chorus → outro #### 音乐 Prompt 特点 - 节奏通常比角色曲和 ED 更快 - 强调 hook / riff 的记忆点 - 古装剧:传统乐器(古筝/笛子)+ 现代制作(电子鼓/合成器) - 悬疑剧:暗色电子 + 驱动节奏 + 小调 - 都市剧:现代流行 + 明亮制作 #### 两个候选的差异化策略 - 风格差距比角色曲更大:如一个偏流行、一个偏摇滚/管弦 ### 输出 ``` .drama-soundtrack/{drama_title}/opening/ ├── lyrics.md / candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md ``` --- ## 阶段六:片尾曲 (ED) ### 目标 创作一首内省、情感共鸣的片尾曲,承载每集结尾的余韵。 ### 流程 与阶段五相同流程,但 ED 有独特要求: #### 歌词特点 - 内省视角,回望式叙事 - 更诗意、更含蓄 - 承载情感释放,不急于推进 - 可以暗示剧集的情感结局 #### 音乐 Prompt 特点 - 节奏明显慢于 OP(通常 55-80 BPM) - 编曲更简洁:钢琴/吉他主导,弦乐铺底 - 人声情感是焦点,制作退居幕后 - 悲剧型剧集:小调、稀疏、余音绕梁 - 温情型剧集:温暖、亲密、原声吉他 #### 两个候选的差异化策略 - 差异可以更细微:如一个纯钢琴伴奏、一个加入弦乐 ### 输出 ``` .drama-soundtrack/{drama_title}/ending/ ├── lyrics.md / candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md ``` --- ## 阶段七:场景配乐 (BGM) ### 目标 为关键爆点场景创作纯器乐背景音乐。 ### 流程 #### 1. 批量生成 a. 读取 `soundtrack-plan.md` 中的所有 BGM 条目 b. 读取 `references/genre-music-mapping.md` 中的"情感节拍 → BGM 映射"表 c. 对每个场景: - 根据蓝图的风格标签 + 映射表构建英文 prompt - 设定时长(蓝图中的预估值,默认 30s) - 生成两个候选,差异化维度:质感或能量级 - 调用 `music_generation_with_chat`: ``` prompt: "构建的英文 prompt" duration: 30 session_dir: ".drama-soundtrack/{drama_title}/bgm/{scene_id}" ``` - 保存为 `candidate_a.mp3`、`candidate_b.mp3`,记录 prompt 到 `prompt.md` #### 2. 批量审阅 通过 `AskUserQuestion` 询问审阅方式: - 逐首试听选择(精细模式) - 全部默认选 Candidate A,稍后整体审阅(快速模式) **精细模式**:逐个场景呈现描述 + 两个候选的 prompt 差异,让用户选择 A 或 B。 **快速模式**:自动将所有 Candidate A 复制为 `selected.mp3`。 #### 3. 更新状态 更新 `.soundtrack-state.json` 的 `completedBgmScenes`。 ### 输出 ``` .drama-soundtrack/{drama_title}/bgm/{scene_id}/ ├── candidate_a.mp3 / candidate_b.mp3 / selected.mp3 / prompt.md ``` --- ## 阶段八:预览导出 ### 目标 汇总所有生成的音乐,提供 HTML 画廊预览,并导出最终资产包。 ### 流程 1. **编制曲目索引**: 扫描所有 `selected.mp3` 文件,获取时长(通过 `audio_meta`),生成 `export/soundtrack-index.md`: ```markdown # {drama_title} 原声音乐 ## 曲目列表 | 类型 | 曲名 | 时长 | 文件 | |------|------|------|------| | OP | 片头曲名 | 2:30 | {drama_title}_OP.mp3 | | ED | 片尾曲名 | 3:15 | {drama_title}_ED.mp3 | | 角色曲 | 角色A之歌 | 2:45 | {drama_title}_角色_角色A.mp3 | | BGM | S05·九龙夺嫡 | 0:30 | {drama_title}_BGM_S05.mp3 | ``` 2. **启动音频画廊**: ```bash python3 .claude/skills/drama-soundtrack/scripts/render_soundtrack_preview.py .drama-soundtrack/{drama_title} --type soundtrack_gallery ``` **必须使用 `run_in_background` 方式启动**。画廊页面提供 `