7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ラジオの自動作成〜ミキシング編〜:FFmpegを利用した音声結合

Last updated at Posted at 2025-12-03

はじめに

この記事は、モチベーションクラウドシリーズアドベントカレンダー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つの動きを実現します。

  1. 最初の5秒はBGMだけを流す
  2. 5秒からBGMの音量をゆっくり下げ、BGMレベルへフェードさせる
  3. 同じ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などを立ち上げて使用する。などを持って自動化処理が出来そうです

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?