Marziliano, Pinaらの”A no-reference perceptual blur metric.”を基としたフレームのぼやけ度を判定するblurdetect
フィルタの使い方。フィルタを通しても映像は変化しない。メタデータに出力するのでffprobe連携できる。
フレームのブロックノイズを数値化するblockdetect
フィルタもある。
ブロックノイズを数値化するblockdetect
基本コマンド
コンソールの最後に統計の平均を表示する。
ffmpeg -i input -vf blurdetect=high=50/255:high=20/255:radius=50:block_pct=80:block_width=32:block_height=32 -an -f null -
ffmpeg -i input -vf blurdetect=50/255:20/255:50:80:32:32 -an -f null -
metadata
フィルタでコンソールにフレーム毎の結果を表示する。
ffmpeg -i input -vf blurdetect=50/255:20/255:50:80:32:32,metadata=print:key=lavfi.blur -an -f null -
ffplay -i input -vf blurdetect=50/255:20/255:50:80:32:32,metadata=print:key=lavfi.blur
drawtext
フィルタで映像にフレーム毎の結果を描写する。
ffplay -i input -vf blurdetect,drawtext=y=40:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:text='"blurdetect ("%{metadata\:lavfi.blur})'
ffprobeで統計をログで出力する。
ffprobe -v error -f lavfi -i movie=input.mp4,blurdetect -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.blur -of csv=print_section=0 > blurdetect.csv
ffprobe -v error -f lavfi -i movie=input.mp4,blurdetect -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.blur -of csv=print_section=0 -o blurdetect.csv
公式ドキュメント:FFmpeg Filters Documentation : blurdetect
オプション
- high[float]
Cannyアルゴリズムで使用される上限しきい値の指定。高いしきい値によって強いエッジピクセルが選択される
既定値:0.117647
範囲:0から1まで - low[float]
Cannyアルゴリズムで使用される下限しきい値の指定。high以下の値にする
既定値:0.0588235
範囲:0から1まで - radius[int]
エッジピクセルの周囲で局所的な最大値を検索する半径を定義する
既定値:50
範囲:1から100まで - block_pct[int]
パーセンテージの範囲で最も重要なブロックのみのぼやけ度を決める
既定値:80
範囲:1から100まで - block_width[int]
指定したブロックの横幅でぼやけ度を決める。1より小さい値はblock_heightに関係なく画面全体で処理する。そのときはblock_pctも関係なくなる
既定値:-1
範囲:-1からINT_MAXまで - block_height[int]
指定したブロックの縦幅でぼやけ度を決める。1より小さい値はblock_widthに関係なく画面全体で処理する。そのときはblock_pctも関係なくなる
既定値:-1
範囲:-1からINT_MAXまで - planes[int]
フィルタを当てるチャンネル指定
既定値:1
詳しくは ffmpeg について | チャンネルの順番と注意点を参照
メタデータ出力内容。
lavfi.blur
「カメラをゆっくり動かしてください」というメッセージを表示するかどうか、他にもフィードバックしてぼやけ抑制の制御に使える。