複数の音声を混ぜ(マルチトラックではない)て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