この記事でわかること

  • blackdetect フィルタで黒フレーム区間を検出するコマンド
  • black_min_duration(最小黒フレーム継続時間)の設定
  • pic_th(黒と判定するピクセル比率閾値)の意味
  • pix_th(黒と判定する輝度閾値)の調整
  • CM区切りやチャプター境界の自動検出への応用

テスト済みバージョン: FFmpeg 6.1で確認済み(ubuntu-latest / CI検証済み) 対象 OS: Windows / macOS / Linux


基本コマンド

ffmpeg -i input.mp4 -vf blackdetect -f null /dev/null

映像の黒フレーム区間を標準エラー出力に表示します。


出力の読み方

[blackdetect @ 0x...] black_start:0 black_end:2.04 black_duration:2.04
[blackdetect @ 0x...] black_start:123.5 black_end:126.0 black_duration:2.5
フィールド説明
black_start黒区間の開始時刻(秒)
black_end黒区間の終了時刻(秒)
black_duration黒区間の継続時間(秒)

パラメータの調整

デフォルト値

パラメータデフォルト説明
black_min_duration2.0この秒数以上続く黒区間のみ報告
picture_black_ratio_th (pic_th)0.98フレーム内の黒ピクセルが98%以上なら黒フレームと判定
pixel_black_th (pix_th)0.10輝度値(0〜1正規化)がこの値以下なら黒ピクセルと判定

カスタム例:0.5秒以上の黒区間を検出

ffmpeg -i input.mp4 -vf "blackdetect=d=0.5:pic_th=0.95:pix_th=0.10" -f null /dev/null
  • d を小さく: 短い黒フレームも検出(CM境界等)
  • pic_th を小さく: 黒以外のピクセルが多少含まれても検出
  • pix_th を大きく: やや明るいフレームも「黒」として判定

応用例:テレビ録画のCM境界を検出

テレビ録画によく使われる手法で、番組とCMの間に約2秒の黒フレームが入ります:

ffmpeg -i recording.mp4 -vf "blackdetect=d=2.0:pix_th=0.10" -f null /dev/null 2>&1 | grep black_

出力をテキストファイルに保存

ffmpeg -i input.mp4 -vf blackdetect -f null /dev/null 2>&1 | grep black_ > black_segments.txt

blackdetect と silencedetect の組み合わせ

映像の黒フレームと音声の無音が同時に発生する区間を探すことで、より精度の高いシーン境界を検出できます。両フィルタの出力を照合するシェルスクリプトや Python を使うことで自動化が可能です。


関連リソース

よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。

FFmpeg チートシート

関連記事


動作確認: ffmpeg 6.1 / Ubuntu 24.04 (GitHub Actions runner) 一次ソース: ffmpeg.org/ffmpeg-filters.html#blackdetect / ffmpeg.org/ffmpeg-filters.html