この記事でわかること
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_duration | 2.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 6.1 / Ubuntu 24.04 (GitHub Actions runner) 一次ソース: ffmpeg.org/ffmpeg-filters.html#blackdetect / ffmpeg.org/ffmpeg-filters.html