4
1

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 で音声ファイルを時間差でミックスする: adelay と amix の利用(dropout_transition も)【コマンドラインツール/CLI:2】

Posted at

(この記事は コマンドラインツール/CLI の Advent Calendar 2025 の記事【2つ目】にする予定です)

はじめに

この記事の内容は、FFmpeg を使って 2つの音声ファイルをミックスするという話です。その際、時間差でミックスする、ということもやってみます。

メインの内容

この記事のメインの内容となるコマンドは、以下のとおりです。

ffmpeg -y -i input01.mp3 -i input02.mp3 \
-filter_complex "[1:a]adelay=1000|1000[bdel]; \
                 [0:a][bdel]amix=inputs=2:duration=longest" \
-c:a libmp3lame out_mixed.mp3

2つの音声ファイルのミックスに「adelay」を使い、その処理で再生開始のタイミングに時間差をつけるところで「amix」を使っています。

上記の補足

上記のコマンドについて、少し補足します。

出力関連のオプション

出力関連のオプションで、以下を使っています。

  • -y: 出力ファイルが存在する場合、確認なしで上書きする
  • -c:a libmp3lame: 音声コーデックに MP3 を使用

それと、出力ファイル名を「out_mixed.mp3」で指定しています。

amix による音声ファイルのミックス

以下 2つを入力としています。

  • -i input01.mp3: 1つ目の入力ファイル(ストリーム[0:a])
  • -i input02.mp3: 2つ目の入力ファイル(ストリーム[1:a])

そして、この後に補足する遅延追加の処理をしたものと、入力ストリームの 1つを、「amix(オーディオミックスフィルタ)」を使い合成しています。以下は合成の処理の補足です。

  • [0:a][bdel]: input01.mp3 と遅延させた input02.mp3 をミックス
    • [bdel]: 遅延処理後のストリームにつけたラベル(遅延を入れた段階でつけたラベル)
  • inputs=2: 2つの入力をミックス
  • duration=longest: 長い方の入力に合わせて出力時間を決定

adelay による遅延の追加

[1:a](input02.mp3 の音声ストリーム)に対しては、以下の処理で 1秒の遅延を加えています。

  • adelay=1000|1000: 遅延フィルタ(左チャンネル、右チャンネルを対象としたもの)
    • 左右の両チャンネルとも 1000ミリ秒(1秒)遅延
  • [bdel]: 遅延処理後のストリームにつけたラベル(後段の処理の指定に利用)

このように 2つの音声ファイルの入力を、スタート位置をずらしてミックスする、ということが実現できました。

参考情報

●複数の音声を混ぜる amix | ニコラボ
 https://nico-lab.net/amix_with_ffmpeg/

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?