はじめに
この記事は、モチベーションクラウドシリーズアドベントカレンダー2025の記事です。
最近、「自分の興味のあるテーマでラジオ番組を自動で作れたら面白いのでは?」と思い、
n8n × GPT を使った“ラジオ自動生成”に細々と取り組んでいます。
以前はn8nとOpenAI TTSを組み合わせて、パーソナリティが原稿を読み上げるMP3ファイルを自動生成するところまで構築しました。
今回はその続きで、ラジオの雰囲気を決める重要な工程「BGMのミキシング」を扱います。
読み上げ音声ファイルをラジオらしいものにするために、今回は FFmpeg を使いました。
前提
ラジオ音源のミキシングには、以下の2つの音声ファイルが必要です。
(音源A)BGM 音源
お好みのMP3を用意してください
(音源B)パーソナリティ音声
こちらもお好みのMP3を作成し用意して下さい。
以前はn8nとOpenAI TTSを使用し、ワークフローで自動作成できるまで作りました。
前回記事として下記にまとめております
今回はこの2つの音源を組み合わせて、
“ラジオ風mp3ファイル” を仕立てることが目的です。
使用ツール:FFmpegとは
今回のミキシング処理で使用したツールは FFmpeg です。
FFmpeg は、音声・動画の加工や変換を行うためのOSS のメディアエンコーダーになります
CLIから操作することができ、提供されているffmpegコマンドでは、
- 音量調整
- フェードイン / フェードアウト
- ミキシング
- ディレイ
- 形式変換(mp3, wav, mp4 …)
などを スクリプト1行で実行できます。
GUI のDAWを使わず、自動生成フローの中で音声編集を完結できるため、
今回のような「ラジオ風音声を自動作成したい」というケースに最適かと思います
ゴール
今回の目標は、「BGMをつけて実際のラジオ番組のような自然な"イントロ〜トーク開始"の流れを作る」ことです。
具体的には、次の3つの動きを実現します。
- 最初の5秒はBGMだけを流す
- 5秒からBGMの音量をゆっくり下げ、BGMレベルへフェードさせる
- 同じ5秒地点からパーソナリティ音声が自然に入る
この “イントロ → クロスフェード → トーク開始” をFFmpeg の1コマンドで自動で生成します。
完成したミキシング用のコマンド(FFmpeg)
ffmpeg -i BGMデータ.mp3 -i 音声データ.mp3 \
-filter_complex "\
[0:a]asplit=2[aloud][aquiet]; \
[aloud]afade=t=out:st=5:d=1.5[aloud_faded]; \
[aquiet]volume=0.15,afade=t=in:st=5:d=1.5[aquiet_faded]; \
[aloud_faded][aquiet_faded]amix=inputs=2[aA]; \
[1:a]adelay=5000:all=1[bB]; \
[aA][bB]amix=inputs=2:duration=longest:dropout_transition=2" \
-c:a libmp3lame -b:a 192k output_radio.mp3
コマンドを一行ずつ見ていきます
① BGM(A)を2つに分ける
[0:a]asplit=2[aloud][aquiet];
(クロスフェードの土台になる分岐。音声を2つに分けて用意しておきます)
- aloud:イントロで使う大きいA
- aquiet:後半のBGM用の小さいA
② (クロスフェード)大きいBGMをフェードアウト
イントロの「終わり感“」を作る部分になります
先程分割した中の"aloud"側を使用
[aloud]afade=t=out:st=5:d=1.5[aloud_faded];
5秒からフェードアウト&1.5秒かけて 1.0 → 0 へ
③ (クロスフェード)小さいBGMをフェードイン(BGMとして登場)
BGMが自然に立ち上がる箇所です
先程分割した中の"aquiet"側を使用
[aquiet]volume=0.15,afade=t=in:st=5:d=1.5[aquiet_faded];
小さいBGMを流し始めます
BGMの大きさ(0.15倍)& 無音 → 0.15 に1.5秒かけてフェードイン
④ 2つを重ねて“自然に音量が下がるA”を作る
[aloud_faded][aquiet_faded]amix=inputs=2[aA];
フェードアウトするAと、フェードインするAを合成。
結果として「1本のAが自然に変化した」ように聞こえます。
⑤ パーソナリティ音声(B)を5秒遅らせる
イントロ終了に合わせて、パーソナリティ音声を流し始めます
[1:a]adelay=5000:all=1[bB];
5秒後にトークが始まるようタイミングを調整
⑥ A(BGM)と B(音声)をミックスして完成
[aA][bB]amix=inputs=2
BGMが小さく背後で流れ続けつつ、パーソナリティの声が主役になる“ラジオの出だし”が完成。
出来た出力
生成された MP3 は、
- イントロBGMが単独で流れ
- 徐々に音が下がってBGM化し
- 同じタイミングでトークが入り
- 以降は小音量のBGMが続く
という ラジオの典型的な入り方が自動で生成されます。
感想
FFmpeg の各種フィルタ操作は、GUIなしで細かく再現性ある音声編集が可能で、今回のような“ラジオ生成”を自動実行に組み込んで行きたい場合には相性が良さそうです。
今回はlocalで実行を行いましたが、この工程自体もワークフロー化するためにはFFmpegインストール済みのlocal環境でのn8nなどを立ち上げて使用する。などを持って自動化処理が出来そうです