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を実行してください。
ワークフロー
- スクリプトまたは編集を読み、処理が必要な瞬間をマークします:電話越しの声、水中カメラ、記憶、ドロップ、コメディカットなど。
sfx cuts video.mp4は動画の長さとハードカットを表示します(--thresholdを下げると、デフォルトの 10 より小さいカットも検出します)。時間を秒単位で書き留めてください。 - 下の表からエフェクトを選びます。 迷ったら
sfx listとsfx describeを実行してください。デフォルト値から始めてください。それらはやりすぎずにクリアに聞こえるように調整されています。 - 各トラックを別々に、ミキシングの前に処理します。 時代、キャラクター、空間エフェクトは、フルミックスではなく、ボイスまたは特定のエフェクトに適用します。例外は、聞こえるすべてに影響を与えるナラティブデバイス(水中、シェルショック、夢)です。
- クリップ内の変更にはウィンドウを使用します(
@from-to)。ファイルをカットして結合する必要はありません。 - 最後にミックスとノーマライズを
sfx mixで行います(「ミキシング」を参照)。ボイス下で音楽をダッキングし、マスターをソーシャルメディアとYouTube用に -14 LUFS に向けてノーマライズします(ポッドキャストの場合は--loudness -16、放送の場合は-23)。単一ファイルの場合は、チェーンの最後でloudnessを使用すると同じ効果が得られます。その後、sfx analyzeでラウドネスがターゲット付近にあり、トゥルーピークが -1 dBTP 以下であることを確認します。 - あなたは聞くことができません。 適用したエフェクトとその時間を伝え、ユーザーが耳で調整できるように
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)を接続している場合:
- まず再利用します。
sfx sample list:適切なサンプルが既にあればそれを使用します。 - 検索 は
SearchSoundEffectsで行います。短く具体的な用語("cinematic impact low"、"whoosh fast short"、"glass shatter")、first: 5、使用に合ったミリ秒単位の長さフィルタ(インパクトとウィッシュは 4000 未満、アンビエンスはそれ以上)を使用します。タイトル、タグ、長さで選択します。 - ダウンロード は
DownloadSoundEffect(fileType: WAV)で行います。有効期限のある署名付きURLを返します。 - 保存します:
sfx sample add "<assetUrl>" --title "<title>" --id <id> --source epidemic-sound。署名付きURLをファイルに書き込んだり、オーディオをプロジェクト内に保存したりしないでください。 - 使用します。
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)を使用:
- 動画を測定します。
sfx cuts cut.mp4はその長さ(例:30.000 秒)とハードカットを表示します。ドロップを着地させるメインカットC(例:12.4 秒)についてユーザーと合意します。 - トラックを見つけて保存します。
SearchRecordingsをquery: { term: "..." }、filter(bpm: {min,max}、duration: {min,max}、mood: "...")などで実行し、結果を確認します。候補が決まったらダウンロードします。 - カットする長さを決めて編集を開始します。
EditRecordingでrecordingIdとlength: 30.0(動画の長さ)、dropTime: 12.4(カットC)を指定してジョブを作成します。ジョブID が返されます。 - 結果をポーリングしてダウンロードします。
PollEditRecordingJobでステータスがDONEになるまで待ち、DownloadRecordingEditで編集結果の URL を取得します。 - 保存してミックスに含めます。
sfx sample addでカット済みトラックを追加します。
編集では音楽のテンポが変わることはなく、単にオーディオが指定された長さにカットされ、フェードイン/アウトが適用され、ドロップが dropTime に配置されます。動画の長さがトラックの元の長さより短い場合のみ意味があります。
長さとカット位置を提案する際は、秒数を正確に指定してください。どの曲が「正しく」聞こえるかはユーザーが判断する必要があります。