フレーム毎に黒フレームを調べるblackframeフィルタの使い方。輝度の値からどれだけ黒いかの設定があるのでシーンチェンジを調べるのに使える。blackdetectフィルタよりも設定方法が分かりやすい。

黒フレーム区間を調べる blackdetect

基本コマンド

コンソールの表示されるのでテキストにリダイレクトした方が見やすい。
ffmpeg -i input -vf blackframe=98:32 -f null -
ffmpeg -i input -vf blackframe=98:32 -f null - > blackframe.txt 2>&1

ログの出力例。

frame:1170 pblack:99 pts:3513510 t:39.039000 type:I last_keyframe:1170


似たようなフィルタにblackdetectがあるのでこちらを併用することもできる。
ffmpeg -i input -vf blackframe,blackdetect -f null -

colorソースの黒は輝度の値が16になるので、threshold, threshの値は17以上で反応する。

輝度の値の調べ方のコマンド例。
ffplay -f lavfi color -vf datascope
ffplay -f lavfi color -vf signalstats,metadata=print:key=lavfi.signalstats.YMIN

映像の3/4が黒なので75(%)以下の指定で反応する。
ffmpeg -f lavfi -i color=s=40x40:d=2 -vf split=4[0][1][2][3];[0]lutyuv=y=255[0a];[0a][1]vstack[u];[2][3]vstack[b];[u][b]hstack,blackframe=75 -f null -

黒が50%未満を出力せずに、その前のフレームをコピーして出力する。blackframe=0で全フレームを対象に、metadataフィルタで対象フレームを選ぶ。
ffmpeg -i inputput -vf blackframe=0,metadata=select:key=lavfi.blackframe.pblack:value=50:function=less -vsync cfr -c:a copy output

メタデータをコンソールに表示する metadata, ametadata
ffmpeg – replace black frames with previous frames – Video Production Stack Exchange

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

オプション

  • amount[int]
    1フレームの何パーセント以上を黒と判断するか。float ではないのに注意
    既定値:98
    範囲:0から100まで
  • threshold, thresh[int]
    指定した値より小さい輝度の値を検出する
    既定値:32
    範囲:0から255まで

関連記事
ffmpeg できれいにロゴを消す方法

コメントを残す

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

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