web-dev-qa-db-ja.com

動画を画像に変換する方法

ビデオファイルを一連の画像、たとえばN秒ごとに1フレームに変換する方法を教えてください。 mplayerまたはffmpegでこれを実行できますか? MPlayerを使ってスクリーンショットを手動で取得しましたが、長いビデオの場合はこれを自動化したいと思います。

68
Liam
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
27
Liam

Ffmpegを使えば非常にシンプルで、can N秒ごとに1フレームを出力しますwithout追加のスクリプト。画像シーケンスとしてエクスポートするには、出力としてmyimage_%04d.pngなどを使用します。 %0xdビットは、ゼロが埋め込まれたx桁の整数に変換されます。例では、myimage_0000.png myimage_0001.pngなどとして出力されます。多くの静止画像形式、png、 jpeg、tga、何でも(完全なリストについてはffmpeg -formatsを参照)。

わかりましたので、イメージシーケンスとしてエクスポートするには、イメージ形式を連続したファイル名の出力として使用できますが、すべてのフレームをエクスポートする必要はありません。したがって、-r nオプションを使用して、出力のフレームレートを必要なものに変更するだけです。ここで、nは1秒あたりのフレーム数です。 1秒あたり1フレームは-r 1、4秒ごとに1フレームは-r 0.25、10秒ごとに1フレームは-r 0.1などとなります。

まとめると、4秒ごとにinput.movの1フレームをoutput_0000.png、output_0001.pngなど:

ffmpeg -i input.mov -r 0.25 output_%04d.png

%xdを必要な桁数に変更します(例:コマンドが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

スクリプトで%を1つだけ使用しないでください。また、コマンドラインで%%を使用しないでください。どちらの状況でもエラーが生成されます。

69
stib

ffmpeg を使うと、次のことができます。

ffmpeg -ss 4 -i input.avi -s 320x240 -frames:v 1 output.jpg

このコマンドは、ビデオの4秒後に320×240サイズのJPGサムネイルを生成します。時間とファイル名を変更するスクリプトにこれを入れれば完了です。

詳細情報: 動画のX秒ごとにサムネイル画像を作成する

11
Nifle

一種のcontact sheetの後で、UnixライクなOSで作業している場合は、この手の込んだスクリプトを使用することができます。 Video Contact Sheet * NIX、short vcs

バックグラウンドではffmpeg(デフォルト)またはmplayerも使用しているため、多くのビデオフォーマットを処理できます。それは映画から静止画像をキャプチャして、いくつかのヘッダとフッタを持つ画像にそれらを合成するプロセスを自動化します。あなたは選ぶことができます。何個のキャプチャが必要か、あるいはそれらの間の時間差。

10分間隔では、呼び出しは次のようになります。

vcs -i 10m input.avi

他の調整については、 コマンドラインオプションの全リスト を確認してください。

これがコンタクトシートの一例です ホームページから

enter image description here

8
mpy

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

VirtualDub はあなたのためにこれをすることができます

File - > Export - > Image sequence

enter image description here

2
Shevek

あなたもこれを試すことができます

vLCコマンドラインから...

vlc "C:\あなたの\ファイル\パス\ file.avi" -V image --image-out-prefix = capname --image-out-ratio = 60

file.aviはキャプチャ元のビデオ、capnameは保存された画像のプレフィックス、比率を付けて再生することをお勧めします(60は60のうち1つの画像がキャプチャされていることを意味します)。 --image-out-format jpegでは、キャップをpngではなくjpegsとして保存します。 - snapshot-pathを使用すると、キャップを保存する場所を選択できます。

上記の出典

1
Nifle

VirtualDubではフレームをスキップできます。ビデオ - >フレームレートメニューにある "Decimate By"オプションを使うだけです。例えば、 "Decimate By 100"を設定した後、[ファイル] - > [エクスポート] - > [イメージシーケンス]を使用すると、100フレームごとに保存されます。

1
Alex