Linux: cvlcで動画から画像を作成する

VLCパッケージが提供するcvlcコマンドを用いて動画から画像を作成する手順を記載します。

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はイメージを保存するディレクトリです。

0001_cvlc-create-image.png

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