YUV(A) や RGB(A)、GRAY の数値を16進数で映像にオーバーレイして確認できるdatascopeフィルタの使い方。数値ではなく映像で表示するフィルタにhistogramフィルタがあるがdatascopeフィルタの方が直感的に任意の場所の数値が読み取れる。ただし表示できる範囲は全画面ではなく1px毎に表示されるので全体の変化を大まかに調べるのには向かない。

ffmpeg でヒストグラムを表示する

基本コマンド

ffplay input -vf datascope=s=1280x720:x=0:y=0:mode=0:axis=0

チャンネル数の数だけ 1px に表示される数が変わる。上から順番にチャンネルが割り振られる。チャンネルが増えるだけ表示できる解像度が狭くなる。

(4:6)から調べた datascope の出力サンプル

ffmpeg -f lavfi -i testsrc2=d=1,format=rgb24 -vf datascope=s=340x380:mode=color:x=4:y=6:axis=1 -vframes 1 datascope.png

入力映像が3チャンネル、8ビットの場合以下の解像度になる。

  • 横のpx数*20-2+22
  • 縦のpx数*36-2+22

上と左に表示される座標値をcropフィルタでカットする場合は左上 22x22p をカットする。入力解像度が奇数になる場合はformat=rgb24, format=yuv444pで入力フォーマットを変更する。右と下をぎりぎりにカットする場合は、右に3px、下に7pxをカットする。
ffmpeg -f lavfi -i testsrc2=d=1,format=rgb24 -vf datascope=s=340x380:mode=color:x=4:y=6:axis=1,crop=340-22-3:380-22-7:22:22 -vframes 1 datascope-crop.png

縦横の比率を合わせる場合

scale2refフィルタを使って解像度を揃える。

testsrc2 を crop したもの 16x10p

ffmpeg -f lavfi -i testsrc2=d=1,crop=16:10:4:6 -vframes 1 testsrc2-crop.png

datascopeフィルタ後の解像度は 340(16*20-2+22)x380(10*36-2+22) になり、そこから左上の22x22px、右に3px、下に7pxをカットする。

縦そのままに横を伸ばす

ffmpeg -i testsrc2-crop.png -filter_complex split[a],datascope=s=340x380:mode=color:axis=1,crop=340-22-3:380-22-7:22:22[b];[b][a]scale2ref='if(gt(iw,ih),(iw*20-2-3)*dar,iw*20-2-3):if(gt(ih,iw),(ih*36-2-7)*dar,ih*36-2-7)'[b0][a0] -map [b0] datascope-scale0.png -map [a0] -f null -

横をそのままに縦を縮める

ffmpeg -i testsrc2-crop.png -filter_complex split[a],datascope=s=340x380:mode=color:axis=1,crop=340-22-3:380-22-7:22:22[b];[b][a]scale2ref='if(gt(iw,ih),iw*20-5,(iw*20-5)/dar):if(gt(ih,iw),ih*36-9,(ih*36-9)/dar)'[b0][a0] -map [b0] datascope-scale1.png -map [a0] -f null -

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

オプション

  • size, s[image_size]
    出力解像度。表示する座標に横は20倍以上、縦は1チャンネルあたり12倍以上必要
    既定値。hd720(1280×720)
  • x[int]
    左上を 0 とした表示する横軸の座標指定
    既定値:0
  • y[int]
    左上を 0 とした表示する縦軸の座標指定
  • mode[int] 表示モードの指定
    • 0, mono:黒背景に白色数字。既定値
    • 1, color:黒背景に元映像の色数字
    • 2, color2:元映像の背景に数字を読みやすい色に変える
  • axis[boolean]
    既定値:0(無効)
    上と左に座標の値を表示する。有効化すると表示範囲が狭まる
  • opacity[float]
    背景の透過指定
    既定値:0.75
    範囲:0 から 1 まで
  • format[int] 表示形式の指定
    • 0, hex:16進数。既定値
    • 1, dec:10進数
  • components[float]
    表示するチャンネル指定
    既定値:15
    詳しくは ffmpeg について | チャンネルの順番と注意点を参照

コメントを残す

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

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