YouTubeのラウドネスノーマライゼーションアルゴリズム

YouTubeに最高音質の動画を上げるためには、YouTubeのラウドネスノーマライゼーション仕様を知る必要があります。

しかし、YouTubeのラウドネスノーマライゼーション仕様は公開されていません。すでに調査されている方もいますが、具体的な計算式まではわかっていません。

YouTubeのラウドネスノーマライゼーションの計算式を推定してみました。

YouTubeのラウドネスノーマライゼーション仕様

以下が調査結果のサマリーです。

ラウドネスノーマライゼーションは、ピークがクリッピングしない範囲で、できるだけ音源のラウドネスをラウドネス目標値に合わせる形で、行われる。

音源のラウドネスは、独自の仕様で計算されるが、EBU TECH 3341のShort-term loudnessのWeighting Curveを以下のものに差し替えて、Short-term loudnessの最大値を取ることで、1dB程度の精度で近似できる。

Estimated Weighting Curve Used for YouTube Loudness Normalization

調査方針

YouTubeのラウドネスノーマライゼーションの大枠の仕組みと、ラウドネス計算の詳細に分けて調査します。

YouTubeのラウドネスノーマライゼーションの大枠

こちらに参考にすると、おそらく以下のようになっていると思います。

YouTubeのラウドネスノーマライゼーションは、ピークがクリッピングしない範囲で、できるだけ音源のラウドネスをラウドネス目標値に合わせる形で行われる。式で書くと以下になります。

Compensation (dB) = Min(-Peak, Target – Loudness)

Peakは音源のピーク、Loudnessは音源のラウドネス、Targetは定数でラウドネス目標値、Compensationは補正ゲインを表します。全体の音量がCompensationの分だけ均一に変化します。

YouTube動画を右クリックし、詳細統計情報から見られるContent Loudnessは、Loudness – Targetに相当します。

YouTubeのラウドネス計算式

YouTubeのラウドネス計算式は、独自のものが使われているみたいです。なので、推測する必要があります。

ITU-R BS.1770-3を参考にし、以下のようなモデルを考えます。

イコライザー -> 窓で切り出し -> LUFSに変換 -> Gating -> Aggregation

イコライザー

イコライザーで周波数ごとに重み付けをします。

事前の実験で、ITU-R BS.1770-3で採用されているK-weightingや、その他のポピュラーなweightingが当てはまらなかったので、直接周波数特性を推定します。

窓で切り出し

波形をRect窓で切り出します。

窓長とオーバーラップ率がパラメータです。

参考に、ITU-R BS.1770-3とEBU TECH 3341のmomentaryとintegratedのパラメータは、窓長が400ms、オーバーラップ長が100ms(オーバーラップ率は75%)です。EBU TECH 3341のshort-term loudnessパラメータは、窓長が3秒、オーバーラップ長が2.9秒以上(オーバーラップ率は96.7%以上)です。

LUFSに変換

切り出した波形のRMSを計算し、Log10(RMS)でLUFSに変換します。

ステレオの1000Hz正弦波で0になるように補正もかけます。ITU-R BS.1770-3の場合の補正量は-0.691dBです。

Gating

ラウドネスに対する無音時間の影響をへらすために、切り出して得られた複数のRMS値の中で、音の小さいものを捨てます。

ITU-R BS.1770-3とEBU TECH 3342を参考にし、Absolute threshold gatingと、Relative threshold gatingを行います。

パラメータはそれぞれのThreshold値です。Gatingをしないパターンも試します。

参考に、ITU-R BS.1770-3とEBU TECH 3341のパラメータは、Absolute Thresholdが-70LKFS、Relative Thresholdが-10dBです。EBU TECH 3342のLoudness Range計算用のパラメータは、Absolute Thresholdが-70LKFS、Relative Thresholdが-20dBです。

Aggregation

Gatingで残った複数のRMS値の平均、または、最大値を取ります。

ITU-R BS.1770-3では平均を取りますが、こちらによると、Short-termの最大値を使っている可能性があるみたいです。

パラメータ推定に使うテスト動画

ラウドネス計算モデルのパラメータを推定するためのテスト動画を用意します。

こちらによると、ラウドネスノーマライゼーションは、ある程度の再生数が無いと適用されなかったり、投稿してからある程度時間が経たないと適用されなかったりする可能性があるらしいです。自前でテスト動画を用意せずに、十分な再生数があり、投稿してから十分な時間が経っている既存の動画をいくつか選び、テスト動画とします。

テスト動画の一覧はAppendixに記載しました。

イコライザーパラメータ推定

音量が一定の正弦波テスト動画を使うと、ラウドネスに対するイコライザー以外の影響を排除できます。これを使って、まずはイコライザーの周波数特性を推定します。

様々な周波数の正弦波音源に対して、YouTube上のContent Loudnessを計測し、音源のRMSとの差分を取ることで、周波数特性を推定します。推定結果は以下です。詳細なデータはAppendixをご覧ください。

Estimated Weighting Curve Used for YouTube Loudness Normalization

16kHz以上は、同じ周波数でも動画によって結果が異なるなど、結果が不安定だったので、以降の議論では、15kHz以下のデータのみ使います。44Hz以下と15kHz以上は、線形補間で外挿します。

イコライザー以外のパラメータ推定

次に、イコライザーの周波数特性を固定し、イコライザー以外のパラメータを推定します。

さまざまなパラメータでさまざまな動画のラウドネスを計算します。YouTubeが計算するラウドネス(Content Loudess)と比較し、誤差がもっとも少ないパラメータを探します。テスト動画一覧はAppendixに記載しました。

パラメータ一覧

パラメータ
窓長400ms, 3sec
オーバーラップ率75%, 96.7%
Absolute thresholdなし、-70LKFS
Relative thresholdなし、-10dB, -20dB
Aggregationmean, max

結果一覧

ParametersEstimated Target (LUFS)Error Stddev (dB)Error Max (dB)
abs threshold none, rel threshold none, window 0.4sec, overlap 75%, mean-16.154494085.5125536210.73290254
abs threshold none, rel threshold none, window 3sec, overlap 96.7%, mean-14.976814844.90827864611.91484089
abs threshold none, rel threshold -10dB, window 0.4sec, overlap 75%, mean-13.949879233.9543709897.389401665
abs threshold none, rel threshold -10dB, window 3sec, overlap 96.7%, mean-13.686847213.6840072747.647167492
abs threshold none, rel threshold -20dB, window 0.4sec, overlap 75%, mean-14.498314374.5312554069.145055115
abs threshold none, rel threshold -20dB, window 3sec, overlap 96.7%, mean-14.016606914.0487230579.667181199
abs threshold -70LUFS, rel threshold none, window 0.4sec, overlap 75%, mean-16.154494085.5125536210.73290254
abs threshold -70LUFS, rel threshold none, window 3sec, overlap 96.7%, mean-14.976814844.90827864611.91484089
abs threshold -70LUFS, rel threshold -10dB, window 0.4sec, overlap 75%, mean-13.892175143.9115433187.447105751
abs threshold -70LUFS, rel threshold -10dB, window 3sec, overlap 96.7%, mean-13.665658633.6660259727.668356069
abs threshold -70LUFS, rel threshold -20dB, window 0.4sec, overlap 75%, mean-14.471706544.523919589.171662946
abs threshold -70LUFS, rel threshold -20dB, window 3sec, overlap 96.7%, mean-14.005124264.0383895339.678663846
abs threshold none, rel threshold none, window 0.4sec, overlap 75%, max-8.9937215021.1069610212.968119771
abs threshold none, rel threshold none, window 3sec, overlap 96.7%, max-10.312464140.901435591.746039964
ITU-R BS.1770-3-10.3931764511.0314121233.14216451
RMS-13.0300789610.175618429.41685531

誤差がもっとも少ないパラメータの組み合わせは、窓長3秒、オーバーラップ率96.7%、Max Aggregationで、誤差の標準偏差は0.9dB、最大誤差は1.7dBでした。EBU TECH 3341のShort-term loudnessの最大値ですね。ラウドネス目標値は-10.3LUFSです。

以上で、YouTubeのラウドネス計算方法を推定できました。

Appendix

イコライザーパラメータ測定結果 (tsv)

イコライザー以外のパラメータ推定用データ (tsv)

参考文献

ITU-R BS.1770-3

EBU TECH 3341

EBU TECH 3342

Youtubeのラウドネスノーマライゼーションを検証してみた。

変更履歴

2018/12/09 計算ミスを修正しました (最新版)

2018/12/07 初版

まとめ

YouTubeのラウドネスノーマライゼーションの計算式を調べました。1dB程度の精度で近似できる式を見つけました。