N秒ごとの動画の1フレームを画像に抽出する方法は?
どのようにビデオファイルを一連の画像、例えばN秒ごとの1フレームに変換することができます。mplayer や ffmpeg はこれを行うことができますか?私は手動でスクリーンショットを取得するためにMPlayerを使用していますが、私は長いビデオのためにこれを自動化したいと思います。
ffmpegを使うと非常にシンプルで、追加のスクリプトを使わなくても、1フレームをN秒ごとに出力することができます。イメージシーケンスとしてエクスポートするには、出力として myimage_%04d.png
などを使用します。%0xd
ビットは、x
桁の長さのゼロパッド整数 myimage_0000.png
に変換されます - 私の例では、
myimage_0001.png
, myimage_0002.png
, ffmpeg -formats
というように出力されます。
**これでムービーを画像のシーケンスとしてエクスポートする方法がわかったけど、1フレームごとにエクスポートしたくないとしましょう。1秒に1フレームの場合は-r n
、4秒に1フレームの場合はn
、10秒に1フレームの場合は-r 1
となります。
4秒に1フレームの-r 0.25
を-r 0.1
、input.mov
などに保存すると、以下のようになります。これを入力の前に指定した場合、入力ファイルは指定されたフレームレートを持っているかのように扱われます。
%xd を必要な数の数字に変更してください。これは画像シーケンスの入力ファイルでも動作します。詳しくは ここをクリック .
Windowsユーザー . コマンドラインではoutput_0000.png
例: output_0001.png
CMDおよびBATスクリプトでは-r 0.25
例: -i input.mov
従って、スクリプトでは2倍の%04d
を、対話型コマンドラインでは1倍の%05d
を使用してください。どちらの状況でも間違った使い方をするとエラーが発生します。
mplayer -vo jpeg -sstep 5 file.avi
は5秒ごとにフレームをjpegファイルとして保存します。
ただし、ファイルの最後で停止するのではなく、最後のフレームのコピーを生成し続けます。これを回避するには、他のプレイヤーを使用するか、mplayerを使用して、ビデオの持続時間を秒単位で見つけてください。
mplayer -vo null -ao null -frames 0 -identify file.avi
で、"ID_LENGTH=147.00 “のような行を探します。
長さから2を引いて、この値を-endpos
オプションに使用します。例えば、147秒の動画の場合
mplayer -vo jpeg -sstep 5 -endpos 145 file.avi
ffmpeg
](http://ffmpeg.org/) を使うと、以下のようになります。
ffmpeg -ss 4 -i input.avi -s 320x240 -frames:v 1 output.jpg
このコマンドは、動画の4秒目に320×240サイズのJPGサムネイルを生成します。これを時間とファイル名を変更するスクリプトに入れれば完成です。
詳細情報。動画のX秒ごとにサムネイル画像を作成 ] (http://trac.ffmpeg.org/wiki/Create%20a%20thumbnail%20image%20every%20X%20seconds%20of%20the%20video)
もしあなたがコンタクトシートのようなものを探していて、UnixライクなOSで作業しているのであれば、この精巧なスクリプトを使うことができます。
バックグラウンドでは、ffmpeg
(デフォルトでは) または mplayer
を使用するので、多くのビデオフォーマットを扱うことができます。これは、ムービーから静止画をキャプチャし、それらをヘッダーとフッター付きの画像に合成するプロセスを自動化します。例えば、何枚のキャプチャを行うか、あるいはそれらの間の時間差を選択することができます。
10 分間のインターバルでは、呼び出しはこのようになります。
vcs -i 10m input.avi
その他の調整については コマンドラインオプションの完全なリスト をチェックしてください。
VLC 2.0.3をインストールしたばかりのWindows 8でテストして確認しました(追加のビデオプラグインやソフトウェアは使用していません)。
完全なドキュメント。 http://wiki.videolan.org/How_to_create_thumbnails