FrameEx Pro 動画からフレーム画像を抽出し、シーン解析・動画書き出しまでを 1 つのウィンドウで行うツール

初めに

ダウンロード

イメージ

FrameEx Pro v2.2 使い方

動画からフレーム画像を抽出し、シーン解析・動画書き出しまでを 1 つのウィンドウで行うツールです。
このドキュメントは「画面の使い方」と「同梱の ffmpeg.exe の使い方」の 2 部構成です。


1. 概要

項目内容
名称FrameEx Pro v2.2(frameex_pro.py / 単一ファイル構成)
できることフレーム画像の一括抽出(PNG/JPG/WEBP/BMP/TIFF)、バッチ処理、シーン検出、モーション解析、コンタクトシート、MP4 / GIF / APNG / WebP の動画出力、シーン分割出力
画像処理OpenCV(シーン検出・モーション・コンタクトシート・プレビュー)
動画処理同梱の ffmpeg.exe / ffprobe.exe
画面Tkinter(ダークテーマ、ドラッグ&ドロップ対応 ※tkinterdnd2 がある場合)

処理の役割分担:

  • ffmpeg … 動画のデコード、画像の書き出し、MP4/GIF/APNG/WebP の生成
  • OpenCV … 解析系(シーン検出、モーション量、コンタクトシート、プレビュー描画)
  • ffprobe … 動画の長さ・FPS・フレーム数・コーデックの取得(無い場合は OpenCV で代用)

2. 起動と準備

起動

bat をダブルクリックします(中身は WinPython の環境を読み込んで frameex_pro.py を起動するだけです)。

d:
call D:\WinPython\scripts\env_for_icons.bat  %*
Python "D:\opencode\frameex\frameex_pro.py"

コマンドラインから起動する場合:

D:\WinPython\python-3.10.11.amd64\python.exe D:\opencode\frameex\frameex_pro.py

起動確認だけ行う(ウィンドウを出さずに終了):

D:\WinPython\python-3.10.11.amd64\python.exe D:\opencode\frameex\frameex_pro.py --smoke

必要なもの

種類必須説明
Python 3.10 前後必須Tkinter が使えること
ffmpeg.exe実質必須動画の抽出・書き出しに使用。無いと起動ログにエラーが出ます
ffprobe.exe推奨無い場合は OpenCV でメタ情報を推定
opencv-python推奨無いと解析タブ・プレビューが制限されます
Pillow推奨サムネイル・コンタクトシート・アニメ画像の確認に使用
tkinterdnd2任意入れるとドラッグ&ドロップで動画を追加できます

ffmpeg の置き場所

frameex_pro.py と同じフォルダに ffmpeg.exe(と ffprobe.exe)を置くのが基本です。
探索順は次のとおりです。

  1. 環境変数 FRAMEEX_FFMPEG_DIR のフォルダ
  2. frameex_pro.py と同じフォルダ
  3. その bin サブフォルダ
  4. D:\WinPython\ffmpeg\bin、C:\ffmpeg\bin、C:\Program Files\ffmpeg\bin、C:\ProgramData\chocolatey\bin
  5. PATH

3. 画面構成

┌──────────────────────────────────────────────────────────────┐
│ FrameEx Pro   v2.2 / 動画フレーム抽出ツール       FFmpeg 情報 │
├───────────────────────────────┬──────────────────────────────┤
│ ファイル名 / 動画情報          │ [抽出設定][バッチ処理]        │
│ [動画を読み込む]               │ [サムネイル][解析]            │
│                               │                              │
│       プレビュー画像           │   (選択中のタブの内容)      │
│                               │                              │
│ [先頭][-100][-10][-1][再生]... │                              │
│ フレーム番号 / 時間表示        │                              │
│ タイムライン(クリックで移動) │                              │
│ シークスライダー               │                              │
│ 範囲指定 [IN][OUT][クリア]     │                              │
│ [前後比較] 速度[1x] 範囲: ...  │                              │
├───────────────────────────────┴──────────────────────────────┤
│ ログ([クリア][保存…] 自動スクロール)                        │
├──────────────────────────────────────────────────────────────┤
│ ステータスバー(左: 状態 / 中央: 進捗 / 右: 件数など)        │
└──────────────────────────────────────────────────────────────┘

左右の境界、上下の境界はドラッグで広さを変えられます。


4. 基本ワークフロー

A. 画像を書き出す

  1. 動画を読み込む を押す(またはバッチ一覧へドロップ)
  2. 必要なら IN / OUT で範囲を決める
  3. 右側「抽出設定」タブで モード・形式・出力先・ファイル名 を決める
  4. この動画を抽出 を押す
  5. 進捗は下部ステータスバーとログで確認

B. 複数動画をまとめて処理する

  1. 「バッチ処理」タブで 動画追加 / フォルダ追加(ドラッグ&ドロップも可)
  2. 「抽出設定」タブで設定を整える(全ジョブ共通)
  3. キュー実行 → 上から順に処理、停止 で中断

C. 範囲を動画として書き出す

  1. 動画を読み込み、IN / OUT で範囲を指定
  2. 「解析」→「動画出力」タブで 形式(MP4 / GIF / APNG / WebP)と 範囲 を選ぶ
  3. 必要ならサイズ %・FPS・品質・ループを調整
  4. 動画を出力

D. カットごとに分割する

  1. 「解析」→「シーン検出」で シーン検出 を実行
  2. 感度・短いシーンの扱いを調整して 適用
  3. シーン分割 (MP4) → 動画名_scenes/ に 1 シーン 1 ファイルで出力

5. プレビューと移動

上部

ボタン動作
動画を読み込むファイル選択ダイアログで動画を開く(バッチ一覧にも追加)
ファイル名 / 動画情報解像度・コーデック・FPS・フレーム数・長さ・サイズを表示

トランスポート(再生バー)

ボタン動作
先頭フレーム 0 へ
-100 / -10 / -1その数だけ戻る
再生 / 一時停止再生の開始・停止(押すたびに切り替え)
+1 / +10 / +100その数だけ進む
末尾最終フレームへ
フレーム番号(数値入力)入力して Enter / フォーカスを外すとそのフレームへ
0 / 0 表示現在フレーム / 総フレーム数
右側の時間表示現在時間 / 全体の長さ(HH:MM:SS.mmm)

再生速度は 0.1x / 0.25x / 0.5x / 1x / 2x / 4x / 8x から選べます(既定 1x)。
音声は再生しません(フレーム確認用のため)。

タイムライン

  • バーを クリック / ドラッグ するとその位置へ移動
  • オレンジの縦線=現在位置、半透明の帯=IN/OUT 範囲
  • 目盛りは動画の長さに応じて自動で間引かれます

シークスライダー

  • つまみを動かすとそのフレームへ移動(プレビューは間引いて追従)
  • プレビュー画像の上で マウスホイール を回すと 1 フレームずつ移動(Shift 併用で 10 フレーム)

範囲指定の表示

  • 範囲: 12 - 48 (37 枚) のように、現在の範囲と枚数を表示
  • 未指定のときは 範囲: 未指定

6. 範囲指定(IN / OUT)

ボタン動作
IN現在のプレビュー位置を「開始フレーム」に設定
OUT現在のプレビュー位置を「終了フレーム」に設定
クリア範囲を解除(全フレーム扱いに戻す)
前後比較別ウィンドウで「前 / 現在 / 次」の 3 枚を並べて表示
  • IN / OUT を押すと、抽出モードが自動で フレーム範囲 に切り替わります。
  • IN / OUT は「抽出設定」タブの 開始フレーム / 終了フレーム と同じ値を共有します。
  • クリア は開始 0 / 終了 -1 に戻し、モードを 全フレーム に戻します。
  • 前後比較ウィンドウはプレビューの移動に追従します(約 70ms の間引き)。
  • もう一度 前後比較 を押すと閉じます。

7. 抽出設定パネル

抽出モード

モード内容補足
全フレームすべてのフレームを連番で書き出し既定
フレーム範囲開始〜終了フレームのみ-1 = 最終フレーム、「現在」ボタンでプレビュー位置を入力
時間範囲HH:MM:SS.mmm で指定終了欄が空欄なら末尾まで
指定FPS指定した FPS に間引いて書き出し例: 1 → 1 秒 1 枚
Nフレーム毎N フレームおきに書き出し例: 10 → 10 枚に 1 枚
キーフレームのみI フレームだけ書き出しシーク用の代表フレーム確認に便利

推定: 123 枚 のように、設定に応じた出力枚数の目安を表示します。

出力設定

項目説明
形式PNG(可逆・推奨)/ JPG(軽量)/ WEBP(高圧縮)/ BMP(無圧縮)/ TIFF(編集向け)
画質JPG・WEBP の品質(1〜100、既定 92)。PNG では圧縮レベルとして使用
出力先保存先フォルダ。参照… で選択。空のときは動画と同じ場所の frameex_out
ファイル名テンプレート。既定 {name}_%06d。{name} は動画名、%06d は連番
開始番号連番の開始値(既定 1)
動画ごとにサブフォルダを作成出力先/動画名/ にまとめる(既定 ON)
既存ファイルを上書きOFF にすると既存ファイルがある場合にエラー終了(既定 ON)

ファイル名の例:

{name}_%06d      → sample_000001.png
frame_%04d       → frame_0001.png
{name}_shot      → 連番が無いので自動で _%06d が付きます

高速化

項目説明
CPUスレッドffmpeg に渡すスレッド数。0 = 自動
GPUデコードなし / 自動 / CUDA / QSV / D3D11VA / DXVA2。起動時に ffmpeg -hwaccels で使えるものだけ表示
注意書きGPU デコードは「読み込み(デコード)」の高速化用。書き出しは CPU エンコードです

GPU が有効でも、効果が出るのはデコード負荷の高い動画(4K/H.265 など)です。
不具合が出る場合は「なし」に戻してください。

実行

ボタン動作
この動画を抽出現在開いている動画を 1 本だけ処理
停止実行中の ffmpeg を終了(キューも停止)

8. バッチ処理

ボタン動作
動画追加ファイル選択で複数追加
フォルダ追加フォルダ内の動画を再帰的に追加
選択削除選択行を削除
全削除一覧を空にする
リセット状態・進捗を待機に戻す(一覧は残す)
キュー実行上から順に「抽出設定」の内容で処理
停止現在の処理を中止

一覧の見方:

列内容
状態待機 / 解析中 / 実行中 / 完了 / 失敗 / 停止(色分け)
ファイル動画ファイル名(ダブルクリックで開く)
長さ / FPS / フレームffprobe の結果
進捗ジョブごとの %

下部に全体進捗バーと 全体: 42.0% | 3/10 完了 | 残り 00:01:23 | 現在: sample.mp4 のような表示が出ます。
一覧へのドラッグ&ドロップでも追加できます。


9. サムネイル

  • 追加した動画をカード形式で一覧表示(サムネイルは全体の 10% 付近のフレーム)
  • カードをクリックするとその動画を開く(キューには追加しない)
  • サムネイル再生成 でキャッシュを捨てて作り直す

10. 解析タブ

「解析」タブの中に 4 つのサブタブがあります。

10.1 シーン検出

カット(場面転換)を自動検出します。OpenCV でヒストグラム差+画素差を計算しています。

操作説明
感度(0〜100、既定 60)大きいほど敏感に検出。スライダーと数値入力が連動
閾値表示感度から自動計算(0.60 - 0.005 × 感度、0.05〜0.60)。感度 60 → 0.30
最小間隔(既定 8)連続してカットを拾いすぎないための最小フレーム間隔
シーン検出解析開始。進捗はステータスバーと一覧上部に表示
停止解析を中断(そこまでの結果を表示)

短いシーンの扱い(一覧の下の行):

設定動作
N フレーム未満 →これより短いシーンを「短い」と判定(既定 6)
前のシーンに結合直前のシーンの末尾まで伸ばす
次のシーンに結合直後のシーンの先頭を手前へ広げる
単独で残すそのまま 1 シーンとして残す(既定)
対象にしない一覧から除外(分割・抽出の対象外)
適用上記ルールを一覧とグラフへ反映(番号は振り直し)

一覧: No / 開始フレーム / 開始時間 / 長さ。短いシーンはオレンジ色で表示。
行をクリックするとそのシーンの先頭へジャンプします。

グラフ: カット強度の折れ線。

  • オレンジの破線 … 現在の閾値(この線を超えた点がカット候補)
  • オレンジの縦線 … 検出されたカット位置
  • 緑の破線 … 現在のプレビュー位置
  • グラフをクリックするとそのフレームへジャンプ

ボタン:

ボタン動作
選択を範囲に選んだシーンを IN/OUT に設定
選択シーンを抽出選んだシーンを画像として書き出し
シーン分割 (MP4)全シーンを 1 本ずつ MP4 に書き出し
一覧をログへシーン一覧をログに出力(コピー用)

シーン分割の出力先:

出力先/動画名_scenes/動画名_scene_001.mp4
                      動画名_scene_002.mp4 ...

10.2 モーション

フレーム間の変化量(動きの多さ)をグラフ化します。

操作説明
モーション解析解析開始(長い動画は最大約 1200 点に間引き)
停止中断
グラフ青い折れ線=変化量、破線=平均、オレンジの点=平均+標準偏差以上のピーク
グラフをクリックそのフレームへジャンプ(動きの山を探すのに便利)

スコアは 96×54 に縮小したグレー画像の平均絶対差分です。

10.3 コンタクトシート

動画全体から均等にフレームを抜き出し、1 枚の JPG にまとめます(ffmpeg ではなく OpenCV + Pillow で生成)。

操作説明
分割5×5(25 枚)/ 10×10(100 枚)/ 20×20(400 枚)
コンタクトシート作成動画名_contact_sheet.jpg を出力先に保存
停止中断
出力フォルダを開くエクスプローラで保存先を開く

各コマの左上にフレーム番号が入ります。

10.4 動画出力

範囲を MP4 / アニメーション GIF / APNG / WebP として書き出します(すべて ffmpeg)。

項目説明
形式MP4 (H.264) / アニメーション GIF / APNG / WebP アニメーション
範囲現在のIN/OUT範囲 / 全体 / 選択シーン(シーン検出で一覧の行を選んでおく)
サイズ出力解像度の % (10〜400、既定 100)
FPSGIF / APNG / WebP のフレームレート(1〜60、既定 15)。MP4 は元の FPS
品質WebP の品質(1〜100、既定 80)
ループON で無限ループ(GIF / APNG / WebP)
出力先自動命名。手で編集するか 参照… で指定
動画を出力書き出し開始
停止実行中の ffmpeg を終了
シーン分割 (MP4)シーンごとに MP4 を出力(シーン検出の結果を使用)

自動命名は 動画名_開始フレーム-終了フレーム.拡張子 です(例: sample_000005-000015.gif)。
IN/OUT や形式を変えると自動で追従します(手動編集した後は追従しません)。

形式ごとの違い:

形式用途特徴
MP4確認用の短いクリップ、SNS 投稿H.264 + AAC 無し、+faststart 付き
GIFどこでも貼れるループ画像パレット最適化(256 色)で見た目を優先
APNG高画質なアニメ PNG半透明を保てる。ファイルは大きめ
WebP軽量なアニメ画像GIF より小さく高画質。Web 向け

11. キーボードショートカット

入力欄(Entry / Spinbox / Combobox / Text)にフォーカスがあるときは無効になります。

キー動作
← / →1 フレーム戻る / 進む
Shift + ← / →10 フレーム
Ctrl + ← / →100 フレーム
Home / End先頭 / 末尾
Space再生 / 一時停止
IIN(開始フレーム)を現在位置に
OOUT(終了フレーム)を現在位置に
Ctrl + O動画追加

12. 出力ファイルの命名

画像

出力先/
  └ 動画名/                     ← 「動画ごとにサブフォルダ」ON のとき
      動画名_000001.png
      動画名_000002.png
      ...
  • テンプレートの {name} は動画ファイル名(拡張子なし)に置換されます
  • %06d などの連番指定が無い場合は自動で _%06d が付きます
  • ファイル名に使えない文字(\ / : * ? " < > | など)は自動で置換されます

動画

出力先/
  動画名_000005-000015.mp4      ← 範囲書き出し
  動画名_contact_sheet.jpg      ← コンタクトシート
  動画名_scenes/
      動画名_scene_001.mp4      ← シーン分割
      動画名_scene_002.mp4

ログ

ログ右上の 保存… でテキストファイルに保存できます。
ffmpeg に渡したコマンドも cmd 色で記録されるので、再実行や検証に使えます。


13. ffmpeg.exe の使い方

ここでは「このアプリが実際に投げているコマンド」を軸に、ffmpeg.exe の使い方を説明します。
同じコマンドをコマンドプロンプトから実行すれば、アプリを使わずに同じ結果が得られます。

13.1 基本の形

ffmpeg.exe [入力前のオプション] -i 入力ファイル [出力オプション] 出力ファイル
  • オプションは -i より前(入力オプション)と 後ろ(出力オプション)で意味が変わります
  • -y は上書き許可、-n は上書き禁止
  • 実行例(バージョン確認):
D:\opencode\frameex\ffmpeg.exe -hide_banner -version
D:\opencode\frameex\ffmpeg.exe -hide_banner -hwaccels
D:\opencode\frameex\ffmpeg.exe -hide_banner -encoders

13.2 アプリが使う共通オプション

ffmpeg.exe -hide_banner -nostats -loglevel warning -progress pipe:1 -y ...
オプション意味
-hide_banner起動時のビルド情報を出さない
-nostats標準の進捗表示を止める
-loglevel warning警告以上だけ出す(ログを読みやすくする)
-progress pipe:1進捗を key=value 形式で標準出力へ(アプリはこれを読んで % 表示)
-y / -n上書きする / しない

-progress pipe:1 の出力例:

frame=42
fps=30.0
out_time_ms=1400000
progress=continue
...
progress=end

アプリは out_time_ms と frame を読んで進捗と残り時間を計算しています。

13.3 画像の抽出(アプリの「この動画を抽出」)

全フレーム → PNG

ffmpeg.exe -hide_banner -nostats -loglevel warning -progress pipe:1 -y ^
  -i input.mp4 -compression_level 6 -start_number 1 "out\input_%06d.png"

フレーム範囲(5〜15 フレーム)

ffmpeg.exe ... -i input.mp4 -vf "select=between(n\,5\,15)" -fps_mode passthrough ^
  -compression_level 6 -start_number 1 "out\input_%06d.png"

N フレーム毎(10 枚に 1 枚)

ffmpeg.exe ... -i input.mp4 -vf "select=not(mod(n\,10))" -fps_mode passthrough ^
  "out\input_%06d.png"

指定 FPS(1 秒 1 枚)

ffmpeg.exe ... -i input.mp4 -vf "fps=1" "out\input_%06d.png"

キーフレームのみ

ffmpeg.exe ... -skip_frame nokey -i input.mp4 -fps_mode passthrough ^
  "out\input_%06d.png"

時間範囲(0.5 秒から 1.1 秒)

ffmpeg.exe ... -ss 0.500 -i input.mp4 -t 1.100 "out\input_%06d.png"

ポイント:

  • %06d は連番。-start_number で開始番号を指定
  • select= を使うと 入力のフレーム番号(n) で選べます。カンマは \, とエスケープ
  • -fps_mode passthrough(古い ffmpeg は -vsync 0)を付けないと、同じ画像が重複出力されることがあります
  • 形式ごとの品質オプション
  • JPG: -q:v 2(1〜31、小さいほど高画質)
  • WEBP(静止画): -c:v libwebp -quality 90
  • PNG: -compression_level 6
  • TIFF: -compression_algo deflate

13.4 動画の書き出し(アプリの「動画出力」)

MP4(H.264)

ffmpeg.exe -hide_banner -nostats -loglevel warning -progress pipe:1 -y ^
  -ss 0.500 -i input.mp4 -t 1.100 -an ^
  -c:v libx264 -preset medium -crf 20 -pix_fmt yuv420p -movflags +faststart ^
  -vf "scale=160:120:flags=lanczos" "out\input_000005-000015.mp4"
オプション意味
-ss 0.500開始位置(-i の前だと高速シーク)
-t 1.100長さ(秒)
-an音声を含めない
-c:v libx264H.264 でエンコード
-preset medium速度と圧縮率のバランス(ultrafast〜veryslow)
-crf 20画質(0〜51、小さいほど高画質・大きいほど軽い。18〜23 が目安)
-pix_fmt yuv420p互換性の高い色形式(Windows のプレイヤーで再生できる)
-movflags +faststartWeb で先頭から再生しやすくする

アニメーション GIF

ffmpeg.exe ... -ss 0.500 -i input.mp4 -t 1.100 -an ^
  -filter_complex "fps=15,scale=160:120:flags=lanczos,split[a][b];[a]palettegen=max_colors=256:stats_mode=diff[p];[b][p]paletteuse=dither=sierra2_4a[out]" ^
  -map "[out]" -loop 0 "out\input_000005-000015.gif"

GIF は 256 色しか出せないため、パレット生成 → 適用 の 2 段階フィルタを使うのがコツです。

部分意味
fps=1515 コマ/秒に変換
scale=...:flags=lanczos高品質で縮小
split[a][b]同じ映像を 2 系統に分岐
[a]palettegen=...最適な 256 色パレットを作る
[b][p]paletteuse=...そのパレットで本番変換
-loop 0無限ループ(-loop 1 で 1 回だけ)

APNG

ffmpeg.exe ... -ss 0.500 -i input.mp4 -t 1.100 -an ^
  -vf "fps=15,scale=160:120:flags=lanczos" ^
  -c:v apng -plays 0 -f apng "out\input_000005-000015.apng"
  • -plays 0 は無限ループ
  • -f apng を明示しないと拡張子判定で失敗することがあります

WebP アニメーション

ffmpeg.exe ... -ss 0.500 -i input.mp4 -t 1.100 -an ^
  -vf "fps=15,scale=160:120:flags=lanczos" ^
  -c:v libwebp -lossless 0 -q:v 80 -loop 0 -f webp "out\input_000005-000015.webp"
  • -c:v libwebp を忘れると「静止画 1 枚」になります(libwebp_anim が既定になる環境があるため明示)
  • -q:v は 0〜100(大きいほど高画質)
  • -loop 0 で無限ループ

シーン分割

上の MP4 コマンドを、シーンごとの -ss / -t で繰り返すだけです。

ffmpeg.exe ... -ss 0.000 -i input.mp4 -t 1.000 -an -c:v libx264 ... "out\input_scenes\input_scene_001.mp4"
ffmpeg.exe ... -ss 1.000 -i input.mp4 -t 1.000 -an -c:v libx264 ... "out\input_scenes\input_scene_002.mp4"

13.5 GPU デコード(-hwaccel)

ffmpeg.exe ... -hwaccel cuda -i input.mp4 ...
値対象
auto使えるものを自動選択(既定)
cudaNVIDIA
qsvIntel(Quick Sync)
d3d11va / dxva2Windows 標準
none(アプリ上は「なし」)付けない
  • 使える値は ffmpeg -hwaccels で確認できます
  • デコードのみの高速化です。エンコードを GPU にするには -c:v h264_nvenc などが必要(このアプリでは使いません)
  • 逆に遅くなる・エラーになる場合は「なし」に

13.6 情報取得(ffprobe)

ffprobe.exe -v error -print_format json -show_format -show_streams input.mp4

アプリはこの JSON から width / height / avg_frame_rate / nb_frames / duration / codec_name を読んでいます。
長さだけ知りたいとき:

ffprobe.exe -v error -show_entries format=duration -of default=nw=1 input.mp4

13.7 手動レシピ集

動画を 1 秒ごとの JPG にする

ffmpeg.exe -i input.mp4 -vf fps=1 -q:v 2 "frames\f_%04d.jpg"

先頭 5 秒を無音 MP4 に

ffmpeg.exe -i input.mp4 -t 5 -an -c:v libx264 -crf 20 -pix_fmt yuv420p clip.mp4

縦横半分のサイズで GIF 化

ffmpeg.exe -i input.mp4 -vf "fps=12,scale=iw/2:-1:flags=lanczos,split[a][b];[a]palettegen[p];[b][p]paletteuse" -loop 0 half.gif

連番画像から動画を作る

ffmpeg.exe -framerate 24 -i "frames\f_%04d.png" -c:v libx264 -crf 18 -pix_fmt yuv420p out.mp4

動画を結合する(同じ形式どうし)

ffmpeg.exe -f concat -safe 0 -i list.txt -c copy joined.mp4

list.txt は 1 行 1 ファイル:

file 'C:\path\a.mp4'
file 'C:\path\b.mp4'

13.8 ffmpeg の注意点

  • パスは引用符で囲む(空白や日本語を含む場合)
  • 出力ファイル名の %06d は連番。% をそのまま使いたいときは %%
  • 既存ファイルがあると確認待ちで止まることがあります。スクリプトでは -y を付ける
  • -ss は -i の前(高速)と後ろ(正確だが遅い)で挙動が変わります。このアプリは前に置いています
  • 進捗を自分で読みたいときは -progress pipe:1 -nostats

14. トラブルシューティング

症状対処
「FFmpeg が見つかりません」ffmpeg.exe を frameex_pro.py と同じフォルダに置く、または PATH を通す、または環境変数 FRAMEEX_FFMPEG_DIR を設定
動画情報が「取得できません」ffprobe.exe を同じフォルダに置く。それでも駄目なら OpenCV のコーデック対応を確認
抽出が 0 枚で終わるモードと範囲を確認(例: 時間範囲の終了が開始より前、フレーム範囲が総数を超えている)
同じ画像が重複して出る-fps_mode passthrough(古い ffmpeg は -vsync 0)が付いているか確認
GPU を選ぶとエラーになる「なし」または「自動 (auto)」に戻す
シーン検出で何も出ない感度を上げる(例: 80)、最小間隔を小さくする(例: 1)
シーンが細かすぎる感度を下げる(例: 40)、最小間隔を大きくする、短いシーンを「前/次に結合」または「対象にしない」
GIF/WebP が 1 枚になる形式の選択と、-c:v libwebp / -loop の指定を確認(アプリから出力すれば自動)
出力が重いMP4 は CRF を上げる(20 → 26)、GIF/WebP はサイズ % と FPS を下げる
日本語ファイル名で失敗する出力先を英数字のみのパスにしてみる(Windows のコードページの影響)

ログに ffmpeg のコマンドが残るので、失敗時はその行をコピーしてコマンドプロンプトで実行すると原因が分かりやすいです。


付録: 用語

用語意味
フレーム動画の 1 コマ。n は 0 始まりの番号
IN / OUT抽出・書き出しの開始 / 終了フレーム
シーンカットで区切られた区間
閾値シーン検出で「カット」と判定するスコアの境目
コンタクトシート複数フレームを 1 枚に並べた一覧画像
キーフレーム単独で復元できる基準フレーム(I フレーム)
CRFH.264 の画質指定。小さいほど高画質・大容量
パレットGIF で使える 256 色の組

Python

Posted by eightban