FFmpegで動画をキャプチャしたりスライドショーを作ったりする

まえがき

前回 WebM作りました。
サムネイルやスライドショーはある点において便利だよね。

参考: FFmpeg WikiのImages / Frames

キャプチャ (動画から画像へ)

指定箇所をキャプチャ

$ ffmpeg -ss hh:mm:ss.xxx -i src.webm -vframes 1 capture.jpg

hh:mm:ss.xxxでキャプチャ時間を指定する。
-vframes 1で1フレームのみを出力する。

一定の間隔でキャプチャ

$ ffmpeg -i src.webm -vf fps=fps=1 capture%05d.jpg

fps=fps=1でフレームレート(間隔)を指定する。1秒間隔なら1、10秒なら1/10となる。
画像は連番で出力されるため、その形式を指定する。上記の例では0埋め5桁の整数で連番がつく。

キャプチャを格子状に並べた画像で出力する

$ ffmpeg -i src.webm -vf fps=fps=1/10,scale=320:240,tile=4x8 capture.jpg

tile=4x8で横4 縦8 の格子状にキャプチャが並べられた画像を出力する。キャプチャが足りない分は黒埋め。多い場合は連番出力が必要。
scale=320:240でキャプチャの解像度を指定する。指定しなければ元画像と同じ。タイル数並べた分の画像サイズで出力されるので縮小した方が良い。

スライドショー (画像から動画へ)

$ ffmpeg -framerate 30 -i capture%03d.jpg -pix_fmt yuv420p output.webm

-framerateでフレームレート(間隔)を指定する。入力ファイル数 / フレームレート秒の動画ができる。
入力ファイルは連番形式であること。ただし-start_numberで開始番号を指定できる。
-pix_fmt yuv420p で色空間をyuv420pに指定。h.264とかにする場合はこれしておいた方が良いので、とりあえず統一しておく。


See also