適切な音量が調べられる ffmpeg の ebur128 の使い方


音声データの LUFS を調べることができる ffmpeg の ebur128 の使い方。

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

技術的な話

基本コマンド

  • プレビュー
    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" output.mkv
  • 結果だけをログ表示
    ffmpeg -nostats -i input.mp4 -vn -filter_complex ebur128 -f null -
  • M:400ミリ秒毎のラウドネス値 の値だけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=39:10:32:6" output.mkv
  • S:3秒毎の移動平均ラウドネス値 の値だけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=39:10:104:6" output.mkv
  • I:全体の平均ラウドネス値 の値だけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=39:10:208:6" output.mkv
  • LRA:ラウドネスレンジ の値だけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=30:10:377:6" output.mkv
  • 目盛りだけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=15:452:16:24" output.mkv
  • 右のバーだけ
    ffmpeg -i input.mp4 -filter_complex "[0:a]ebur128=video=1[out1];[out1]crop=22:434:611:39" output.mkv
  • M 値だけを dshow ソースにオーバーレイ
    ffmpeg -rtbufsize 100MB -f dshow -video_size 640x360 -framerate 24 -i video="SCFF DirectShow Filter":audio="virtual-audio-capturer" -filter_complex "ebur128=video=1:meter=9[eb];[eb]crop=39:10:32:6[ebc];[0:0][ebc]overlay"

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

オプション

  • video[boolean]
    ラウドネスの値を映像化するかどうか
    既定値:0
  • size[image_size]
    ラウドネスの値を映像化した場合の解像度。最小値は 640×480
    既定値:640×480
  • meter[int]
    ラウドネスのメーターの値。
    既定値:9
    範囲:9 から 18 まで
  • framelog[int]
    1フレーム当たりにログを表示するか
    既定値:info
    • info
      表示する
    • verbose
      表示しない
  • metadata[boolean]
    メタデータに表示に切り替える。100ms 毎に1フレーム描写する
    既定値:0
  • peak[flags]
    ピークモードの指定
    既定値:0
    • 0, none
      ピークモードの設定をしない
    • 0, sample
      ピークサンプルモード
    • 1, true
      トゥルーピークモード
  • dualmono[boolean]
    モノラル入力をデュアルモノラルのように扱う
    既定値:0
  • panlaw[double]
    デュアルモノラルファイルのパンロウを設定する
    既定値:-3.0103
    範囲:-10 から 0 まで

ラウドネスの値を映像化した場合の内容

ffmpeg ebur128 の表示例

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

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 フィルタで表示する例
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]
メタデータをコンソールに表示する metadata, ametadata

ログ表示の内容

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

  Integrated loudness:
    I:         平均ラウドネス LUFS
    Threshold: 閾値 LUFS

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

運用方法

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

この値を目標に音量を変更するには compand フィルタが最適である。詳しい設定は Windows の ffmpeg で生放送する方法 : 音量の圧縮・伸張 を参照。

コメントを残す

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