LUFS、いわゆる平均ラウドネス値を調べるebur128 フィルタの使い方。

LUFS(Loudness Unit Referred to Full Scale)とは平均ラウドネス値の単位で、LKFS(Loudness K Weghted Full Scale)とも言われている。

任意のラウドネス値に音量を調整する loudnorm

ニコニコ動画にも2020年1月29日(水)より大きすぎる音量感を抑制する方向でのみラウドネスノーマライゼーション(自動音量調整機能)を追加することが発表された。
動画音量の自動調整機能を導入します【PC版ニコニコ動画】|ニコニコインフォ
ニコニコ動画のラウドネスノーマライゼーション(自動音量調整機能)について:ニコニコ窓口:niconico窓口チャンネル(ニコニコ窓口担当) – ニコニコチャンネル:社会・言論

音量測定用AviUtlプラグイン「loudness.auf」 – ニコニコ動画

技術的な話

基本コマンド

  • ラウドネスの値を映像化して再生
    ffplay -f lavfi -i "amovie=input.mp4,ebur128=video=1:size=640x480:meter=9[out0][out1]"
  • ラウドネスの値を映像化して動画出力
    ffmpeg -i input.mp4 -filter_complex "ebur128=video=1:size=640x480:meter=9" -pix_fmt yuv420p output.mkv
  • フレーム毎のログ表示
    ffmpeg -i input.mp4 -vn -filter_complex ebur128=framelog=info -f null -
  • 結果だけをログ表示
    ffmpeg -i input.mp4 -vn -filter_complex ebur128=framelog=verbose -f null -
  • M:400ミリ秒毎のラウドネス値 の値だけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=64:12:159:4" -pix_fmt yuv420p output.mkv
  • S:3秒毎の移動平均ラウドネス値 の値だけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=64:12:231:4" -pix_fmt yuv420p output.mkv
  • I:全体の平均ラウドネス値 の値だけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=92:12:337:4" -pix_fmt yuv420p output.mkv
  • LRA:ラウドネスレンジ の値だけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=104:12:495:4" -pix_fmt yuv420p output.mkv
  • 目盛りだけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=15:452:16:24" -pix_fmt yuv420p output.mkv
  • 右のバーだけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=22:434:611:39" -pix_fmt yuv420p output.mkv
  • 2つのグラフを比較して再生
    ffplay -f lavfi -i "amovie=input.mp4,asplit[1],ebur128=video=1:target=-10[0v][0a];[1]ebur128=video=1:size=640x480:target=0[1v][1a];[0v][1v]hstack[out0];[0a][1a]amix[out1]"

公式ドキュメント:FFmpeg Filters Documentation : ebur128

オプション

  • video[boolean]
    ラウドネスの値を映像化するかどうか。有効にすると映像と音声の2出力になる
    既定値:0(音声だけ)
  • size[image_size]
    ラウドネスの値を映像化したときの解像度。最小値は 640×480
    既定値:640×480
  • meter[int]
    RBU スケールメーター(左のメモリ)の値の最大値
    既定値:9
    範囲:9 から 18 まで
  • framelog[int]
    1フレーム当たりにログを表示するか
    • 32, info:表示する。既定値
    • 40, verbose:表示しない
  • metadata[boolean]
    メタデータに表示に切り替える。100ms 毎に1フレーム描写する
    既定値:0
  • peak[flags]
    ピークモードの指定
    • none:ピークモードの設定をしない。既定値
    • sample:ピークサンプルモード
    • true:トゥルーピークモード
  • dualmono[boolean]
    モノラル入力をデュアルモノラルのように扱う
    既定値:0
  • panlaw[double]
    デュアルモノラルのファイルのパンローを設定する
    既定値:-3.0103
    範囲:-10 から 0 まで
  • target[int]
    LUFS のどの値の基準を相対的なレベルとして描写するかの指定。波形が見切れる場合に調整する
    既定値:-23
    範囲:-23 から 0 まで
  • gauge[int]
    ゲージ値の指定
    • 0, momentary, m:瞬時。既定値
    • 1, shortterm, s:短期
  • scale[int]
    ラウドネスのスケール値の指定。映像出力のみに影響を与える
    • 0, absolute, LUFS:絶対値。既定値
    • 1, relative, LU:相対値
ebur128フィルタを映像化した表示例

TARGET:targetの指定
M:400ミリ秒毎のラウドネス値
S:3秒毎の移動平均ラウドネス値
I:全体の平均ラウドネス値
LRA:ラウドネスレンジ

ログ表示の内容

Threshold がどのような値なのかよくわからない。

  Integrated loudness:
    I:         平均ラウドネス LUFS(音量感)
    Threshold: しきい値 LUFS

  Loudness range:
    LRA:        ラウドネスレンジ LU
    Threshold: しきい値 LUFS
    LRA low:   最小ラウドネス LUFS
    LRA high:  最大ラウドネス LUFS

adrawgraph の描写例

M、S、I、LRAが最大最小の範囲を指定して描写できる。
ffplay -f lavfi -i "amovie=input,ebur128=metadata=1,adrawgraph=lavfi.r128.M:min=-32:max=0"
ffplay -f lavfi -i "amovie=input,ebur128=metadata=1,adrawgraph=lavfi.r128.M:min=-32:max=0:mode=bar"
ffplay -f lavfi -i "amovie=input,ebur128=metadata=1,adrawgraph=lavfi.r128.S:min=-32:max=0"
ffplay -f lavfi -i "amovie=input,ebur128=metadata=1,adrawgraph=lavfi.r128.I:min=-32:max=0"
ffplay -f lavfi -i "amovie=input,ebur128=metadata=1,adrawgraph=lavfi.r128.LRA:min=0:max=2"

M、S、Iを同時に表示する。
ffplay -f lavfi -i "amovie=input,ebur128=metadata=1,adrawgraph=m1=lavfi.r128.M:min=-32:max=0:m2=lavfi.r128.S:m3=lavfi.r128.I"

adrawgraph も同じオプション。
メタデータを映像化する drawgraph, adrawgraph

ametadata の利用例

ametadata フィルタで表示する例。
ffplay -f lavfi -i amovie=input,ebur128=metadata=1,ametadata=print:key=lavfi.r128.M,ametadata=print:key=lavfi.r128.S,ametadata=print:key=lavfi.r128.I[out0];amovie=input[out1]

fileでテキストに出力する。
ffmpeg -i input -af ebur128=metadata=1,ametadata=mode=print:file=foo.txt -vn -f null -

メタデータをコンソールに表示する metadata, ametadata

運用方法

テレビ放送では -24LUFS ±1dB、PS3では -23LUFS ±2dB、Vita では -18LUFS 程度とされている。ニコ生では配信内容で目安となる値を変えて、ゲーム配信なら PS3 に倣って -23 程度に、雑談配信なら -24 程度を目標とする。

ニコニコ動画は-15LKFS/LUFSを基準とすることにした。

この値を目標に音量を変更するには loudnorm フィルタが最適である。
任意のラウドネス値に音量を調整する loudnorm

具体的な区間で特定の音量に上げ下げするには volume フィルタとタイムライン編集を併用する。
Windows の ffmpeg で生放送する方法 – volume 音量調整
特定の区間だけフィルタを当てるタイムライン編集について

10秒から180秒まで volume フィルタで2dB上げる。
ffmpeg -i input -af volume=2dB:enable='between(t,10,3*60)' -c:v copy output

複数の区間にフィルタを当てるには複数回 volume フィルタを当てる。
ffmpeg -i input -af volume=2dB:enable='between(t,10,3*60)',volume=2dB:enable='between(t,200,4*60)' -c:v copy output

その他のオーディオフィルタ

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)