ffmpeg静止画→動画作成苦戦しまくり

タイトルどおり、ffmpegを使って静止画から動画を作るのに苦戦しまくりました。

ffmpegは、静止画から動画を作ったり、動画の形式を変換したりとかできる便利なプログラム*1です。各種Linuxディストリビューションがサポートしている*2他、Windows等でも使えるようです。

で、静止画から動画を作る場合ですが、例えば snap0001.png, snap0002.png, ... という一連の静止画を out.mpg という動画にする場合、以下のようなコマンドを使います。

今の場合、ファイル名は四桁の数字で順番がつけられているので「%04d」を使いますが、数字の桁数に応じて二桁なら「%02d」とします。

但し、ここで注意すべきことがあります。

ファイル名の順番を表す数字は、必ず0001, 0002, 0003, ... のような「1から始まる連続的な数」でなければなりません。

例えば最初の数が「0134」のように中途半端な数から始まっていると、

snap%04d.png: I/O error occured
Usually that means that input file is truncated and/or corrupted.

というエラーを出して何もやってくれません*3。また、途中に抜けている番号があると、そこまでのコマの動画になってしまいます*4

また、桁数が一桁の場合にも対応していないようで、数字の部分を「%d」「%1d」「%01%」にすると、 1, 2, ..., 9, 10, 11, ..., 99, 100, 101, ... といった感じに番号が続く限り桁が増えていきます。


ffmpegで動画を作るには元画像のファイル名に以上のような制約があるので、不幸にして手元にあるファイル名が1から始まらない場合、ファイル名をつけ直さなければなりません。例えば手元にあるファイルが snap1207.png, snap1208.png, ..., snap1389.png の場合、私はとりあえずは

  • perl -e 'for(1207..1389){$if=sprintf "snap%04d.png",$_;$i=$_-1206;print `echo $if;cp $if c$i.png`}'

のようにして名前を変え、

として動画にすることにしています。他にもっとやりやすい方法があるかもしれません。


なお、以上のffmpegのバージョンは、debianの3:20071206-0.0、ubuntuの3:0.cvs20070307-5ubuntu4です。

*1:或いはソフト、或いはコマンド

*2:但し標準では入っていない場合が多い? 公式パッケージに含まれていないディストリビューションもあり?

*3:何というか、かなり不親切な気がしてしまう。

*4:これは使い方によっては便利かもしれない。