
みなさんこんにちは、ガノー(Ganohr)です。
動画キャプチャ用のコマンドラインツールを開発しましたので公開します。
更新履歴
・ダウンロードマネージャーを変更
・7zファイルを公開
・x86/x64版を公開
2019/07/01 ver0.0.1 公開
目次
- 1.開発経緯
- 2.ダウンロード
- 3.動作環境
- 4.使い方
- 4.1.ヘルプの表示
- 4.2.基本的な使い方
- 4.3.指定例
- 5.オプション - 画像サイズや出力形式の設定
- 5.1.指定例
- 5.2.詳細
- 6.オプション - キャプチャ範囲・間隔
- 6.1.フレーム番号による指定
- 6.1.1.指定例1
- 6.1.2.指定例2
- 6.1.3.指定例3
- 6.1.4.詳細
- 6.2.ミリ秒による指定
- 6.2.1.指定例1
- 6.2.2.指定例2
- 6.2.3.指定例3
- 6.2.4.詳細
- 6.3.分と秒による指定
- 6.3.1.指定例1
- 6.3.2.指定例2
- 6.3.3.指定例3
- 6.3.4.詳細
- 6.4.比率による指定
- 6.4.1.指定例1
- 6.4.2.指定例2
- 6.4.3.指定例3
- 6.4.4.指定例4
- 6.4.5.詳細
- 7.指定の混在
- 8.最後に
開発経緯
動画編集を行っている際に、目的のシーンをタイムラインから探せなくて、結局動画を何十分も再生するはめになった経験はありませんか。
私はあります。
そこで、動画から指定時間毎に画像を出力させて、その一覧から目的のシーンを探せるような補助ツールを作りました。
エクスプローラーの一覧表示と、ファイル名に設定されたフレーム番号や再生時間の情報から、目的のシーンを一発で探せます。

ダウンロード
ライセンス情報
利用規約
以下に該当する行為を禁止します。
- 無断改変
- リバースエンジニアリング
- 添付ファイルの改造・変更
- 法律に違反する用途での使用
- 公序良俗に違反する用途での使用
本プログラム、及び使用ライブラリの不具合による一切の損害を保証しません。
自己責任のもとご利用ください。
動作環境
- Windows 10以上推奨(Windows 7 SP1 以降必須)
- .Net Framework 4.6.1 以降必須
使い方
コマンドラインツールですので、コマンドプロンプトで使用します。
ヘルプの表示
MovieToImage MovieToImage -h MovieToImage /h MovieToImage /? MovieToImage --help
のいづれかで画面に使い方を出力させられます。
引数の指定が間違っている際にも、どの引数が間違っているのかを含めメッセ時を表示するので、使いやすいはずです。
基本的な使い方
MovieToImage 必須動画ファイルパス 必須出力パス オプション
- 動画ファイルパス:処理する動画を指定。存在しないファイルの場合エラーが発生する。
- 出力ファイルパス:保存先ディレクトリや、ファイル名の先頭を含めて指定する。
- オプション(省略可能)
指定例
MovieToImage d:\test.mp4 d:\temp\img\
「d:\test.mp4」を開いて、「d:\temp\img\」の中に画像のキャプチャを格納させます。
オプションを指定しない場合、以下のような処理になります。
- pngファイルとして出力
- 動画全体を処理
- キャプチャ間隔は3.3%毎
- 画像のサイズは動画の大きさと同じ
初期設定では、動画の長さに関係なく32~33枚程度の画像を出力します。
もっと細かく出力させたい場合などは、オプションを指定します。
オプション - 画像サイズや出力形式の設定
-ft
ファイルの種類 : (default)png/bmp/jpeg/tiff/gif/ico/wmf-width
value : 横幅-height
value : 縦幅-one
: 1フレームのみ保存
指定例
MovieToImage d:\test.mp4 d:\temp\img\ -height -600 -ft gif
上下を反転し、高さを600ピクセルに指定します。
横幅は動画のアスペクト比を維持するよう、自動決定されます。
また、gif形式として出力します。
詳細
-ft
でファイルの種類を指定できます。未指定の場合‘png’形式になります。
なお、‘jpeg’は複数の拡張子が有り、「jpe」や「jpeg」という指定も可能です。
指定された拡張子を尊重してファイル出力します。
-width
や-height
を用いて、横幅や縦幅をピクセルで指定できます。
幅を片方だけ指定した場合、もう一方の幅をアスペクト比に応じて自動決定させることも可能です。
両方の幅を指定すれば、指定したサイズの通り出力されます。
加えて、幅にマイナスの値を設定すると、画像を反転させます。
また、-one
を指定すると、1フレームのみ固定で出力します。
次に解説する「キャプチャ範囲・間隔を指定するオプション」よりも優先されます。
オプション - キャプチャ範囲・間隔
キャプチャ範囲や間隔を、オプションで詳細に指定できます。
指定方法は以下の4種類があります。
- フレーム番号:動画の再生位置をフレーム番号で指定
- 時間指定(ミリ秒):動画の再生位置をミリ秒
- 時間指定(分・秒):動画の再生位置を整数部で分を、小数部で秒指定
- 比率指定:動画の再生位置を動画全体を1.0とした比率で指定
フレーム番号による指定
-sf
value : 開始フレーム(初期値:0)-ef
value : 終了フレーム(初期値:動画全体)-lf
value : フレーム長-kf
value : キャプチャ間隔
指定例1
MovieToImage d:\test.mp4 d:\temp\img\ -sf 3000
動画の3000フレーム目から、最終フレームまでをキャプチャします。
キャプチャ間隔が未指定のため、100フレーム毎にキャプチャが実行されます。
指定例2
MovieToImage d:\test.mp4 d:\temp\img\ -sf 3000 -lf 300 -kf 1
動画の3000フレーム目から、300フレーム分全てをキャプチャします。
指定例3
MovieToImage d:\test.mp4 d:\temp\img\ -ef 3000
動画の先頭から3000フレーム目までを、100フレーム毎にキャプチャします。
詳細
‘フレーム番号’とは、動画を構成する1枚1枚の画像(フレーム)の通し番号のことです。
多くの動画編集・再生ソフトが対応する指定方式です。
動画をキャプチャする範囲を、フレーム番号で指定します。
開始フレームと終了フレームによる指定はもちろん、開始フレームとフレーム長による指定もできます。
ただし、終了フレームとフレーム長が同時に指定されている場合、あとから指定された定義が優先されます。
ミリ秒による指定
-st
value : 開始時間-et
value : 終了時間-lt
value : 時間長-kt
value : キャプチャ間隔時間
指定例1
MovieToImage d:\test.mp4 d:\temp\img\ -st 34567
動画の34秒567ミリ秒から、キャプチャを行います。
キャプチャ間隔は未指定の場合10秒おきになります。
指定例2
MovieToImage d:\test.mp4 d:\temp\img\ -st 34567 -lt 123456 -kt 789
動画の34秒567ミリ秒から、123秒456ミリ秒間の範囲を、789ミリ秒間隔でキャプチャします。
指定例3
MovieToImage d:\test.mp4 d:\temp\img\ -et 100000
動画の先頭から100秒間を、10秒毎にキャプチャします。
詳細
‘ミリ秒’とは、1秒を1000分割した単位です。
1秒が1000ミリ秒と同じであり、多くの動画編集ソフトで使える時間体系です。
フレーム数よりは人間がわかりやすい指定になっています。
実際に指定する際は、秒数を1000倍した値を指定します。
分と秒による指定
-smst
value : 開始位置-emst
value : 終了位置-lmst
value : 時間長-kmst
value : キャプチャ間隔
指定例1
MovieToImage d:\test.mp4 d:\temp\img\ -smst 1.30
動画の1分30秒から、キャプチャを行います。
キャプチャ間隔は未指定の場合10秒おきになります。
指定例2
MovieToImage d:\test.mp4 d:\temp\img\ -smst 11 -lmst 3.03 -kmst 0.3
動画の11分目から、3分3秒間の範囲を、30秒間隔でキャプチャします。
指定例3
MovieToImage d:\test.mp4 d:\temp\img\ -emst 5.5
動画の先頭から5分50秒間を、10秒毎にキャプチャします。
詳細
数値の整数部で分を、小数部で秒を表した形式でキャプチャ範囲や間隔を指定できます。
小数点をつけなければ単純に分を指定したものとみなされます。小数点をつけたその後ろで秒を指定します。
この時、「0.1」は「1秒ではなくて10秒」です。また、1分30秒は「1.5」ではなくて、「1.30」と指定します。
慣れれば、一番簡単に指定できる方式です。
比率による指定
-sr
value : 開始位置比率-er
value : 終了位置比率-lr
value : 時間長-kr
value : キャプチャ間隔比率
指定例1
MovieToImage d:\test.mp4 d:\temp\img\ -sr 0.5
動画を2頭分した位置の、後半部分を処理します。
キャプチャ間隔は未指定の場合、0.033(約3.3%)単位で行います。
指定例2
MovieToImage d:\test.mp4 d:\temp\img\ -sr 0.3 -lr 0.5 -kr 0.1
動画の30%箇所から、動画の50%の長さに対して、10%単位でキャプチャします。
指定例3
MovieToImage d:\test.mp4 d:\temp\img\ -er 0.5
動画の先頭から中央までを、3.3%毎にキャプチャします。
指定例4
MovieToImage d:\test.mp4 d:\temp\img\ -kr 1
動画の先頭と終了フレームをキャプチャします。
詳細
動画の長さを1とした比率でキャプチャ範囲を指定します。
動画をざっくり把握するために、便利です。
指定の混在
MovieToImage.exe 動画ファイル 出力パス -sr 0.5 -kmst 1.30
動画の半分から最後までを1分30秒毎にキャプチャします。
このように、複数の指定方式を混在させて使用できます。
ただし、複数の開始位置や終了位置などを同時に指定することはできません。
内部的には、全てフレーム番号に変換して処理しています。
そのため、時間指定の場合、微妙にずれていくことがありますが、これは正常な動作です。
そもそも動画のFPSなどの関係で、フレーム番号や時間は誤差が発生するものだからです。
最後に
本ツールは動画編集ソフトの補助ツールとして便利でしょう。
画像サイズを横幅100px程度にし、初期値の比率で出力しエクスプローラーの一覧表示で縮小表示させると便利です。
処理時間も必要最小限の編集しかしていないため、比較的高速に処理できます。
1時間近い動画でもさっと内容を一覧で確認できます。
AviUtlなどのフリーの編集ソフトを使っている方には、便利なソフトではないでしょうか。
希望や要望、感想などは本記事のコメント欄にお願いします。
改善要望やバグフィクスなどは確約できませんが、必要に応じて対応できる点は対応していこうと思います。
コメントを書く