複数の音声を混ぜ(マルチトラックではない)て1つの音声で出力するamixフィルタの使い方。

入力数の合計チャンネルに応じて出力チャンネル数にするのはamergeフィルタ。
音声ストリームのチャンネルレイアウトを指定する amerge

基本コマンド

既定値の設定。長い時間の方に合わせて終わり2秒をフェードして2入力とも同じ割合で合わせる。
ffmpeg -i input1 -i input2 -filter_complex "amix=inputs=2:duration=longest:dropout_transition=2:weights=1 1" output
ffmpeg -i input1 -i input2 -filter_complex "amix=2:longest:2:1 1" output

異なる尺の音声を混ぜて音量が大きくなるのを回避するにはdropout_transitionで時間調整する。normalize=0にする。dynaudnormフィルタで音量を調整する。
ffmpeg -i input1 -i input2 -filter_complex "amix=normalize=0" output
ffmpeg -i input1 -i input2 -filter_complex "amix,dynaudnorm" output

ffmpeg で聞き取りやすい音量に変える dynaudnorm
audio – FFMPEG amix filter volume issue with inputs of different duration – Stack Overflow

5秒から12秒の間だけ2番目の音声に切り替える。
ffmpeg -i samplevideo.mp4 -i sampleaudio.aac -filter_complex "[0:a]volume=0:enable=between(t\,5\,12)[a0];[1:a]atrim=0:7,adelay=5s:all=1[a1];[a0][a1]amix=normalize=0:duration=first[aout]" -map 0:v -map [aout] -c:v copy output.mp4

音声の先頭に無音を挿入する adelay
How make audio to start from the specified point in the video and last specified amount of time – Stack Overflow

公式ドキュメント:FFmpeg Filters Documentation : amix

オプション

  • inputs[int]
    取り込む音声の数
    既定値:2
  • duration[int]
    音声時間が異なる場合にどちらの出力を優先するか
    • 0, longest:長い方。既定値
    • 1, shortest:短い方
    • 2, first:最初に入力した方
  • dropout_transition[float]
    出力が終わると他が続いているときにその終わり方にフェードアウトする秒
    既定値:2
  • weights[string]
    音声の合わせる比率。既定値は1対1で数値を上げても音量はオリジナルを超えない。入力数に応じて半角スペースで指定する
    既定値:”1 1″
  • normalize[boolean]
    単純に音声をミックするのではなく入力に応じて正規化する。無効にすると音量の差があるとき過度にクリッピングが起こるのでミックスする前に正規化する必要がある
    既定値:1

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)