YUV、RGB(Aは未対応)それぞれのチャンネル(正確にはプレーン)にどれくらいのノイズが含まれているかを調べるbitplanenoiseフィルタの使い方。数値が高いほどノイズが多い。ログの表示にmetadata、drawtextフィルタを使っている。アニメでは0.1を超えると多い印象。似たフィルタにentropyフィルタがある。

映像のエントロピーを調べるentropy

ビットプレーン – Wikipedia

ビットプレーンの49%から51%以上のピクセルがノイズと判断されたら、そのビットプレーンはノイズが多いと判断できる[3]。

デノイズフィルタはたくさんある。
「デノイズ」で検索
Windows の ffmpeg で生放送する方法 – グレイン除去

基本コマンド

最初のチャンネルのノイズを3つのビットプレーンに分解してnoise.txtに出力する。
ffmpeg -i input -vf bitplanenoise=bitplane=1,metadata=mode=print:file=noise.txt -an -f null -

出力例。bitplanenoise.ビットプレーン番号.該当チャンネル番号の順になる。

frame:0    pts:0       pts_time:0
lavfi.bitplanenoise.0.1=0.827908
lavfi.bitplanenoise.1.1=0.791910
lavfi.bitplanenoise.2.1=0.736319

bitplane=7で調べるほうがチャンネルに応じた表示になるからログが読みやすい。
ffmpeg -i input -vf bitplanenoise=bitplane=7,metadata=mode=print:file=noise.txt -an -f null -

テキストファイルではなくコンソールに出力する。
ffmpeg -i input -vf bitplanenoise=bitplane=7,metadata=mode=print:file=- -an -f null -

ノイズをわかりやすくして再生する。
ffplay -i input -vf bitplanenoise=bitplane=7:filter=1

各チャンネルのノイズをvstackフィルタを使って縦に3つ並べる。順番は上から下にYUV。
ffplay -i input -vf format=yuv444p,bitplanenoise=bitplane=7:filter=1,extractplanes=y+u+v,vstack=3

YUV420Pの映像の場合。
ffplay -i input -vf bitplanenoise=bitplane=1:filter=1,extractplanes=y+u+v[y][u][v];[u][v]vstack=2,[y]hstack=2

drawtextフィルタを使って映像上にノイズ係数を描写する。
ffplay -i input -vf bitplanenoise=7,drawtext=y=20:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:text='"noise 0.7 "%{metadata\:lavfi.bitplanenoise.0.7}',drawtext=y=40:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:text='"noise 1.7 "%{metadata\:lavfi.bitplanenoise.1.7}',drawtext=y=60:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:text='"noise 2.7 "%{metadata\:lavfi.bitplanenoise.2.7}'

左にbilateralフィルタを当ててノイズ係数を比較する。
ffplay -i input -vf split[2],bilateral=planes=7,bitplanenoise=7,crop=iw/2:ih:0:0,drawtext=y=20:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:line_spacing=2:textfile=bitplanenoise_drawtext.txt[l];[2]bitplanenoise=7,crop=iw/2:ih:0:0,drawtext=y=20:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:line_spacing=2:textfile=bitplanenoise_drawtext.txt[r];[l][r]hstack

ffprobeでログを-read_intervals で開始10秒間をテキスト出力する。
ffprobe -v error -f lavfi -i movie=input.mp4,bitplanenoise=7 -show_entries packet_tags=lavfi.bitplanenoise.0.7,lavfi.bitplanenoise.1.7,lavfi.bitplanenoise.2.7 -read_intervals "%10" -of csv=p=0 > noise-yuv.csv
ffprobe -v error -f lavfi -i movie=input.mp4,bitplanenoise=7 -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.bitplanenoise.0.7,lavfi.bitplanenoise.1.7,lavfi.bitplanenoise.2.7 -read_intervals "%10" -of csv > noise-yuv.csv

ffprobe の使い方

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

オプション

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

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