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

FrameEx Pro v2.2 使い方
動画からフレーム画像を抽出し、シーン解析・動画書き出しまでを 1 つのウィンドウで行うツールです。
このドキュメントは「画面の使い方」と「同梱の ffmpeg.exe の使い方」の 2 部構成です。
- 1. 概要
- 2. 起動と準備
- 3. 画面構成
- 4. 基本ワークフロー
- 5. プレビューと移動
- 6. 範囲指定(IN / OUT)
- 7. 抽出設定パネル
- 8. バッチ処理
- 9. サムネイル
- 10. 解析タブ
- 11. キーボードショートカット
- 12. 出力ファイルの命名
- 13. ffmpeg.exe の使い方
- 14. トラブルシューティング
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)を置くのが基本です。
探索順は次のとおりです。
- 環境変数
FRAMEEX_FFMPEG_DIRのフォルダ frameex_pro.pyと同じフォルダ- その
binサブフォルダ D:\WinPython\ffmpeg\bin、C:\ffmpeg\bin、C:\Program Files\ffmpeg\bin、C:\ProgramData\chocolatey\bin- PATH
3. 画面構成
┌──────────────────────────────────────────────────────────────┐
│ FrameEx Pro v2.2 / 動画フレーム抽出ツール FFmpeg 情報 │
├───────────────────────────────┬──────────────────────────────┤
│ ファイル名 / 動画情報 │ [抽出設定][バッチ処理] │
│ [動画を読み込む] │ [サムネイル][解析] │
│ │ │
│ プレビュー画像 │ (選択中のタブの内容) │
│ │ │
│ [先頭][-100][-10][-1][再生]... │ │
│ フレーム番号 / 時間表示 │ │
│ タイムライン(クリックで移動) │ │
│ シークスライダー │ │
│ 範囲指定 [IN][OUT][クリア] │ │
│ [前後比較] 速度[1x] 範囲: ... │ │
├───────────────────────────────┴──────────────────────────────┤
│ ログ([クリア][保存…] 自動スクロール) │
├──────────────────────────────────────────────────────────────┤
│ ステータスバー(左: 状態 / 中央: 進捗 / 右: 件数など) │
└──────────────────────────────────────────────────────────────┘
左右の境界、上下の境界はドラッグで広さを変えられます。
4. 基本ワークフロー
A. 画像を書き出す
- 動画を読み込む を押す(またはバッチ一覧へドロップ)
- 必要なら IN / OUT で範囲を決める
- 右側「抽出設定」タブで モード・形式・出力先・ファイル名 を決める
- この動画を抽出 を押す
- 進捗は下部ステータスバーとログで確認
B. 複数動画をまとめて処理する
- 「バッチ処理」タブで 動画追加 / フォルダ追加(ドラッグ&ドロップも可)
- 「抽出設定」タブで設定を整える(全ジョブ共通)
- キュー実行 → 上から順に処理、停止 で中断
C. 範囲を動画として書き出す
- 動画を読み込み、IN / OUT で範囲を指定
- 「解析」→「動画出力」タブで 形式(MP4 / GIF / APNG / WebP)と 範囲 を選ぶ
- 必要ならサイズ %・FPS・品質・ループを調整
- 動画を出力
D. カットごとに分割する
- 「解析」→「シーン検出」で シーン検出 を実行
- 感度・短いシーンの扱いを調整して 適用
- シーン分割 (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) |
| FPS | GIF / 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 | 再生 / 一時停止 |
I | IN(開始フレーム)を現在位置に |
O | OUT(終了フレーム)を現在位置に |
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 libx264 | H.264 でエンコード |
-preset medium | 速度と圧縮率のバランス(ultrafast〜veryslow) |
-crf 20 | 画質(0〜51、小さいほど高画質・大きいほど軽い。18〜23 が目安) |
-pix_fmt yuv420p | 互換性の高い色形式(Windows のプレイヤーで再生できる) |
-movflags +faststart | Web で先頭から再生しやすくする |
アニメーション 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=15 | 15 コマ/秒に変換 |
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 | 使えるものを自動選択(既定) |
cuda | NVIDIA |
qsv | Intel(Quick Sync) |
d3d11va / dxva2 | Windows 標準 |
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 フレーム) |
| CRF | H.264 の画質指定。小さいほど高画質・大容量 |
| パレット | GIF で使える 256 色の組 |









ディスカッション
コメント一覧
まだ、コメントがありません