自分の声を入れた動画を作ったとき,どうも音声レベルが小さくて聞き取りにくいときの調整方法です.自分用のメモなので,間違いなどあればご指摘ください.
2020/08/24
@nico_lab さんからのコメントを参考に修正しました.
環境
- MacOS: 10.15.6 (Catalina)
- ffmpeg: 4.2.2
loudnorm フィルタ
ffmpeg にある loudnorm フィルタを使うと,EBU_R_128 とかいう方法を使って良い感じで音量を調整してくれるらしい.
https://ffmpeg.org/ffmpeg-filters.html#loudnorm
https://en.wikipedia.org/wiki/EBU_R_128
loudnorm フィルタでは,シングルパスとダブルパスの二つの方法がサポートされていて,前者は一回の処理で出力ファイルまで得られ,後者は一度対象ファイルの状況をチェックしてから,二度目の処理で出力ファイルを得る.ストリーミングしながら変換するときは前者なんだろうけど,動画ファイルの音量を調整するときには後者の方が良いのだと思う(たぶん).
ダブルパスでの音量調整
$ ffmpeg -i input.mp4 -vn -af "loudnorm=I=-14:TP=0.0:print_format=summary" -f null -
のようにすると,解析結果が出力される.
Input Integrated: -24.1 LUFS
Input True Peak: -3.0 dBTP
Input LRA: 6.8 LU
Input Threshold: -34.7 LUFS
Output Integrated: -16.0 LUFS
Output True Peak: +0.0 dBTP
Output LRA: 5.1 LU
Output Threshold: -26.5 LUFS
Normalization Type: Dynamic
Target Offset: +2.0 LU
このうち Input の値を2回目の処理で入力する.measured_???とoffsetに上記で測った結果を入れる.(2020/08/24修正)
$ ffmpeg -i input.mp4 -af "loudnorm=I=-14:TP=0.0:measured_I=-24.1:measured_TP=-3.0:measured_LRA=6.8:measured_thresh=-34.7:offset=2.0:print_format=summary" -c:v libx264 -crf 30 -r 5 -s 1280x720 out.mp4
上では,画像サイズの変更も行っている.この処理を行うとめでたく音量調整が完了.
結果
上記のコマンドの実行結果は
Input Integrated: -24.1 LUFS
Input True Peak: -3.0 dBTP
Input LRA: 6.8 LU
Input Threshold: -34.7 LUFS
Output Integrated: -15.1 LUFS
Output True Peak: +0.0 dBTP
Output LRA: 4.7 LU
Output Threshold: -25.7 LUFS
Normalization Type: Dynamic
Target Offset: +1.1 LU
となっていて,1回目の実行よりラウドネス値や,トゥルーピーク値が目標に近づいているので,これでOKということでしょう.
また,以下のような便利なものがあるので,よく分からなければこっちを使う方が無難と思われる.私は気付いたのが最近でまだ試していない・・・.
- https://github.com/slhck/ffmpeg-normalize
- https://gist.github.com/kylophone/84ba07f6205895e65c9634a956bf6d54
(追記)
コメントいただいた @nico_lab 様がもっとキッチリ書かれているので,そちらの方が参考になると思います.
https://nico-lab.net/loudnorm_with_ffmpeg/