どのようにビデオファイルを一連の画像、例えばN秒ごとの1フレームに変換することができます。mplayer や ffmpeg はこれを行うことができますか?私は手動でスクリーンショットを取得するためにMPlayerを使用していますが、私は長いビデオのためにこれを自動化したいと思います
77 Liam 2010-04-27
ffmpegを使うと非常にシンプルで、余計なスクリプトを入れなくてもN秒に1フレームを出力することができます。画像シーケンスとして出力するには、出力として myimage_%04d.png
などを使用するだけです。%0xd
ビットはゼロパッドの整数 x
桁の長さに変換されます
myimage_0000.png
,myimage_0001.png
,myimage_0002.png
etc..
png, jpeg, tga などの静止画フォーマットが使えます (完全なリストは ffmpeg -formats
を参照してください)
さて、これでムービーを画像のシーケンスとしてエクスポートする方法はわかりましたが、すべてのフレームをエクスポートしたくない場合はどうすればいいでしょうか?
トリックは、-r n
オプションを使って、出力のフレームレートを好きなように変更することです。1秒に1フレームの場合は-r 1
、4秒に1フレームの場合は-r 0.25
、10秒に1フレームの場合は-r 0.1
などとなります
そこで、まとめると、input.mov
の1フレームを4秒ごとにoutput_0000.png
, output_0001.png
などに保存するとこんな感じになります
ffmpeg -i input.mov -r 0.25 output_%04d.png
-r 0.25
オプションは、出力のフレームレートを制御しているので、-i input.mov
の部分の後に来ることに注意してください。これを入力の前に置くと、入力ファイルは指定されたフレームレートを持っているかのように扱われます
例えば、コマンドで10,000以上のフレームを作成する場合は、%04d
を%05d
に変更します。これは画像シーケンスの入力ファイルでも動作します。続きを読む こちら
Windowsユーザー。コマンドラインでは%
を使用してください
のような例があります。ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png
CMDとBATスクリプトでは%%
を使用します
のような例があります。ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png
そのため、スクリプトでは %%
を二重にし、対話型コマンドラインでは %
を一重にします。どちらの状況でも間違えるとエラーが発生します
83 stib 2014-03-15
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
31 Liam 2010-04-28
ffmpeg
では、以下のようになります
ffmpeg -ss 4 -i input.avi -s 320x240 -frames:v 1 output.jpg
このコマンドは、動画の4秒目に320×240サイズのJPGサムネイルを生成します。これを時間とファイル名を変更するスクリプトに入れれば完成です
詳細はこちらをご覧ください。動画のX秒ごとにサムネイル画像を作成します
13 Nifle 2010-04-27
あなたがコンタクトシートの種類の後で、あなたがUnixのようなOSで作業している場合は、ビデオコンタクトシート*NIX、短いvcsと呼ばれるこの精巧なスクリプトを使用することができます
バックグラウンドでは、ffmpeg
(デフォルトでは) または mplayer
を使用するので、多くのビデオフォーマットを扱うことができます。これは、ムービーから静止画をキャプチャし、ヘッダーとフッター付きの画像に合成するプロセスを自動化します。キャプチャの数や時間差などを選択することができます
10分のインターバルでは、呼び出しはこんな感じです
vcs -i 10m input.avi
他にもいくつかの調整があるので、コマンドラインオプションの完全なリストをチェックしてください
ホームページからのお問い合わせシートの例です
8 mpy 2013-06-04
VLC 1.1.0以上では、シーンビデオフィルターを使用することができます
vlc C:\video\to\process.mp4 --rate=1 --video-filter=scene --vout=dummy --start-time=10 --stop-time=11 --scene-format=png --scene-ratio=24 --scene-prefix=snap --scene-path=C:\path\for\snapshots\ vlc://quit
上記では、00:00:10から始まり00:00:11で終わる24フレームのうち1フレームを保存しています(-scene-ratio=24)
ちょうどテストして、新しいWindows 8のインストールでVLC 2.0.3で動作することを確認しました(私は追加のビデオプラグインやソフトウェアを持っていません)
完全なドキュメント。http://wiki.videolan.org/How_to_create_thumbnails
7 Michael 2012-09-11
VirtualDubはこんなことができます
File
-> Export
-> Image sequence
2 Shevek 2010-04-27
こちらも試してみてはいかがでしょうか
VLCコマンドラインから
vlc “C:Your\\\pathfile\.avi” -V image –image-out-prefix=capname –image-out-ratio=60
file.aviはキャプチャしたい動画、capnameは保存された画像の接頭辞です
1 Nifle 2010-04-27
VirtualDubではフレームをスキップすることができます。Video -> Frame Rate メニューの Decimate By オプションを使用してください。例えば、”Decimate By 100 “を設定してからFile -> Export -> Image sequenceを使用すると、100フレーム目のフレームだけが保存されます
1 Alex 2011-11-30