各フレームのカラーチャンネルのヒストグラムにおけるグレーレベルのエントロピーを測定するentropyフィルタの使い方。各チャンネルのピクセル値の不規則性を調べる。スコアが高いとより複雑な映像になる。ほかにYUVのピクセル値の統計をログで出力するにはsignalstatsフィルタがある。

YUV のデータを数値で表示する signalstats

基本コマンド

コンソールにnormal、diffモードでログを流す。
ffmpeg -i input -vf entropy=mode=normal,metadata=mode=print:file=- -an -f null -
ffmpeg -i input -vf entropy=mode=diff,metadata=mode=print:file=- -an -f null -

再生しながらentropy.entropy.normal.Yをコンソールに流す。
ffplay input -vf entropy,metadata=print:key=lavfi.entropy.entropy.normal.Y

drawtextフィルタで映像にスコアを描写する。
ffplay input -vf entropy,drawtext=y=40:fontfile=C\\://WINDOWS/Fonts/arial.ttf:fontsize=20:fontcolor=white:box=1:boxcolor=black@0.4:text='"entropy.normal.Y ("%{metadata\:lavfi.entropy.entropy.normal.Y})'

文字を描写する drawtext

drawgraphフィルタで映像の下にスコアを描写する。sで入力した映像と同じ幅を指定する。
ffplay -i input -vf split[0],entropy,drawgraph=lavfi.entropy.normalized_entropy.normal.Y:min=0:max=1:s=1920x256[1];[0][1]vstack

メタデータを映像化する drawgraph, adrawgraph

ffprobeでログを出力する。適宜必要なデータだけをpacket_tagsに指定する。
ffprobe -v error -f lavfi -i movie=input.mp4,entropy -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.entropy.entropy.normal.Y,lavfi.entropy.normalized_entropy.normal.Y,lavfi.entropy.entropy.normal.U,lavfi.entropy.normalized_entropy.normal.U,lavfi.entropy.entropy.normal.V,lavfi.entropy.normalized_entropy.normal.V -of csv > entropy.csv
ffprobe -v error -f lavfi -i movie=input.mp4,entropy=1 -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.entropy.entropy.diff.Y,lavfi.entropy.normalized_entropy.diff.Y,lavfi.entropy.entropy.diff.U,lavfi.entropy.normalized_entropy.diff.U,lavfi.entropy.entropy.diff.V,lavfi.entropy.normalized_entropy.diff.V -of csv > entropy-diff.csv

side_dataの行が不要ならgrepで削る。
ffprobe -v error -f lavfi -i movie=input.mp4,entropy -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.entropy.entropy.normal.Y,lavfi.entropy.normalized_entropy.normal.Y,lavfi.entropy.entropy.normal.U,lavfi.entropy.normalized_entropy.normal.U,lavfi.entropy.entropy.normal.V,lavfi.entropy.normalized_entropy.normal.V -of csv | grep packet - > entropy.csv
ffprobe -v error -f lavfi -i movie=input.mp4,entropy=1 -select_streams v:0 -show_entries packet=pts_time -show_entries packet_tags=lavfi.entropy.entropy.diff.Y,lavfi.entropy.normalized_entropy.diff.Y,lavfi.entropy.entropy.diff.U,lavfi.entropy.normalized_entropy.diff.U,lavfi.entropy.entropy.diff.V,lavfi.entropy.normalized_entropy.diff.V -of csv | grep packet - > entropy-diff.csv

ffprobe の使い方

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

オプション

  • mode[int]
    • normal,0:通常。既定値
    • diff,1:隣接するヒストグラム値間の絶対値の差を測定する

normalized_entropyは通常の値を0から1までに正規化して読みやすくなっている。

normalで使えるメタデータ。YUVのほかにBRGも調べられる。

lavfi.entropy.entropy.normal.[YUVBRG]
lavfi.entropy.normalized_entropy.normal.[YUVBRG]

diffで使えるメタデータ。

lavfi.entropy.entropy.diff.[YUVBRG]
lavfi.entropy.normalized_entropy.diff.[YUVBRG]

コメントを残す

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

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