☰
OpenMontage 音乐技能实战:用 ACE-Step 1.5 生成视频 BGM、人声歌曲与分轨(Stem)
2026/10/8 20:33:56 网站建设 项目流程

OpenMontage 音乐技能实战:用 ACE-Step 1.5 生成视频 BGM、人声歌曲与分轨(Stem)

【免费下载链接】OpenMontageWorld's first open-source, agentic video production system. 12 production pipelines, 100+ tools, 700+ agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontage

本文为 OpenMontage 音频技能体系中acestep技能(Agent Skill)的深度解读。该技能文档定义了基于开源模型 ACE-Step 1.5 的完整音乐生成工作流——覆盖纯器乐 BGM、带歌词的完整歌曲、参考曲翻唱/风格迁移与干声分轨,并给出了面向视频制作的场景预设、提示词工程方法与音画合成规范。读完本文,你可以直接在 OpenMontage 的 Agent 工作流中复现这些命令,理解其参数约束与工程边界,并弄清它与仓库中其他音乐生成工具(ComfyUI 本地推理、ElevenLabs API)的关系。

技能定位:Agent Skill 而非独立 CLI

.claude/skills/acestep/SKILL.md是一份标准的 Agent Skill 文件:YAML frontmatter 声明了name: acestep与触发条件(background music、soundtrack、jingle、stem extraction、cover、style transfer 等任务关键词),正文则是 Agent 执行音乐任务时遵循的操作手册。技能文档自述:

  • 基于 MIT 许可的开源音乐生成模型 ACE-Step 1.5,通过tools/music_gen.py封装;
  • 推理托管在 RunPod serverless 上,.env中需要配置RUNPOD_API_KEY与RUNPOD_ACESTEP_ENDPOINT_ID两个环境变量,首次可通过--setup参数创建 RunPod 端点。

从仓库结构看,acestep在 skills/INDEX.md 的技能目录中被归入 Infrastructure(基础设施)类别,并在 AGENT_GUIDE.md 的音频技能清单中与music、sound-effects等并列,说明它服务于整条视频生产流水线的"配乐"环节,而不是孤立工具。

需要注意适用前提:技能文档中的命令入口tools/music_gen.py是技能定义指向的 CLI 形态(源自其上游视频工具包);以当前仓库实际存在的源码为准,可直接调用的 ACE-Step 推理入口是 ComfyUI 本地后端comfyui_music(详见文末"仓库中的 ACE-Step 证据链"一节),而music_gen工具名在仓库中对应的是 ElevenLabs API 版实现 tools/audio/music_gen.py。

快速参考:一条命令完成常见任务

技能文档给出的 Quick Reference 覆盖了全部八种典型用法,以下完整继承并按用途分组:

基础生成与音乐控制

# 基础生成 python tools/music_gen.py --prompt "Upbeat tech corporate" --duration 60 --output bg.mp3 # 带音乐参数控制(BPM / 调性) python tools/music_gen.py --prompt "Calm ambient piano" --duration 30 --bpm 72 --key "D Major" --output ambient.mp3

场景预设(面向视频制作)

python tools/music_gen.py --preset corporate-bg --duration 60 --output bg.mp3 python tools/music_gen.py --preset tension --duration 20 --output problem.mp3 python tools/music_gen.py --preset cta --brand digital-samba --duration 15 --output cta.mp3

人声与歌词

# 带歌词的 Jingle python tools/music_gen.py --prompt "Indie pop jingle" --lyrics "[verse]\nBuild it better\nShip it faster" --duration 30 --output jingle.mp3

翻唱/风格迁移与分轨

# Cover / style transfer python tools/music_gen.py --cover --reference theme.mp3 --prompt "Jazz piano version" --duration 60 --output jazz_cover.mp3 # Stem extraction python tools/music_gen.py --extract vocals --input mixed.mp3 --output vocals.mp3 # 列出全部预设 python tools/music_gen.py --list-presets

场景预设:为视频叙事节奏预置的音乐参数

技能内置了 8 个场景预设,每个预设锁定 BPM 与调性,直接对齐视频叙事段落的情绪曲线。完整预设表如下:

PresetBPMKey适用场景
corporate-bg110C Major专业感背景音、演示类内容
upbeat-tech128G Major产品发布、技术演示
ambient72D Major概览页、反思性内容
dramatic90D Minor揭幕、重大宣告
tension85A Minor问题陈述、挑战桥段
hopeful120C Major方案揭晓、释然时刻
cta135E Major行动号召、收尾高能量段落
lofi85F Major屏幕录制、编码演示

预设本质上是"caption + BPM + Key"的打包,配合--duration即可让配乐与镜头时长严格对齐。

创建一首歌:三种实战路径

路径一:纯器乐背景音(最简单)

python tools/music_gen.py --prompt "Upbeat indie rock, driving drums, jangly guitar" --duration 60 --bpm 120 --key "G Major" --output track.mp3

路径二:带人声与歌词的完整歌曲

技能推荐将长歌词先写入临时文件再用$(cat ...)注入,并用结构标签(structure tags)控制歌曲段落。完整示例:

# 先把歌词写入文件(长歌曲推荐做法) cat > /tmp/lyrics.txt << 'LYRICS' [Verse 1] Walking through the morning light Coffee in my hand feels right Another day to build and dream Nothing's ever what it seems [Chorus - anthemic] WE KEEP MOVING FORWARD Through the noise and doubt We keep moving forward That's what it's about [Verse 2] Screens are glowing late at night Shipping code until it's right The deadline's close but so are we Almost there, just wait and see [Chorus - bigger] WE KEEP MOVING FORWARD Through the noise and doubt We keep moving forward That's what it's about [Outro - fade] (Moving forward...) LYRICS # 生成歌曲 python tools/music_gen.py \ --prompt "Upbeat indie rock anthem, male vocal, driving drums, electric guitar, studio polish" \ --lyrics "$(cat /tmp/lyrics.txt)" \ --duration 60 \ --bpm 128 \ --key "G Major" \ --output my_song.mp3

路径三:视频场景直接用预设

python tools/music_gen.py --preset tension --duration 20 --output problem_scene.mp3

出好结果的关键技巧

技能文档总结的七条经验法则(直接继承,无删减):

  • Caption = 整体风格(流派、乐器、情绪、制作质感)
  • Lyrics = 时间结构(主歌/副歌走向、人声演绎方式)
  • 歌词全大写= 高能量人声
  • 括号= 和声/背景人声:"We rise (together)"
  • 每行保持 6–10 个音节以获得自然节奏
  • 不要在 caption 里描述旋律——描述的是"声音与感觉"
  • 迭代调参时用--seed锁定随机性,只改变 prompt/lyrics

任务类型:六种能力的边界

技能定义了 6 种任务类型,其中 3 种可用、3 种为规划中的能力:

任务状态说明
text2music默认文本 prompt + 可选歌词生成音乐
cover可用参考音频风格迁移,--cover-strength控制混合度
extract可用干声/分轨分离
repaint规划中在保留其余部分的前提下重生成音频的某时间段
lego规划中(需 base model)在既有音频上下文中生成单独乐器轨
complete规划中(需 base model)为不完整编曲补全指定乐器

cover 的强度参数--cover-strength取值 0.0–1.0:0.2是宽松的风格启发(创作自由度高);0.5均衡迁移;0.7贴近原曲结构(默认值);1.0最高保真度。

extract 支持的分轨共 10 种:vocals、drums、bass、guitar、piano、keyboard、strings、brass、woodwinds、other。

提示词工程:Caption 的分层写法

分层维度

技能主张用多维度叠加来写 caption,而不是单个形容词。可用的维度:

  • 流派/风格:pop、rock、jazz、electronic、lo-fi、synthwave、orchestral
  • 情绪:melancholic、euphoric、dreamy、nostalgic、intimate、tense
  • 乐器:acoustic guitar、synth pads、808 drums、strings、brass、piano
  • 音色(Timbre):warm、crisp、airy、punchy、lush、polished、raw
  • 年代感:"80s synth-pop"、"modern indie"、"classical romantic"
  • 制作方式:lo-fi、studio-polished、live recording、cinematic
  • 人声:breathy、powerful、falsetto、raspy、spoken word(或 "instrumental")

对比示例(技能原文):

  • 好:"Slow melancholic piano ballad with intimate female vocal, warm strings building to powerful chorus, studio-polished production"
  • 差:"Sad song"

五条核心原则

  1. 具体胜于含糊——写出乐器、情绪、制作风格;
  2. 避免自相矛盾——不要同时要求 "classical strings" 和 "hardcore metal";
  3. 重复即强调——重要元素重复出现可提升优先级;
  4. 稀疏 caption = 更多创作自由——描述越细,模型越被约束;
  5. BPM/调性走元数据参数——不要写 "120 BPM" 进 caption,用--bpm 120。

歌词排版语法

结构标签(写在歌词里,不写在 caption 里):

[Intro] / [Verse] / [Chorus] / [Bridge] / [Outro] [Instrumental] / [Guitar Solo] / [Build] / [Drop] / [Breakdown]

人声控制前缀(修饰某行或某段):

[raspy vocal] / [whispered] / [falsetto] [powerful belting] / [harmonies] / [ad-lib]

能量标记:全大写 = 高强度("WE RISE ABOVE");括号 = 背景人声("We rise (together)");段落内每行保持 6–10 音节。

完整示例——科技产品 Jingle:

[Verse] Build it better, ship it faster Every feature tells a story [Chorus - anthemic] THIS IS YOUR PLATFORM Your vision, your stage Digital Samba, every page [Outro - fade] (Build it better...)

视频制作集成:配乐、混音与品牌一致性

按场景类型选曲

技能给出了与叙事段落一一对应的配乐方案表(完整继承):

场景预设时长备注
Titledramatic或ambient3–5s短促、定调
Problemtension10–15s阴暗、不安
Solutionhopeful10–15s释然、乐观
Demolofi或corporate-bg30–120s不抢戏,时长匹配演示内容
Statsupbeat-tech8–12s建立可信度
CTActa5–10s最高能量、干脆有力
Creditsambient5–10s轻柔收尾淡出

时长对齐工作流

  1. 先从配音脚本规划各场景时长;
  2. 用--duration <场景秒数>生成匹配长度的音乐;
  3. 技能声明生成时长精确(与请求值误差在 0.1s 内);
  4. 需要跨多个场景的连续 BGM 时,一次性生成长曲目。

与人声旁白混音

在 Remotion 合成中,背景音乐建议压到 10–20% 音量:

<Audio src={staticFile('voiceover.mp3')} volume={1} /> <Audio src={staticFile('bg-music.mp3')} volume={0.15} />

规则:旁白之下用纯器乐预设(corporate-bg、ambient、lofi);音乐主导型场景(Title、CTA)可以提高音量甚至使用带人声版本。这一"器乐优先"的约束在仓库的 skills/creative/music-gen-usage.md 与 tools/audio/music_gen.py 中同样被强制(force_instrumental默认True),是整个项目音频技能的一致口径。

品牌一致性

  • --brand <name>:从brands/<name>/brand.json加载品牌音乐提示;
  • --cover --reference brand_theme.mp3:以品牌主题曲为参考做变体,保持声音身份;
  • 跨项目统一音色:固定--seed 42,只变动时长/prompt。

技术细节与禁用边界

技能声明的技术参数(完整继承):

  • 输出格式:48kHz MP3/WAV/FLAC;
  • 时长范围:10–600 秒;
  • BPM 范围:30–300;
  • 推理耗时:GPU 上 turbo 模式约 2–3s(8 步),Mac MPS 约 40–60s;
  • Turbo 模型:8 步采样、无需 CFG,速度快且质量良好;
  • Shift 参数:turbo 下推荐 3.0,可改善质量。

什么时候不要用 ACE-Step

技能明确划出的四条边界:

  • 声音克隆——应使用 Qwen3-TTS 或 ElevenLabs;
  • 音效(SFX)——应使用 ElevenLabs SFX;
  • 语音/旁白——用 TTS 类工具,不要用音乐生成;
  • 从视频直接分轨——先用 FFmpeg 抽出音轨,再走--extract。

仓库中的 ACE-Step 证据链:本地 ComfyUI 推理路径

技能文档描述的是 RunPod 托管形态;而当前仓库源码中,ACE-Step 的"实体"落在 ComfyUI 本地推理路径上,可互为印证:

  1. 工具实现:tools/audio/comfyui_music.py 定义了ComfyUIMusic工具(capability = "music_generation"、provider = "comfyui"、determinism = SEEDED,支持seed/lyrics/离线运行)。它默认加载内置工作流ace-step-1-t2a.json,并把输入参数逐节点注入:prompt → 节点2的tags,lyrics/lyrics_strength(默认 0.99)→ 节点2,duration_seconds→ 节点4的seconds,seed/steps(默认 50)/cfg(默认 5.0)→ 节点8,输出文件名 → 节点10。这与技能文档中"caption 描述风格、结构标签进歌词、seed 锁定随机性"的语义完全同构。
  2. 工作流模板:tools/_comfyui/workflows/ace-step-1-t2a.json 基于 ComfyUI 核心原生节点TextEncodeAceStepAudio与EmptyAceStepLatentAudio构建,不需要第三方节点包;tools/_comfyui/metadata.py 声明了该工作流所需的检查点ace_step_v1_3.5b.safetensors及下载位置。
  3. 设计文档:docs/comfyui-adapter-plan.md 说明 ACE-Step 选择走 ComfyUI 的原因(diffusers 生态在部分新硬件上不可用),并明确该工具面向 ACE-Step v1;ACE-Step 1.5 可通过workflow_json/workflow_path自定义工作流方式接入(自定义工作流必须提供output_node)。
  4. 契约测试:tests/contracts/test_comfyui_tools.py 验证了内置路径无需自定义工作流、缺模型时返回含下载 URL 的结构化错误、以及 prompt/lyrics/duration/seed 确实被正确 patch 进工作流等断言。
  5. 选型关系:comfyui_music的fallback_tools声明为["suno_music", "music_gen"]——本地 ComfyUI 不可用时回退到其他音乐工具,说明 ACE-Step(本地/RunPod)与 ElevenLabs API 在工具选择器中是同一music_generation能力下的并列/互备 provider。

可以推断:技能文档面向"云端 RunPod 上的 ACE-Step 1.5",仓库源码面向"本地/自托管 ComfyUI 上的 ACE-Step v1 并可扩展 1.5",两者共享同一套 ACE-Step 提示词方法论(tags/lyrics/结构标签/seed),技能中沉淀的 caption 分层与歌词排版规则对两条路径都适用。

适用前提与限制小结

  • 运行 ACE-Step 技能需要配置RUNPOD_API_KEY与RUNPOD_ACESTEP_ENDPOINT_ID,首次可执行--setup创建端点(技能文档声明);
  • 参数硬边界:时长 10–600s、BPM 30–300、输出 48kHz;
  • repaint/lego/complete目前为规划能力,不可当作可用功能引用;
  • 音乐生成不覆盖声音克隆、音效与旁白——这些属于仓库内其他音频技能(TTS、SFX)的职责范围;
  • 仓库当前实际代码路径以 ComfyUI 版comfyui_music(ACE-Step v1 内置工作流)为准,技能文档中的tools/music_gen.pyCLI 参数集(预设、brand、extract、cover-strength)是该技能定义的能力面,引用时应以技能文档声明为前提。

【免费下载链接】OpenMontageWorld's first open-source, agentic video production system. 12 production pipelines, 100+ tools, 700+ agent skill and production-knowledge files. Turn your AI coding assistant into a full video production studio.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMontage

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询