理科系の勉強日記

Linux/Ubuntu/Mac/Emacs/Computer vision/Robotics

ffmpegで連番画像を動画に変換,動画を連番画像に変換

ffmpegを使えば,連番画像から簡単に動画を作ることができる.逆に,動画から連番画像をつくることもできる.
ffmpegはよく使っていたにもかかわらず,自分はこの事実を知らなかった.お陰で上記の変換をするプログラムをOpenCVで自作していた...

ffmpeg -r 15 -i img_%04d.png -b 5000000 -r 15 output.avi

img_XXXX.pngという連番画像を15fpsで動画にしますというコマンドである.-bは画質に関わる.
ここで-rのオプションが2つあることに注目.
手前を-r 5として後半を-r 15とすると,1秒間に15フレームの動画だが画像は5枚しか更新されない動画が完成する.
つまり15フレームのうち3フレームずつ同じ画像が含まれることになる.(多分そんな感じ)

一方動画から連番画像を出力する場合は

ffmpeg -i "input.avi" -f image2 -vcodec png "./img_%04d.png"

とすることでimg_XXXX.pngが得られる.飛び飛びの画像を保存したい場合は30fpsの動画に対して

ffmpeg -i "input.avi" -f image2 -vcodec png  -r 15 "./img_%04d.png"

とかにすれば1個飛ばしができた気がする.jpegの場合は-vcodec pngを-vcodec mjpegに変えればいいのだが,劣化が激しいので別にオプションをつけて

ffmpeg -i "input.avi" -f image2 -vcodec mjpeg -qscale 1 -qmin 1 -qmax 1 "img_%04d.jpg"

とすれば良いようだ.