目標となるLUFSとラウドネスレンジ、トゥルーピークを調整するloudnorm
フィルタの使い方。1回の処理で行うのと、1回目の解析結果を使って2回目の処理を行う2種類の方法がある。loudnorm
フィルタを当てるとサンプリング周波数が192kHzにアップサンプルされて、PCM、Flac、Oggにエンコードするとそのままの192kHz、AAC-LCにエンコードすると96kHz、MP3、Opusにエンコードすると48kHzに収まる。別途目標のサンプリング周波数にするには-arやaresample
フィルタで指定する。
- 音声統計データを表示する astats
- 音声のチャンネルレイアウトを変えるchannelmap
- 適切な音量が調べられる ffmpeg の ebur128 の使い方
- サンプリング波形を一枚画像で出力する showwavespic
- 不可逆圧縮された音声のカットされた周波数が調べられる showspectrumpic
基本コマンド
標準出力ではなくファイルで出力するときはloudnorm
フィルタの後に、channelmap
フィルタでチャンネル数を明示してaresample
フィルタで目標のサンプリング周波数を指定する。
1回で処理を終える例。ステレオの48kHzをlibsoxrでリサンプルしている。libsoxrを有効にしていないなら周波数だけ指定する。
ffmpeg -i input -af "loudnorm=I=-14:TP=-3:LRA=4:print_format=summary,channelmap=channel_layout=stereo,aresample=48000:resampler=soxr" -c:v copy -c:a aac output.mkv
1回目の解析結果を使って2回目の処理を行う方法と解析結果の例。まず最初に入力値と目標値の誤差を調べる。
ffmpeg -i input -af "loudnorm=I=-14:TP=-3:LRA=4:print_format=json" -vn -f null -
解析結果の例。
{ "input_i" : "-8.18", "input_tp" : "1.10", "input_lra" : "4.40", "input_thresh" : "-18.22", "output_i" : "-13.44", "output_tp" : "-3.00", "output_lra" : "3.80", "output_thresh" : "-23.46", "normalization_type" : "dynamic", "target_offset" : "-0.56" }
それぞれのinput_i、input_tp、input_lra、input_threshとtarget_offsetの値をmeasured_I、measured_TP、measured_LRA、measured_thresh、offsetで指定する。
ffmpeg -i input -af "loudnorm=I=-14:TP=-3:LRA=4:measured_I=-8.18:measured_TP=1.1:measured_LRA=4.4:measured_thresh=-18.22:offset=-0.56:print_format=json,channelmap=channel_layout=stereo,aresample=48000:resampler=soxr" -c:v copy -c:a aac output.mkv
解析結果の例。output_i、output_tp、output_lraの値がI、TP、LRAで指定した値に近づいている。
{ "input_i" : "-8.18", "input_tp" : "1.10", "input_lra" : "4.40", "input_thresh" : "-18.22", "output_i" : "-13.99", "output_tp" : "-3.00", "output_lra" : "3.80", "output_thresh" : "-24.01", "normalization_type" : "dynamic", "target_offset" : "-0.01" }
公式ドキュメント:FFmpeg Filters Documentation : loudnorm
参考記事
- オーディオコンテンツのラウドネス値の正規化 | Alexa Skills Kit
- windows – ffmpeg to normalize loudness of a video – Stack Overflow
- loudnorm : k.ylo.ph
- FFmpeg loudnorm filter – dual pass loudness normalization example – http://k.ylo.ph/2016/04/04/loudnorm.html · GitHub
オプション
要点で表示される順番とオプション指定の順番が異なる。
- I, i[double]
目標のラウドネス値
既定値:-24
範囲:-70から-5まで - LRA, lra[double]
目標のラウドネスレンジ
既定値:7
範囲:1から50まで - TP, tp[double]
トゥルーピークの最大値の指定
既定値:-2
範囲:-9から0まで - measured_I, measured_i[double]
測定した入力ファイルのラウドネス値
既定値:0
範囲:-99から0まで - measured_LRA, measured_lra[double]
測定した入力ファイルのラウドネスレンジ
既定値:0
範囲:0から99まで - measured_TP, measured_tp[double]
測定した入力ファイルのトゥルーピーク
既定値:99
範囲:-99から99まで - measured_thresh[double]
測定した入力ファイルの閾値
既定値:-70
範囲:-99から0まで - offset[double]
ゲインオフセット
既定値:0
範囲:-99から99まで - linear[boolean]
可能なら線形ノーマライズする
既定値:1 - dual_mono[boolean]
入力ファイルをデュアルモノラルとして扱う
既定値:0 - print_format[int]
解析結果を表示するフォーマット - 0, none:非表示。既定値
- 1, json
- 2, summary:小数点第2位は四捨五入