この記事でわかること

  • scdet フィルタでシーンチェンジを検出するコマンド
  • 検出感度 thresholdt)の調整方法
  • 各シーンのタイムスタンプをメタデータから取得する方法
  • 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 / threshold10この値以上のスコアをシーンチェンジとして報告
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

注意: selectscene メタデータは 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 チートシート

関連記事


動作確認: 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 まで下げるとリアルなカットが拾えます。