• ベストアンサー

動画から画像を抽出

ubuntu機でaviファイル(1つのファイルは7秒程度でそのファイルが450個程ある)から1秒ごとに画像を抽出しなければいけません。 aviファイルの数が膨大なのでGUIを使ったやりかたではなくて、できればシェルスクリプトを組んで一気にやりたいのですが、動画ファイルと画像抽出時刻をしていすれば画像が出力される様なシェルコマンドはありませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • vaidurya
  • ベストアンサー率45% (2714/5983)
回答No.1

動画に関することは、だいたいまずffmpegでできないか? そこから考えていいんじゃないかと思っています(笑) "ffmpeg 静止画 秒"でググったりして1分とかからず ffmpegでそれができることの検証までできました。 そのくらい簡単に見つかる情報なので… 個人のブログのURLとか貼り付けるのは控えておきます。 ちなみに、切り出した書式はこんな感じ。それぞれオプションの意味はググるとわかると思います。 私自身、説明するほど、正確に詳しく把握しているわけでも無いですし。 ffmpeg -i test.avi -vframes 1 -ss 280 -f mjpeg test.jpg サムネイルを作り出すんだったら、サイズ指定を入れたほうがいいです。 もちろん、秒ごとに複数連続的に書き出すのであれば シェルスクリプトでforなどを使って、ffmpegを繰り返し呼び出す。 ただ、実はシークに時間がかかるみたいで 1コア2GHzで、XviD動画から600秒目のコマを書き出すのに 26秒ほどかかってしまいました。 ソースが7秒の動画であれば そのリスクは小さく済みますけど… 専用化されたツールがあるとしたら、そのほうが効率的なはずだと思います。 長い映像を1秒ごとに切り出す必要がある場合は、たぶん 一旦1fpsの動画に変換して、その一時ファイルから切り出すと シークによるロスが改善されるんじゃないかと思います。 1fpsの無圧縮動画として書き出せば、CPU負荷はそう大きくはありません。

Falcon2
質問者

お礼

回答ありがとうございます. 教えていただいた通り ffmpeg -i test.avi -vframes 1 -ss 280 -f mjpeg test.jpg を実行したら動画から静止画を抽出することに成功しました. 後はforで回すだけなのでなんとかなると思います. ffmpegと言うツールは,結構いろんなところで使われているのですね.勉強になりました. 本当に回答ありがとうございました.