Communitygithub.com

sound-design

ローカルの AudioFX CLI (`sfx`) を使った動画のサウンドデザイン。65種類のエフェクトをffmpegフィルターグラフとして提供。合成シネマモーメント(インパクトヒット、ライザー、ウィッシュ、サブドロップ、トレーラーブラーム、ドロップ前のギャップ、リバーブテール付きカット、リバーブ/エコースロー、スタッター、トレーラーボイス、アーカイブボイス)、録音サンプル(Epidemic Sound などのユーザーサウンドライブラリ、ElevenLabs、ローカルファイルから)の正確な秒数へのレイヤリング、ボイス・音楽・効果音のタイムラインミキシング(ボイス下での音楽ダッキング)、動画に合わせた音楽フィッティング(動画の長さにカットされ、メインカットにドロップが合うトラック、ステム単位の処理)、および各種処理(AMラジオ、固定電話、携帯電話、デバイススピーカー、トランシーバー、古いテレビ、ビニール、カセット、水中、壁越し、バスルームから大聖堂までのリバーブ、エコー、遠く、ロボット、モンスター、ゴースト、夢、フラッシュバック、爆発後のシェルショック、スローモーション、テープストップ、フィルタースイープ、リバーススウェル、ローパス/ハイパス、クリーンボイス、LUFSノーマライゼーション)。動画のオーディオを構築、編集、ミックスするとき(ffmpeg、Python with numpy、Remotion、起動カット、リール、解説動画)、シーンが何かを「まるで〜のように」聞こえるように要求するとき、ボイスや曲や効果音に処理が必要なとき、ドロップやカットへのヒット、タイトル、サウンドトランジションを準備するとき、動画用の音楽を選んだりカットしたりするとき、出力用にラウドネスをノーマライズするとき(リクエストにオーディオエフェクトの言及がなくても)に使用します。また、処理が必要なElevenLabsのボイス、音楽、効果音にも使用します(生成には elevenlabs-fx スキルを参照)。スペイン語での指示にも対応:水中、ラジオ、電話、ゴルペ、ライザー、ウィッシュ、ブラーム、サンプル、録音効果音、ミックス、ダッキング、ビデオに合わせた音楽、カットでのドロップ、ステム、LUFS。

sound-design とは?

このスキルは、動画制作におけるプロフェッショナルなサウンドデザインを、ローカルで動作する AudioFX CLI (`sfx`) を通じて実現します。65種類以上の多様なオーディオエフェクトを、ffmpegフィルターグラフとして直接適用でき、ヒットやライザー、サブドロップといったシネマティックな瞬間を合成する機能から、録音されたサンプルを正確な秒数でレイヤリングする機能、さらにはボイス、音楽、効果音をタイムライン上でミックスし、ボイスに合わせて音楽を自動でダッキング(音量低下)させる高度なミキシング機能まで備えています。動画に合わせた音楽フィッティングでは、曲の長さを動画に合わせ、ドロップをメインカットに同期させることが可能で、ステム(パート別オーディオ)単位の処理もサポートします。また、AMラジオや水中、ロボットボイスなど、50種類以上のユニークなサウンド処理(トリートメント)を適用でき、最終的なラウドネスをLUFS規格に合わせてノーマライズすることもできます。このスキルは、ffmpeg、Python、Remotionなど、あらゆる動画編集環境と連携し、スクリプトから直接、あるいはCLIを介して高速かつ一貫性のあるサウンドデザインワークフローを提供します。Epidemic Sound MCPとの統合により、サウンドライブラリからのサンプル検索やダウンロード、音楽の編集もシームレスに行えます。ユーザーは `sfx studio` コマンドでブラウザベースのインターフェースを起動し、エフェクトを試聴・微調整することも可能です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/NachoEstevo/audiofx/tree/HEAD/skills/sound-design

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

AudioFX によるサウンドデザイン

AudioFX はサウンドデザインエフェクトを ffmpeg フィルターグラフ に変換します。各エフェクトは ffmpeg -af に直接渡す文字列、または CLI でファイルに適用される文字列です。ウェブスタジオで聞こえるものは、レンダーから出力されるものと全く同じです。

コマンド

このドキュメント全体で sfx は以下を意味します。

node {{AUDIOFX_DIR}}/bin/sfx.mjs

もし sfx がこのマシンでコマンドとして使えない場合は、フルパスを使用してください。任意のフォルダから動作します。ffmpeg が原因で失敗した場合は、sfx doctor を実行してください。

必要なものコマンド
カタログsfx list (または --json)
パラメータ、範囲、エフェクトを使用するタイミングsfx describe <effect>
オーディオまたはビデオファイルの処理sfx apply <input> <output> <step...>
独自の ffmpeg 用フィルターグラフsfx graph <step...>
ラウドネスとピークの測定sfx analyze <file>
動画の長さとハードカットsfx cuts <video>
曲が盛り上がる場所(ドロップ候補)と落ちる場所sfx sections <file>
ボイス、音楽、効果音をタイムライン上でミックスし、ボイス下で音楽をダッキングsfx mix <output> --voice v.wav --music m.wav [--sfx hit.wav@6] [--video cut.mp4]、または sfx mix project.json <output>
録音サンプルを保存してレイヤリング`sfx sample add <file
新しいボイス、サウンド、曲(処理済み)`sfx generate <sfx
ユーザーに聴かせて調整させるsfx studio (http://127.0.0.1:5177 を開きます)

ステップは effect[:param=value,param=value][@from-to] のように記述します。

sfx apply voice.wav voice-phone.wav telephone
sfx apply clip.mp4 clip-fx.mp4 "underwater:[email protected]" --fade 0.4
sfx graph "reverb:space=cathedral,mix=0.4" "fade:in=0,out=2"
  • ステップは順番に実行されます。
  • @3.2-7 はエフェクトをそのウィンドウに限定し、--fade 秒のクロスフェード(デフォルトは 0.25)でドライ信号と処理済み信号を切り替えます。@3.2- は 3.2 秒から終わりまでを意味します。
  • 出力が .mp4、.mov、.mkv、.webm の場合、映像は再エンコードせずにコピーされ、音声が置き換えられます。
  • パラメータを間違えた場合、CLI は有効なパラメータを表示します。推測しないでください。sfx describe を実行してください。

ワークフロー

  1. スクリプトまたは編集を読み、処理が必要な瞬間をマークします:電話越しの声、水中カメラ、記憶、ドロップ、コメディカットなど。sfx cuts video.mp4 は動画の長さとハードカットを表示します(--threshold を下げると、デフォルトの 10 より小さいカットも検出します)。時間を秒単位で書き留めてください。
  2. 下の表からエフェクトを選びます。 迷ったら sfx list と sfx describe を実行してください。デフォルト値から始めてください。それらはやりすぎずにクリアに聞こえるように調整されています。
  3. 各トラックを別々に、ミキシングの前に処理します。 時代、キャラクター、空間エフェクトは、フルミックスではなく、ボイスまたは特定のエフェクトに適用します。例外は、聞こえるすべてに影響を与えるナラティブデバイス(水中、シェルショック、夢)です。
  4. クリップ内の変更にはウィンドウを使用します(@from-to)。ファイルをカットして結合する必要はありません。
  5. 最後にミックスとノーマライズを sfx mix で行います(「ミキシング」を参照)。ボイス下で音楽をダッキングし、マスターをソーシャルメディアとYouTube用に -14 LUFS に向けてノーマライズします(ポッドキャストの場合は --loudness -16、放送の場合は -23)。単一ファイルの場合は、チェーンの最後で loudness を使用すると同じ効果が得られます。その後、sfx analyze でラウドネスがターゲット付近にあり、トゥルーピークが -1 dBTP 以下であることを確認します。
  6. あなたは聞くことができません。 適用したエフェクトとその時間を伝え、ユーザーが耳で調整できるように sfx studio を提案します。ユーザーが新しい値を送り返してきた場合、スタジオはコピーするための正確なコマンドを表示します。

シネマモーメント:カットを際立たせるもの

ローンチ動画が「映画的」に聞こえるのは、声にフィルターをかけるからではなく、適切な瞬間に配置された要素(カットに向かって上がっていくライザー、沈黙のギャップ、そして製品が表示される時のサブを伴うヒット)によるものです。これらのエフェクトは、同じフィルターグラフ内でこれらの要素を合成し(ライセンス済みサンプルは不要)、at=<second> でアンカーされます。

モーメントチェーン(T でのカット)
カットへのヒット、製品表示"riser:at=T,length=2.5" "drop-gap:at=T-0.45,gap=0.45" "hit:at=T"
タイトルまたはロゴ"braam:at=T" "sub-drop:at=T,level=-4"
テキストまたはUIのフライングイン"whoosh:at=T,length=0.8"(T でピーク)
ブラックへのカット"stop-tail:at=T,decay=3.5" "sub-drop:at=T,level=-4"
単語の強調"throw:at=T,kind=echo" をボイスに
テックグリッチ"stutter:at=T,slice=0.12,repeats=4"(オーディオが伸びる)
  • at は処理しているファイル内のカットの秒数です。riser の場合はそれが 終わる 位置、whoosh の場合はピークになる位置、drop-gap の場合はギャップが 始まる 位置です。
  • gain に触れる前に level (dB) でレベルを調整してください。hit と sub-drop はすでに大きめに入っています。
  • 数は少なく正確に:15秒あたり1〜2モーメント。すべてのカットにヒットを入れると疲れます。
  • trailer-voice(深く壮大な部屋のこもった声)と archival(アーカイブインタビュー)はボイス処理であり、at はありません。
  • 合成されたものではなく、実際の録音サウンド(重みのある衝撃、ドア、ガラス、雨)が必要ですか? T でサンプルをレイヤリングします:次のセクションを参照してください。

レイヤーとしての実際のサンプル

合成ヒットは高速で無料ですが、録音されたインパクト、ウィッシュ、フォーリーサウンドは通常、よりリアルに聞こえます。layer エフェクトは、同じフィルターグラフ内で、任意のオーディオファイルを正確な秒数で信号にミックスします。

sfx apply mix.wav mix-door.wav "layer:file=door.wav,at=6,align=onset,level=-3"
sfx apply mix.wav mix-hit.wav "riser:at=6,length=2.5" "drop-gap:at=5.55,gap=0.45" "layer:file=library:ab12cd34ef56,at=6,align=onset" "sub-drop:at=6,level=-4"
  • align=onset はサンプルのアタックがある場所を測定し、それを at に 合わせます。サンプルは多くの場合、20〜300ミリ秒の無音またはプリロールから始まります。デフォルトの align=start では、その無音によってヒットが遅れて着地します。ウィッシュやスウェルの場合は align=peak を使用します。これらの最も大きなポイントがカットに着地するものです。
  • level は dB 単位、length は最初の数秒のみを使用するため、fadeIn / fadeOut で整形します。sync=<s> は手動でシンクポイントを設定します(align=start の場合)。
  • サンプルは合成された hit、braam、または whoosh を置き換えます。その周囲に riser、drop-gap、sub-drop を残します。
  • サンプル自体を処理するには(リバーブ、距離、スピーカーなど)、最初に sfx apply sample.wav sample-fx.wav ... で処理し、結果をレイヤリングします。
  • 通過音(車、バイク、ドローン):分離したサンプルを at を最も近いポイントにして doppler でレンダリングし、sync をその秒に合わせてレイヤリングすると、通過音がカットに着地します:sfx apply car.wav car-pass.wav "doppler:at=2,speed=90"、次に "layer:file=car-pass.wav,at=6,sync=2"。
  • サンプルレベルは大きく異なります。レイヤリング後、結果に対して sfx analyze を実行し、ピークが 0 dBFS に達する場合は level を下げてください。

サンプルの保存場所

サンプルはユーザーのサブスクリプションに属するライセンス済みオーディオです。~/.audiofx/samples に保存され、各サンプルの横に .json(id、タイトル、ソース、種類、ステム)が置かれ、決してプロジェクトフォルダやリポジトリには保存されません。

sfx sample add <file-or-url> --title "ドアの slammed、重い木" --id <library id> --source epidemic-sound
sfx sample list            # 各サンプルの library:<id>、長さ、アタックの位置を表示

sample add はローカルファイルをコピーするかURLをダウンロードし、アタックを測定し、layer:file=... で使用する library:<id> 参照を出力します。スタジオは Samples タブにサンプルを表示し、そのモーメントは合成されたインパクトやウィッシュの代わりにサンプルを使用できます。

サウンドライブラリからのフェッチ (Epidemic Sound MCP)

ユーザーが Epidemic Sound MCP(ツール SearchSoundEffects と DownloadSoundEffect)を接続している場合:

  1. まず再利用します。 sfx sample list:適切なサンプルが既にあればそれを使用します。
  2. 検索 は SearchSoundEffects で行います。短く具体的な用語("cinematic impact low"、"whoosh fast short"、"glass shatter")、first: 5、使用に合ったミリ秒単位の長さフィルタ(インパクトとウィッシュは 4000 未満、アンビエンスはそれ以上)を使用します。タイトル、タグ、長さで選択します。
  3. ダウンロード は DownloadSoundEffect(fileType: WAV)で行います。有効期限のある署名付きURLを返します。
  4. 保存します:sfx sample add "<assetUrl>" --title "<title>" --id <id> --source epidemic-sound。署名付きURLをファイルに書き込んだり、オーディオをプロジェクト内に保存したりしないでください。
  5. 使用します。sample add が出力した library:<id> を "layer:file=library:<id>,at=T,align=onset" のように使用します。

聞くことができないため、サンプルが「正しく聞こえる」と主張しないでください。測定できるもの(長さ、アタックの位置、結果のピーク)を報告し、選択が重要な場合は、2〜3の候補を追加し、スタジオの Samples タブでユーザーが耳で選べるようにします。ダウンロードが RETRY_LATER で失敗した場合、指定された秒数待ってから再試行します。

ミキシング:sfx mix

sfx mix は、ボイス、音楽、効果音のクリップを1つのタイムラインに配置し、ボイス下で音楽をダッキングし、マスターをノーマライズします。これを1回の ffmpeg パスで行います。簡易形式ではクリップごとに1つのフラグ、file@second を使用します。

sfx mix final.mp4 --video cut.mp4 --voice [email protected] --music library:<id> --sfx [email protected]
sfx mix final.wav --voice vo.wav --music song.wav --duck 14 --loudness -16
sfx mix --video cut.mp4 --voice [email protected] --music song.wav --print > mix.json
  • 音楽はボイスが再生されている間、10 dB 下がります(--duck <dB>、--no-duck)。--sfx クリップのアタックは、align=onset と同様に、その秒数に着地します。
  • マスターは -14 LUFS に向けてノーマライズされ(--loudness <LUFS|off>)、その後 -1 dB のシーリングが適用されます。ミックスは測定され、固定ゲインでターゲットに合わせられます。そのためダイナミクスは維持されます。ピークが最初にシーリングに達した場合、リミッターが最大 6 dB まで押し上げられてギャップを埋めるため、非常に大きなヒットがあるミックスでもターゲットを下回ることができます。sfx analyze で確認してください。動画の AAC オーディオはシーリングより約 0.3 dB 高いピークになる可能性があります("master": { "ceiling": -1.5 } とすると -1 dBTP を維持します)。
  • ミックスの長さは --duration、そうでなければ動画の長さ、そうでなければ最後のクリップの終わりまでです。--video と動画出力の場合、映像はコピーされ、音声が置き換えられます。
  • --print はレンダリングせずにプロジェクトJSONを出力します。編集してから sfx mix mix.json final.mp4 を実行してください。

プロジェクトファイルを使用すると、各クリップとトラックに独自の設定を与えることができます。パスはプロジェクトファイルからの相対パスであり、library:<id> はファイルが必要な場所ならどこでも機能します。

{
  "version": 1,
  "video": "cut.mp4",
  "tracks": [
    { "id": "voice", "role": "voice", "clips": [{ "file": "vo.wav", "at": 1.5, "steps": [{ "effect": "voice-clean" }] }] },
    { "id": "music", "role": "music", "clips": [{ "file": "library:<id>", "fadeOut": 2 }], "duck": { "depth": 12, "release": 600 } },
    { "id": "hits", "role": "sfx", "clips": [{ "file": "door.wav", "at": 7.52, "align": "onset", "gain": -3 }] }
  ],
  "master": { "loudness": -14 }
}
  • クリップ:file、at(タイムライン上の秒数)、start と length(ファイルの使用する範囲)、gain(dB)、fadeIn、fadeOut、align(start、onset、peak)、steps。
  • トラック:id、role(voice、music、sfx)、gain、mute、solo、steps、duck(true、false、または { depth、attack、release、threshold }。music ではデフォルトでオン)。
  • ステップ:{ "effect": "underwater", "params": { "depth": 0.8 }, "from": 4, "to": 9.5, "fade": 0.35 }。クリップステップはクリップ時間(0 = クリップの開始)で実行されます。トラックステップはタイムライン時間で実行されるため、そのウィンドウは動画と一致します。
  • マスター:steps、loudness(null はレベルをミックスされたままにする)、ceiling(dB、デフォルト -1)。

動画に合わせた音楽のフィッティング

目標は、動画の正確な長さにカットされ、動画のメインカットにドロップが合うトラックを作成することです。どの盛り上がりが「その」ドロップなのかを聞くことはできません。数値で測定し、提案し、ユーザーが耳で確認できるようにします。Epidemic Sound MCP(SearchRecordings、DownloadRecording、EditRecording、PollEditRecordingJob、DownloadRecordingEdit)を使用:

  1. 動画を測定します。 sfx cuts cut.mp4 はその長さ(例:30.000 秒)とハードカットを表示します。ドロップを着地させるメインカット C(例:12.4 秒)についてユーザーと合意します。
  2. トラックを見つけて保存します。 SearchRecordings を query: { term: "..." }、filter(bpm: {min,max}、duration: {min,max}、mood: "...")などで実行し、結果を確認します。候補が決まったらダウンロードします。
  3. カットする長さを決めて編集を開始します。 EditRecording で recordingId と length: 30.0(動画の長さ)、dropTime: 12.4(カット C)を指定してジョブを作成します。ジョブID が返されます。
  4. 結果をポーリングしてダウンロードします。 PollEditRecordingJob でステータスが DONE になるまで待ち、DownloadRecordingEdit で編集結果の URL を取得します。
  5. 保存してミックスに含めます。 sfx sample add でカット済みトラックを追加します。

編集では音楽のテンポが変わることはなく、単にオーディオが指定された長さにカットされ、フェードイン/アウトが適用され、ドロップが dropTime に配置されます。動画の長さがトラックの元の長さより短い場合のみ意味があります。

長さとカット位置を提案する際は、秒数を正確に指定してください。どの曲が「正しく」聞こえるかはユーザーが判断する必要があります。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル