关于 soundtrack
soundtrack 是一项用 Web Audio 为影片创作音乐并与画面剪辑同步的技能,也提供同步检查及使用 AI 生成音乐或用户自备曲目的说明。
主要功能
- 01创作专属 Web Audio 配乐
- 02让场景剪辑落在音乐节拍上
- 03检查同步偏差和音量突变
- 04渲染配乐并封装到 MP4
- 05支持 AI 生成或用户自备音乐
适用场景
- 01为短片编写专属配乐
- 02同步音乐与场景及场内剪辑
- 03查找节拍偏差或突兀音量变化
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ iart-ai/ javascript-animation-skills --skill soundtrack安装后在 Claude Code 中输入/soundtrack确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/ai-music.mdscripts/sync-check.mjstemplates/groove.jsscore.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 音乐或真实音轨。