この記事では、連続撮影した静止画を動画に変換する方法について書く。状況としては、微速度撮影・タイムラプス撮影のように、カメラで写真を一定時間ごとに撮影したものを動画にしたい、というものを想定している。
ここで使うのはffmpegという、動画や音楽ファイルのフォーマットを変換するのに使われる無料のプログラムである。マウスで操作するようなGUIはついておらず、コマンドラインからコマンドを叩いて使う。ffmpegのインストール方法は割愛する。
この記事を書いている時点でのffmpegの最新版は2.2.1なので、ffmpeg 2.2.1の使い方について書く。おそらく、多少バージョンが違っても同じように使えるのではないかと思う。
まず、動画の各コマとなる静止画を用意する。適当にフォルダを作って、その中に使いたい画像をコピーする。静止画の形式はJPEGにしておく。ファイル名は連番になるようにする。
ターミナルを開き、先に画像ファイルを準備したフォルダに移動する。ffmpegコマンドの使い方はおおざっぱに言うと
ffmpeg [入力に関するオプション] -i (入力ファイル名) [出力に関するオプション] (出力ファイル名)
となる。以下、オプションの詳細について。
入力に関するオプション・入力ファイルの指定
-framerate (rate)
- 入力ファイルを動画とみなす場合の、フレームレートを指定する。
- 画像の場合25がデフォルト。つまり、1秒あたり25フレームということである。
- (rate) は、整数、小数、分数、または名前で指定できる。詳しくは公式のドキュメント(英語)を参照。
-s:v (size)
または-video_size (size)
- 各コマのサイズ。
- (size) は
(幅)x(高さ)
の形で指定する。あるいは、vga
やhd720
のような名前も使える。詳しくは公式のドキュメント(英語)を参照。 - 指定しなかった場合は最初の画像から適当に判断される。
-start_number (n)
- 入力ファイル名の連番を何番から始めるかを指定する。
-i (ファイル名)
- 入力ファイル名、もしくはファイル名のパターン。
- 入力ファイル名が
IMG_nnnn.JPG
という形をしていれば、パターンとしてはIMG_%04d.JPG
を指定する。 - 詳しいパターンの指定方法は公式のドキュメント(英語)を参照。
出力に関するオプション・出力ファイル名
-r:v (fps)
- 出力する動画のフレームレート(1秒あたりのフレーム数)を指定する。
- (rate) は、整数、小数、分数、または名前で指定できる。詳しくは公式のドキュメント(英語)を参照。
-s:v (size)
- 各コマのサイズ。
-b:v (bitrate)
- ビットレート。大きな数値を指定する方が高画質になる。bpsで指定する。
k
(103)やM
(106)などの接尾辞も使えるようだ。
-vcodec (codec)
または-codec:v (codec)
- 動画のコーデックを指定する。
mpeg4
やh264
など。利用できるコーデックはffmpeg -codecs
で確認できる。
- 動画のコーデックを指定する。
- (ファイル名)
- 出力ファイル名。ファイル形式は拡張子から適当に判断される。
オプションの一部は入力にも出力にも指定できる。入力と出力に異なるフレームレートを指定した場合、一部のコマが複製されたり取り除かれたりする。各コマのサイズは入力と出力どちらにも指定できるが、どちらに指定するとどう変わるのか筆者はよく分かっていない。
コマンドの実行例は、例えば
ffmpeg -framerate 24 -start_number 7836 -i 'IMG_%04d.JPG' -r:v 24 -b:v 10M -s:v 1080x720 -vcodec mpeg4 output.mov
となる。この場合、IMG_7836.JPG
から始まる連番のファイルが処理対象となり、出力ファイルは output.mov
となる。