LUFS、いわゆる平均ラウドネス値を調べるebur128
フィルタの使い方。
LUFS(Loudness Unit Referred to Full Scale)とは平均ラウドネス値の単位で、LKFS(Loudness K Weghted Full Scale)とも言われている。
ニコニコ動画にも2020年1月29日(水)より大きすぎる音量感を抑制する方向でのみラウドネスノーマライゼーション(自動音量調整機能)を追加することが発表された。
動画音量の自動調整機能を導入します【PC版ニコニコ動画】|ニコニコインフォ
ニコニコ動画のラウドネスノーマライゼーション(自動音量調整機能)について:ニコニコ窓口:niconico窓口チャンネル(ニコニコ窓口担当) – ニコニコチャンネル:社会・言論
音量測定用AviUtlプラグイン「loudness.auf」 – ニコニコ動画
技術的な話
- t032 | 一般社団法人 日本民間放送連盟
- PDF:民放連技術規準T032「テレビ放送における音声レベル運用規準」
- 4Gamer.net ― 適切な音量について考える。ゲームサウンドの「ラウドネス基準」はどうあるべきか
- テレビ業界から飛び火した「ラウドネス問題」って何だ?SIG-Audio#01「ラウドネス勉強会」レポート | インサイド
- 君は音圧戦争を生き抜けるか? 音楽ストリーミング時代のラウドネス・ウォー対策 (1/3) – ITmedia NEWS
- 人が感じる音の大きさを正規化するとはどういうことか – 音楽/音源情報 – Audiophile JP forum
- トゥルーピークの限界と非情な現実 – 音楽/音源情報 – Audiophile JP forum
- PDF:テレビCM素材搬入基準「音声レベル運用規準」の適用について:web.archive.org より
- PDF:ラウドネスレンジ(LRA)の設定と評価法 – web.archive.org より
- PDF:第 7 回 ラウドネス及び音に関する用語説明と計算式 v1.1 : archive.org
- LUFS/LKFS…ラウドネスメーターについて復習して理解を深めよう | SOUNDEVOTEE.NET
- AES Release Recommendations for Loudness of Audio Streaming and Network File Playback — Pro Tools Expert
- PDF:LOUDNESS NORMALISATION AND PERMITTED MAXIMUM LEVEL OF AUDIO SIGNALS
- EBU Technology & Innovation – Loudness test set
- BS.1770 : Algorithms to measure audio programme loudness and true-peak audio level
基本コマンド
- ラウドネスの値を映像化して再生
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]
ログレベルの指定 - -8, quiet:1フレーム当たりのログを表示しない
- 32, info:1フレーム当たりのログを表示する。既定値
- 40, verbose:1フレーム当たりのログを表示しない
- 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:相対値
TARGET:targetの指定
M:400ミリ秒毎のラウドネス値
S:3秒毎の移動平均ラウドネス値
I:全体の平均ラウドネス値
LRA:ラウドネスレンジ
ログ表示の内容
Integrated loudness: I: 平均ラウドネス LUFS(音量感) Threshold: しきい値 LUFS Loudness range: LRA: ラウドネスレンジ LU Threshold: しきい値 LUFS LRA low: 最小ラウドネス LUFS LRA high: 最大ラウドネス LUFS
メタデータ出力内容。
ebur128=metadata=1
でメタデータを出力する。
lavfi.r128.M lavfi.r128.S lavfi.r128.I lavfi.r128.LRA lavfi.r128.LRA.low lavfi.r128.LRA.high
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 -
任意のタグだけ選ぶならkeyで指定する。
ffmpeg -i input -af ebur128=metadata=1,ametadata=mode=print:file=foo.txt:key=lavfi.r128.M -vn -f null -
複数トラックを解析してテキストに出力する。
ffmpeg -i input -filter_complex [0:a:0]ebur128=metadata=1,ametadata=mode=print:file=foo.txt;[0:a:1]ebur128=metadata=1,ametadata=mode=print:file=bar.txt -vn -f null -
ffmpeg | 識別子の指定方法:任意のトラックを指定する
メタデータをコンソールに表示する metadata, ametadata
他のフィルタを併用して映像で並べる
showvolume、ebur128、avectorscope
フィルタのログを縦に並べる。
ffplay -f lavfi "amovie=input.mp4,asplit=3[sv][eb][av];[sv]showvolume=b=4:f=0:ds=log:c=VOLUME:w=640:h=68[sv-v];[eb]ebur128=video=1:size=640x480:meter=18[eb-v][out1];[av]avectorscope=s=640x460:zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7[av-v];[sv-v][eb-v][av-v]vstack=3"
1920×1080の映像を右に並べる。CPUが強くないと音が途切れ途切れになる。
ffplay -f lavfi "movie=input.mp4,split=4[v][wf][wfc][vs];[wf]waveform=m=1:d=0:r=0:c=7[wf-vus];[wf-vus][v]scale2ref=iw:1220-ih[wf-va][sig];[wf-va]setsar=1[wf-v];[wfc]waveform=m=0:d=0:r=0:c=7,scale=610x610,setsar=1[wfc-v];[vs]vectorscope=m=color3:g=color,scale=610x610,setsar=1[vs-v];[sig][wf-v]vstack[2c];[wfc-v][vs-v]vstack[3c];[2c][3c]hstack[out0];amovie=input.mp4[out1]"
- リアルタイムでVUメーターを表示する showvolume
- 音声をベクトルスコープで表示する avectorscope
- ffplay / ffmpeg with audio and video filters – Stack Overflow
運用方法
テレビ放送では-24LUFS ±1dB、PS3では-23LUFS ±2dB、Vitaでは-18LUFS程度とされている。ニコ生では配信内容で目安となる値を変えて、ゲーム配信ならPS3に倣って-23程度に、雑談配信なら-24程度を目標とする。
ニコニコ動画は-15LKFS/LUFSを基準とすることにした。
ちなメディアごとの基準値は
radiko(CM入稿) -13LUFS(ホントかよ
youtube -14
apotify CM入稿 -14
ニコニコ -15
apple podcast ステレオ-16 モノラル-19
abema CM入稿 -18
テレビ -24— NITTA, katsuyoshi(新田 勝貴) (@read_me) November 27, 2022
この値を目標に音量を変更するには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
その他のオーディオフィルタ。
複数の音声トラックを持つファイルの場合、それぞれのトラックに対してラウドネス解析を行い、ログ表示をさせたい場合はどのようにすればいいのでしょうか?
1番目と2番目の音声トラックを解析する。適宜トラック数が増えれば[0:a:0]の3番目の数値を増やしてください。他にも質問があればお気軽にしてください
ffmpeg -i input -filter_complex [0:a:0]ebur128=metadata=1,ametadata=mode=print:file=foo.txt;[0:a:1]ebur128=metadata=1,ametadata=mode=print:file=bar.txt -vn -f null –