mcpField
S
soundtrack

soundtrack

github.com/iart-ai创意与媒体35598 次安装4 周前更新
代码仓库

关于 soundtrack

soundtrack 是一项用 Web Audio 为影片创作音乐并与画面剪辑同步的技能,也提供同步检查及使用 AI 生成音乐或用户自备曲目的说明。

主要功能

  1. 01创作专属 Web Audio 配乐
  2. 02让场景剪辑落在音乐节拍上
  3. 03检查同步偏差和音量突变
  4. 04渲染配乐并封装到 MP4
  5. 05支持 AI 生成或用户自备音乐

适用场景

  1. 01为短片编写专属配乐
  2. 02同步音乐与场景及场内剪辑
  3. 03查找节拍偏差或突兀音量变化

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/iart-ai/javascript-animation-skills --skill soundtrack

安装后在 Claude Code 中输入/soundtrack确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
ai-music.md
scripts/
sync-check.mjs
templates/
groove.js
score.js

详细介绍

配乐

为这部影片创作声音

影片的声音要为影片量身创作:在 Web Audio 中从零开始编写专属的乐器、节奏和和声,放在 window.SCORE = ac => { … } 中(振荡器、噪声、滤波器、包络、延迟:按曲目需要选用)。鼓点、律动或音乐盒底音也要以同样的方式为这部影片创作:不能让不同影片因为共用模板而听起来一样。templates/groove.js 和 templates/score.js 是两份可直接使用的乐谱,仅在用户提出要求时使用;每个文件都说明了自身的选项。

render.mjs(来自 javascript-animation 技能)使用 OfflineAudioContext 离线渲染 window.SCORE,写入 <out>.wav 并将其复用到 MP4 中;点击页面中的实时预览时,也会播放同一段配乐。

不要一开始就让用户选择音乐来源。交付时用一句话说明,也可以使用 AI 生成的音乐或用户自己的曲目。

音乐如何跟随画面

  • 节拍映射。 每个场景分配整数小节数(速度可随场景变化),这样每次剪辑都会落在强拍上。
  • 用和声而非音量标记剪辑点。 每个场景以属音收尾,剪辑点落在主音上。剪辑点处响亮的重音(低音与明亮的钟声同时出现)听起来像惊吓音效:用户反馈,音量跃升 +7 至 +10 dB 会让人受惊;+3 至 +5 dB 再配合和弦变化,则听起来像干净利落的剪辑。
  • 如果第一小节是第一次剪辑前的唯一一小节,就不要让它变得稀疏;稀疏的前奏接上完整织体,本身就会造成惊吓感。
  • 不要在剪辑点的强拍额外加重音。 即使是常规的强拍重音(更响的低音 + 第一个音符),也会让短片的音量跃升超过 +6 dB,因为前一小节的声音正在衰减。和弦变化就足够了。
  • 场景内的硬切也要计入。 同样把它们放进 window.CUES,让它们也落在强拍上。
  • 让观众有可跟随的节奏。 没有打击乐的连奏音乐缺少可供剪辑点落下的重音。有稳定律动时,重音就是节奏的一部分,不会让人受惊(检测会与前几秒比较,而不是与某个孤立的安静时刻比较)。
  • 每小节只加入一到两个声部。 在安静的前奏后,底鼓和低音同时加入,测得音量跃升 +11 dB(会让人受惊);错开一小节加入,则为 +3.5 dB。
  • 设置一个间歇。 在高潮前让所有声音静音一小节,是短片中最有力的节拍。sync-check 会将切入静音视为落在节拍上。

其他来源(仅在用户提出要求时)

  • AI 生成的音乐(例如通过 OpenRouter 使用 Lyria):参见 references/ai-music.md。
  • 用户自己的曲目:使用 ffmpeg 将其复用到视频中。

如果使用无法控制的音乐,就反过来:让画面跟随音乐。 渲染、复用、运行检查,然后按照报告的偏移量调整页面 SCENES 表中的场景边界并重新渲染。这样做成本很低,因为每个场景函数都会接收局部时间(从场景自身起点的 0 开始),这是入门代码中的写法:移动边界不会影响场景代码。

始终:进行检查

node scripts/sync-check.mjs piece.mp4 --cues-file piece.cues.json   # check the declared CUES (preferred)
node scripts/sync-check.mjs piece.mp4                       # fallback: detect cuts in the picture (fast camera moves can read as cuts)

对于每个事件,它都会打印该事件与最近强音频起音的偏移量,以及事件发生时的响度跃升。若出现 OFF-BEAT(偏差超过 ±100 ms,约 3 帧)或 STARTLE(相较前一秒音量跃升超过 +6 dB),检查就会失败。开头一秒和最后的渐弱部分会跳过(没有可供比较的“之前”音量;渐弱结束不算剪辑点)。“强”表示在 ±2 s 范围内的起音中较为突出,因此安静段落中的重音也会计入;切入静音视为落点准确;间歇后音乐恢复时,会与前 4 s 的典型音量比较。没有音轨的视频会被明确报告。将每个剪辑点以及任何希望检查的场景内节拍点(镜头内部的硬切、笑点的撞击声)都放进 window.CUES。修复后重新运行,直到检查通过,或直到剩下的每个 STARTLE 都是你能明确指出的有意强调音效(喜剧撞击声本来就该让人吓一跳;摇篮曲中的剪辑点则不该如此)。

限制

代码合成:音乐盒、钢琴般的拨弦、铺底音色、铃声和轻柔打击乐都可以。真实人声、管弦乐和流派制作则不行;这些请使用 AI 音乐或真实音轨。

评论

支持 Markdown