VLCパッケージが提供するcvlcコマンドを用いて動画から画像を作成する手順を記載します。
Table of Contents
1 VLCのインストール
Ubuntu 16.04の場合は以下の通りです。
$ sudo apt install -y vlc
2 cvlc
CUI操作向けのcvlcコマンドを用います。以下は動画の先頭から末尾まで64フレーム毎に画像を作成します。
$ mkdir png $ cvlc a.mp4 \ --rate=1 \ --start-time=0 \ --scene-ratio=64 \ --scene-prefix=b_ \ --scene-path=png \ --scene-format=png \ --video-filter=scene \ --vout=dummy \ --no-audio \ vlc://quit
- –rateは再生スピードです。この値を小さくすることで動画のデコードが正確になります。大きい場合はイメージにブロックノイズが発生する場合があります。ただし、小さくすることで再生速度は落ちます。
- –start-timeは開始時刻(秒数)です。–stop-timeは停止時刻(秒数)です。開始時刻と停止時刻の差分である–run-timeもあります。–stop-timeを指定しない場合は動画末尾まで実行されます。
- –scene-ratioは画像を作成するフレームのインターバルです。
- –scene-prefixはイメージ名のプレフィックスです。
- –scene-pathはイメージを保存するディレクトリです。
2.1 特定時刻で一枚だけ画像を作る
–scene-ratioを1秒間のフレーム数より大きい値にし(ここでは最大値の–scene-ratio=2147483647にしています)、–start-timeと–stop-timeの差を1秒にします。ここでは–run-timeを使用しています。
ただし、Ubuntu 16.04のVLC 2.2.2だと一枚目の画像は–start-timeが反映されない不具合があるようで(常に1フレーム目の画像になる)、1秒間で2枚の画像が作成される値に設定し(1秒間のフレーム数より小さく、1秒間のフレーム数の半分以上)、1枚目を破棄する必要があります。VLC 3.0.0では問題ありません。
$ cvlc a.mp4 \ --scene-ratio=2147483647 \ --start-time=100 \ --run-time=1 \ --scene-prefix=oneshot_ \ --scene-path=. \ --scene-format=png \ --rate=1 \ --video-filter=scene \ --vout=dummy \ --no-audio \ vlc://quit