この記事でわかること
- EBU R128ラウドネス正規化とは何か、なぜ重要か
- クイック正規化のための1パス
loudnorm - 精確で放送グレードの2パス
loudnorm - 主要パラメータ:統合ラウドネス(
I)、トゥルーピーク(TP)、ラウドネスレンジ(LRA) - パス1のJSON計測出力の読み方
テスト済みバージョン: FFmpeg 6.1(ubuntu-latest / CI検証済み)
対象 OS: Windows / macOS / Linux
EBU R128ラウドネス正規化とは
EBU R128は欧州放送連合(EBU)のオーディオラウドネス標準です。以下を定義しています:
| 指標 | 単位 | EBU R128ターゲット |
|---|---|---|
| 統合ラウドネス(I) | LUFS | −23 LUFS |
| トゥルーピーク(TP) | dBTP | 最大 −1 dBTP |
| ラウドネスレンジ(LRA) | LU | 推奨 18 LU以下 |
LUFS(Loudness Units Full Scale)は人間の聴覚に基づく知覚ラウドネスの尺度です。最大サンプル値のみを見るピーク正規化とは異なり、コンテンツが実際にどのくらい大きく_聴こえるか_を正規化します。
ストリーミングプラットフォーム(YouTube、Spotify、Apple Musicなど)は、EBU R128や米国放送標準ATSC A/85に基づく独自のラウドネスターゲットを使用しています。
1パス正規化(クイック)
最もシンプルな使い方は1パスでloudnormを適用することです:
ffmpeg -i input.mp3 -af loudnorm output.mp3
デフォルトでは統合ラウドネス −23 LUFS、トゥルーピーク −2 dBTP、ラウドネスレンジ 7 LU をターゲットとします。1パスモードは処理しながらソースのラウドネスを推定するため、多くのユースケースで十分な精度があります。
ターゲット値のカスタマイズ
ffmpeg -i input.mp3 -af "loudnorm=I=-16:TP=-1.5:LRA=11" output.mp3
| パラメータ | 説明 | デフォルト |
|---|---|---|
I | 統合ラウドネスターゲット(LUFS) | −23 |
TP | トゥルーピーク上限(dBTP) | −2 |
LRA | ラウドネスレンジターゲット(LU) | 7 |
I=-16はストリーミングプラットフォーム(SpotifyやYouTube)のターゲットに近い値です。放送(EBU R128)にはI=-23を使用してください。
2パス正規化(精度重視)
最も精確な正規化のためには2パス方式を使います:
パス1 — ソースのラウドネスを計測:
ffmpeg -i input.mp3 -af "loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json" -f null /dev/null
出力なし(-f null /dev/null)で実行し、計測値を含むJSONブロックをstderrに出力します:
{
"input_i" : "-27.06",
"input_tp" : "-4.28",
"input_lra" : "7.20",
"input_thresh" : "-37.06",
"output_i" : "-16.00",
"output_tp" : "-1.50",
"output_lra" : "7.20",
"output_thresh" : "-26.00",
"normalization_type" : "dynamic",
"target_offset" : "0.00"
}
パス2 — 計測値を使って適用:
パス1のinput_i、input_tp、input_lra、input_threshをloudnormフィルターのmeasured_I、measured_TP、measured_LRA、measured_threshとして使用します:
ffmpeg -i input.mp3 -af "loudnorm=I=-16:TP=-1.5:LRA=11:measured_I=-27.06:measured_TP=-4.28:measured_LRA=7.20:measured_thresh=-37.06:linear=true" output.mp3
linear=trueは、計測値に基づくシンプルなリニアゲイン適用を指示します(ダイナミックコンプレッションなし)。これは重要なオプションです。指定しないと、シンプルなゲイン調整で十分な場合でもダイナミックレンジコンプレッションが適用される場合があります。
動画ファイルへの適用(映像再エンコードなし)
動画ファイルのラウドネスを映像を再エンコードせずに正規化するには:
ffmpeg -i input.mp4 -c:v copy -af "loudnorm=I=-16:TP=-1.5:LRA=11" output.mp4
-c:v copyで映像をそのまま通過させ、音声のみ再エンコードします。
出力値の読み方
パス1のJSON出力の各フィールドの意味:
| フィールド | 意味 |
|---|---|
input_i | 計測された統合ラウドネス(LUFS) |
input_tp | 計測されたトゥルーピーク(dBTP) |
input_lra | 計測されたラウドネスレンジ(LU) |
input_thresh | ラウドネスゲーティング閾値 |
normalization_type | linear(リニアゲイン)またはdynamic(ダイナミック処理) |
normalization_typeがパス1でlinearの場合、音声はシンプルなゲインで調整できます。dynamicの場合、パス2でダイナミックレンジコンプレッションが適用されます。
よくある問題
出力が期待より大きく/小さく聴こえる
1パスモードではエンコードしながらラウドネスを推定します。ラウドネスが変動するファイルでは推定が不正確になることがあります。重要なコンテンツには常に2パスを使用してください。
パス1の出力に問題がある
パス1(-f null /dev/null)は出力ファイルを生成しません — 計測のみです。精度が重要な場合はパス1をスキップしないでください。
トゥルーピークのクリッピング
ソースのピークが0 dBFSに非常に近い場合、単純なゲインアップでサンプルが0を超えることがあります。TPパラメータで出力トゥルーピークを制限してこれを防ぎます。TP=-1以下に設定してください。
関連記事
テスト環境: ffmpeg 6.1.1 / Ubuntu 24.04(GitHub Actions)
一次ソース: ffmpeg.org/ffmpeg-filters.html#loudnorm / trac.ffmpeg.org/wiki/AudioVolume