2010-04-27 10:05:36 +0000 2010-04-27 10:05:36 +0000
72
72
Advertisement

N秒ごとの動画の1フレームを画像に抽出する方法は?

Advertisement

どのようにビデオファイルを一連の画像、例えばN秒ごとの1フレームに変換することができます。mplayer や ffmpeg はこれを行うことができますか?私は手動でスクリーンショットを取得するためにMPlayerを使用していますが、私は長いビデオのためにこれを自動化したいと思います。

Advertisement
Advertisement

回答 (8)

73
73
73
2014-03-15 09:47:20 +0000

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.1input.movなどに保存すると、以下のようになります。これを入力の前に指定した場合、入力ファイルは指定されたフレームレートを持っているかのように扱われます。

%xd を必要な数の数字に変更してください。これは画像シーケンスの入力ファイルでも動作します。詳しくは ここをクリック .

Windowsユーザー . コマンドラインではoutput_0000.png

例: output_0001.png

CMDおよびBATスクリプトでは-r 0.25

例: -i input.mov

従って、スクリプトでは2倍の%04dを、対話型コマンドラインでは1倍の%05dを使用してください。どちらの状況でも間違った使い方をするとエラーが発生します。

28
28
28
2010-04-28 10:08:07 +0000
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
11
Advertisement
11
11
2010-04-27 11:41:07 +0000
Advertisement

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)

8
8
8
2013-06-04 08:15:55 +0000

もしあなたがコンタクトシートのようなものを探していて、UnixライクなOSで作業しているのであれば、この精巧なスクリプトを使うことができます。

バックグラウンドでは、ffmpeg (デフォルトでは) または mplayer を使用するので、多くのビデオフォーマットを扱うことができます。これは、ムービーから静止画をキャプチャし、それらをヘッダーとフッター付きの画像に合成するプロセスを自動化します。例えば、何枚のキャプチャを行うか、あるいはそれらの間の時間差を選択することができます。

10 分間のインターバルでは、呼び出しはこのようになります。

vcs -i 10m input.avi

その他の調整については コマンドラインオプションの完全なリスト をチェックしてください。

7
Advertisement
7
7
2012-09-11 03:17:14 +0000
Advertisement

VLC 2.0.3をインストールしたばかりのWindows 8でテストして確認しました(追加のビデオプラグインやソフトウェアは使用していません)。

完全なドキュメント。 http://wiki.videolan.org/How_to_create_thumbnails

2
2
2
2010-04-27 10:13:07 +0000

VirtualDub can do this for you

File -> Export - -> Image sequence

1
Advertisement
1
1
2010-04-27 16:22:46 +0000
Advertisement

VLCのコマンドラインから、この

を試してみるのもいいかもしれません。

vlc “C:\YOUR\file\path\file.avi” -V image –image-out-prefix=capname –image-out-ratio=60

file. aviはキャプチャしたい動画、capnameは保存された画像のプレフィックス、比率を調整してみてはいかがでしょうか(60は60枚の画像のうち1枚がキャプチャされることを意味します)。 上記のソース

1
1
1
2011-11-30 22:06:24 +0000

VirtualDubではフレームを飛ばすことができます。Video -> Frame RateメニューのDecimate Byオプションを使用します。例えば、「Decimate By 100」を設定して、File -> Export -> Image sequenceを使用すると、100フレーム目のフレームだけが保存されます。

Advertisement

関連する質問

8
12
3
5
3
Advertisement