mcpField
S
soundtrack

soundtrack

github.com/iart-aiクリエイティブ・メディア35598 回インストール4 週間前に更新
リポジトリ

soundtrack について

soundtrackは、Web Audioで映像に合わせた音楽を作り、カットと同期させるスキルです。同期検査に加え、AI生成曲やユーザー提供の音源を使う方法も記載しています。

主な機能

  1. 01Web Audioで独自のスコアを作成
  2. 02シーンのカットを拍に合わせる
  3. 03同期ずれと音量変化を検査
  4. 04スコアをレンダリングしてMP4に多重化
  5. 05AI生成曲やユーザー提供曲に対応

活用シーン

  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 は、ユーザーから指定があった場合にのみ使用する、すぐに使えるスコアです。それぞれのファイルにオプションの説明があります。

javascript-animation スキルの render.mjs は、OfflineAudioContext を使って window.SCORE をオフラインでレンダリングし、<out>.wav に書き出して MP4 に多重化します。ページのライブプレビューでは、クリックすると同じスコアを再生します。

最初に音楽のソースを選ぶよう、ユーザーに求めないでください。納品時に、AI 生成音楽やユーザー自身のトラックも使えることを一文で伝えてください。

音楽を映像に合わせる方法

  • テンポマップを使う。 シーンごとに小節数を整数で割り当てます(シーンごとにテンポを変えてもかまいません)。これにより、すべてのカットが強拍に重なります。
  • 音量ではなく、ハーモニーでカットを示す。 各シーンでは属音に向かって解決し、カットの瞬間に主音へ到着させます。カットに大きなアクセントを加える(ベースと明るいチャイムを同時に鳴らす)と、ジャンプスケアのように聞こえます。ユーザーからは、+7〜+10 dB の音量差は驚かされる一方、和音の変化を伴う +3〜+5 dB の音量差なら自然な編集に聞こえるとの報告がありました。
  • 最初のカットまでに小節が1つしかない場合、その冒頭の小節を薄くしないでください。 まばらなイントロからフルのテクスチャへ移ること自体が、驚きを生みます。
  • カットの強拍に余分なアクセントを加えないでください。 通常の強拍のアクセント(大きめのベース音と最初の音)でさえ、短い作品では +6 dB を超えることがありました。直前の小節の音が減衰しているためです。和音の変化だけで十分です。
  • シーン内のハードカットも対象です。 window.CUES にも追加し、同じ強拍に揃えてください。
  • 目で追えるものを用意してください。 パーカッションのないレガートな音楽には、カットの着地点となるアクセントがありません。安定したグルーヴがあれば、アクセントはリズムの一部なので驚かせることはありません(チェックでは一瞬の静かな箇所ではなく、直近数秒と比較します)。
  • レイヤーは小節ごとに1つか2つずつ加えてください。 静かなイントロのあとにキックとベースを同時に加えたところ、音量差は +11 dB(驚かせる)でした。1小節ずつずらして加えると +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)

各イベントについて、最も近い強い音の立ち上がりまでのオフセットと、そのイベントに入るときの音量差を表示します。拍からのずれが ±100 ms(約3フレーム)を超えると OFF-BEAT、直前の1秒間と比べて +6 dB を超えると STARTLE として失敗します。冒頭の1秒間と最後のフェードはチェック対象外です(比較する直前の音がなく、フェードアウトはカットではないため)。「強い」とは、±2秒以内の立ち上がりのなかで目立つことを意味します。そのため、静かなパッセージのアクセントも対象になります。無音へのカットは着地として扱い、ブレイク後に音楽が戻る場合は、直前4秒間の標準的な音量と比較します。音声ストリームのない動画は、そのように報告されます。すべてのカットと、チェックしたいシーン内のヒット(ショット内のハードカット、ギャグの衝撃音など)を window.CUES に追加してください。合格するまで修正して再実行するか、残った STARTLE がすべて意図したスティンガーだと説明できる状態にしてください(コメディの衝撃音は驚かせるためのものですが、子守歌のカットはそうではありません)。

制限

コードで合成する音楽:オルゴール、ピアノのような撥弦音、パッド、ベル、控えめなパーカッションは問題ありません。リアルな歌声、オーケストラ、ジャンル特有の音作りには対応していません。その場合はAI音楽または実際の楽曲を使用してください。

コメント