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.
 
 
 
 

16 KiB

name display-name-zh summary-cn summary-en description version tags tags-cn exported-by
drama-soundtrack 影视配乐 输入剧本,生成角色主题曲与场景配乐 Compose character themes and scene BGM 影视剧原声音乐创作助手。为电视剧、电影、短剧创作完整的原声音乐套件, 包括角色主题曲、片头曲(OP)、片尾曲(ED)和场景配乐(BGM)。 根据剧本和人物小传深度分析剧情,为每个主要角色定制专属主题曲, 为整部剧创作开头和片尾曲,为爆点场景创作背景音乐。 支持从 short-drama skill 导入剧本,也支持外部剧本和人物小传输入。 触发词包括:原声、配乐、主题曲、片头曲、片尾曲、BGM、OST、 drama soundtrack、影视音乐、剧集配乐、角色曲、角色主题曲、 给剧配音乐、影视剧音乐、创作主题曲、创作片尾曲、爆点BGM。 0.1.4 [Audio Music Soundtrack Drama OST] [音频 音乐 配乐 剧情 OST] 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 持久化进度:

{
  "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.mdcharacters.mdepisodes/ep*.md
  2. 外部文件:用户提供剧本和人物小传的文件路径
  3. 直接粘贴:用户在对话中直接粘贴剧本和人物小传内容

流程

  1. 检查 .drama-soundtrack/ 下是否已有项目。如有,通过 AskUserQuestion 询问:

    • 恢复已有项目(列出可恢复的项目名)
    • 创建新项目
  2. 如果创建新项目,直接在对话中向用户提问:"请提供剧本来源——可以指定 short-drama 项目名、提供文件路径、或直接粘贴内容。"

  3. 根据用户回复确定来源类型:

    • short-drama 项目 → 扫描 .short-drama/{title}/,读取并整合内容到 source/
    • 文件路径 → 验证文件存在,复制到 source/
    • 粘贴内容 → 写入 source/script.mdsource/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.mdsource/characters.md

  2. 使用 text_generation 工具对剧本进行深度分析(剧本可能很长,需要借助大上下文模型),分析维度:

    • 类型分析:主类型 + 辅类型 + 基调
    • 情感弧线:5 阶段情感强度变化(铺垫→上升→高潮→下降→结局)
    • 角色分析(最多 5 个主要角色,每个包含):
      • 性格关键词(3-5 个)
      • 情感旅程概述
      • 关键转折点(标注剧集/章节位置)
      • 音乐性格画像:节奏倾向(快/慢)、能量级(高/低)、明暗、冷暖
    • 关键场景(5-10 个最需要配乐的爆点场景):
      • 场景编号(S01 格式)
      • 位置(集数/章节)
      • 场景描述
      • 情感类型(紧张/浪漫/喜剧/揭秘/打斗/背叛/重逢/牺牲等)
      • 强度(1-5 星)
    • 文化背景:时代、文化元素、乐器倾向
  3. 写入 analysis.md

  4. 运行校验脚本:

    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. 启动蓝图预览页面供用户审阅:

    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.mp3candidate_b.mp3 e. 记录两个 prompt 到 prompt.md

3. 用户选择

通过 AskUserQuestion 让用户选择:

  • 选择 Candidate A
  • 选择 Candidate B
  • 都不满意,修改方向重新生成

选定后,复制为 selected.mp3

4. 更新状态

更新 .soundtrack-state.jsoncompletedCharacterThemes,进入下一个角色或阶段五。

输出

.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.mp3candidate_b.mp3,记录 prompt 到 prompt.md

2. 批量审阅

通过 AskUserQuestion 询问审阅方式:

  • 逐首试听选择(精细模式)
  • 全部默认选 Candidate A,稍后整体审阅(快速模式)

精细模式:逐个场景呈现描述 + 两个候选的 prompt 差异,让用户选择 A 或 B。 快速模式:自动将所有 Candidate A 复制为 selected.mp3

3. 更新状态

更新 .soundtrack-state.jsoncompletedBgmScenes

输出

.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

    # {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. 启动音频画廊

    python3 .claude/skills/drama-soundtrack/scripts/render_soundtrack_preview.py .drama-soundtrack/{drama_title} --type soundtrack_gallery
    

    必须使用 run_in_background 方式启动。画廊页面提供 <audio> 播放器,支持逐首试听。

  3. 反馈处理

    • LGTM → 执行导出
    • 特定曲目不满意 → 返回对应阶段重新生成
  4. 导出: 使用 ffmpeg 将所有 selected.mp3 复制到 export/ 目录,统一命名:

    • {drama_title}_OP_{曲名}.mp3
    • {drama_title}_ED_{曲名}.mp3
    • {drama_title}_角色_{角色名}.mp3
    • {drama_title}_BGM_{场景编号}_{情感类型}.mp3
  5. 更新状态为 export,告知用户导出完成和文件位置。

输出

.drama-soundtrack/{drama_title}/export/
├── soundtrack-index.md
├── {drama_title}_OP_xxx.mp3
├── {drama_title}_ED_xxx.mp3
├── {drama_title}_角色_xxx.mp3
└── {drama_title}_BGM_xxx.mp3