この記事でわかること
scdetフィルタでシーンチェンジを検出するコマンド- 検出感度
threshold(t)の調整方法 - 各シーンのタイムスタンプをメタデータから取得する方法
selectフィルタと組み合わせたシーン先頭フレームの抽出- シーンチェンジ点のサムネイル一括生成
テスト済みバージョン: FFmpeg 6.1で確認済み(ubuntu-latest / CI検証済み) 対象 OS: Windows / macOS / Linux
基本コマンド
ffmpeg -i input.mp4 -vf "scdet=t=10" -f null /dev/null
-f null /dev/null で出力ファイルを生成せず、検出情報のみを標準エラー出力に表示します。
出力の読み方
[scdet @ 0x...] lavfi.scd.score: 18.3, lavfi.scd.time: 4.96
[scdet @ 0x...] lavfi.scd.score: 32.7, lavfi.scd.time: 23.42
| フィールド | 説明 |
|---|---|
lavfi.scd.score | シーンチェンジスコア(高いほど変化が大きい) |
lavfi.scd.time | 検出時刻(秒) |
threshold(感度)の調整
| パラメータ | デフォルト | 説明 |
|---|---|---|
t / threshold | 10 | この値以上のスコアをシーンチェンジとして報告 |
ffmpeg -i input.mp4 -vf "scdet=t=20" -f null /dev/null
- 低い値(例: 5): 細かな変化も検出(誤検出増)
- 高い値(例: 40): 明確なカットのみ検出(見逃し増)
- ドキュメンタリーや映画:
10〜20が目安
シーンチェンジ点のフレームを画像として保存
select フィルタと組み合わせて、シーンが変わった瞬間のフレームを画像として保存します:
ffmpeg -i input.mp4 -vf "scdet=t=10,select=gt(scene\,0.1)" -vsync vfr scene_%04d.png
注意:
selectのsceneメタデータはscdetのスコアを0〜1に正規化した値です。gt(scene\,0.1)は score > 10% のフレームを選択します。
showinfo フィルタでタイムスタンプを確認
ffmpeg -i input.mp4 -vf "scdet=t=10,metadata=print:key=lavfi.scd.score" -f null /dev/null
用途別のthreshold設定例
| 用途 | 推奨 threshold |
|---|---|
| 映画のカット検出 | 8〜15 |
| スポーツ映像 | 15〜25 |
| アニメーション | 10〜20 |
| 監視カメラ映像 | 5〜10 |
| スライドショー動画 | 30〜50 |
よくある注意点
フェードやディゾルブは検出精度が低い
ハードカット(瞬間的な場面転換)は高精度で検出できますが、フェードやディゾルブ(徐々に変化)は scdet では誤検出しやすいです。
長い動画では処理時間がかかる
シーン検出は全フレームをデコードするため、長尺動画では時間がかかります。-ss と -to で部分的に解析することも可能です。
関連リソース
よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。
関連記事
動作確認: ffmpeg 6.1 / Ubuntu 24.04 (GitHub Actions runner) 一次ソース: ffmpeg.org/ffmpeg-filters.html#scdet / ffmpeg.org/ffmpeg-filters.html#select
よくある質問
シーン検出の閾値は?
gt(scene,0.4) で大きなカットを検出。早いカット系コンテンツなら 0.3 まで下げる、ハードカットだけ拾うなら 0.5 に上げる。
タイムスタンプをファイルにエクスポート
ffmpeg -i in.mp4 -filter:v "select='gt(scene,0.4)',showinfo" -f null - 2> scenes.log 後に pts_time を grep。
明らかなカットを見逃す
クロスフェード / フラッシュカットが閾値の下に隠れる場合があります。blackdetect と組み合わせるとフェードアウト系も拾える。
検出シーンで自動分割するには?
はい — タイムスタンプを wrapper スクリプトに渡し、各範囲に ffmpeg -ss A -to B -c copy partN.mp4 を実行する流れ。
アニメでも動く?
はい、ただし閾値を調整。アニメは色分布が均一なため、0.25〜0.3 まで下げるとリアルなカットが拾えます。