[FFmpeg] 音声を聞きやすく調整する

動画の音量が気になるときに使う調整用のコマンド。
極端に小さい音や、大きすぎる音を平均化して、聞きやすい音にします。

volume フィルターで音量を調整する

入力音声のボリュームを単純に上げ下げしたい場合に使うコマンドです。

ffmpeg -i INPUT.mp4 -af "volume=1.5" -c:v copy OUTPUT.mp4 

デフォルトは 1.0 (100%) なので、ボリュームを上げるなら 1.5 (150%) などにします。
下げる場合は 0.8 (80%) と指定します。

デシベル (dB) で指定することもできます。

volume はこんなオーディオデータにおすすめ
音量が極端に小さく、ボリュームを上げるだけでバランスよく聞き取ることができるもの

dynaudnorm フィルターを適用する (ダイナミックノーマライザー)

音声の強弱が激しいデータを自動的に整えてくれるコマンド。

ffmpeg -i INPUT.mp4 -af dynaudnorm -c:v copy OUTPUT.mp4 

このフィルターを使うと、極端に大きな音をほどよく小さくし、小さい音を自然に上げてくれるので全体的に聞き取りやすくなります。

元の音声の雰囲気を保ったまま自然に音量を揃えてくれるので、聞き取りにくい音が混ざっているものがあればとりあえず dynaudnorm フィルターを適用してみると良いです。

dynaudnorm はこんなオーディオデータにおすすめ
トーク中心のもの。マイクが近い、遠いなどの関係で一部の音が聞き取りにくいもの。

FFmpeg Filters Documentation :dynaudnorm

loudnorm フィルターを適用する (ラウドネスノーマライザー)

音の強弱が均一化され、聞きとりやすくなります。

ffmpeg -i INPUT.mp4 -af "loudnorm=I=-14" -c:v copy OUTPUT.mp4 

デフォルトのままだと音量が小さく感じたので、オプションの値を変更しています。
テレビなどで再生する場合は、デフォルト値 (I=-24) のままのほうが良いようです。

loudnorm はこんなオーディオデータにおすすめ
トーク中心のもの。マイクが近い、遠いなどの関係で一部の音が聞き取りにくいもの。
音量の強弱の激しいデータ。様々な音データ (声、歌、音楽) が混在しているもの。

2Pass を使ってより正確に loudnorm を適用する (測定→適用)

オーディオの情報を解析して、更に詳細な設定値を求めることができます。

ffmpeg -i INPUT.mp4 -vn -af loudnorm=I=-14:print_format=summary -f null -

上記コマンドを実行すると、ファイル解析が始まります。

[Parsed_loudnorm_0 @ 000001feb7963e00]
Input Integrated:    -14.1 LUFS    -> measured_I
Input True Peak:      +0.8 dBTP    -> measured_TP
Input LRA:            23.0 LU      -> measured_LRA
Input Threshold:     -25.8 LUFS    -> measured_thresh

Output Integrated:   -14.4 LUFS
Output True Peak:     -2.8 dBTP
Output LRA:           11.1 LU
Output Threshold:    -25.1 LUFS

Normalization Type:   Dynamic
Target Offset:        +0.4 LU      -> offset

対応する数値をコマンドに入力して、実行します。

ffmpeg -i INPUT.mp4 -af "loudnorm=I=-14:measured_I=-14.1:measured_TP=0.8:measured_LRA=23.0:measured_thresh=-25.8:offset=0.4" -c:v copy OUTPUT.mp4

個人的には2Passの違いがあまり感じられないので、loudnorm はそのまま使用しています。

FFmpeg Filters Documentation :loudnorm

acompressor フィルターを適用する (コンプレッサー)

大きな音を抑える効果があります。

ffmpeg -i INPUT.mp4 -af acompressor=makeup=2 -c:v copy OUTPUT.mp4

ffmpeg のデフォルト値のままだと音量が小さくなってしまうので、音量を上げるパラメータ makeup の値を変更して音量を引き上げたコマンドを使っています。

acompressor はこんなオーディオデータにおすすめ
音量の強弱の激しいデータ。様々な音データ (声、歌、音楽) が混在しているもの。

FFmpeg Filters Documentation: acompressor

ステレオ音源をモノラル化+ノーマライズして聞きやすくする

ステレオ音源をモノラル化 -ac 1 してノーマライズするコマンドです。

ffmpeg -i INPUT.mp4 -ac 1 -af loudnorm -c:v copy OUTPUT.mp4

モノラル化すると、左右の音が合成されることでバランスがよくなり、聞き取りやすくなります。
音の立体感を失いたくない場合は、モノラル化しないほうが良いです。

-ac 1 (モノラル化) にはこんなオーディオデータにおすすめ
ステレオ音源かつ、左右の音量バランスが極端に悪いもの。
ラジオなどのトークが主体となるオーディオデータ。

動画の音声がステレオかモノラルなのかを調べる

Windows で確認する

ファイルを右クリックして、プロパティから「詳細」タブを見るとオーディオのチャンネルにステレオかモノラルかが明記されています。

ffmpeg で確認する

以下のコマンドを使って動画ファイル(または音声ファイル)を確認します。

ffprobe INPUT.mp4 

音声情報のところに mono とあればモノラル、stereo ならステレオです。

Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 93 kb/s (default)
                                                                      ^^^^
Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
                                                                      ^^^^^^

どれを使うのがいいの??

聞きやすくするのが目的なので、フィルターを使ったあとに自分の耳で確認して「聞きやすい」と感じられるフィルターを探していくしかないです。
個人的には dynaudnormloudnorm フィルターを使えば概ね満足できる結果になるんじゃないかな、と思います。