FFmpegを使ってFLV形式にエンコードする際に気をつけること
http://ffmpeg.mplayerhq.hu/ をlinux環境にインストールして、
色々な形式の動画ファイルをFLVにエンコードしているんだけど、
いくつか気をつけるべき点が見えてきた。
- FLVエンコード後なぜかDurationが変動する
-ss や -t でDurationをいじっている分けでもないのに、Durationが増えたり減ったりする事がしょっちゅうある。
殆どは微々たる値なのだが、(+0.1secとか) FlowPlayerとかでこれを再生するときに困った現象が発生した。
たとえば元動画ファイルのDurationが00:00:12.9とし、このファイルをFLVにエンコード後+0.1secになったとすると、Duration値は00:00:13.0になる。
この値がメタ情報に記録され、FlowPlayer(Flash側)は存在しない13秒目のデータを取得しようとし、不具合が発生した。
で結局変換する際に元動画ファイルのDuration値を取得し、コンマ秒以下は0にしてエンコードする事にした。
$ ffmpeg -i <from.avi> -ss 0 -t 00:00:12.0 -ar 44100 -r 12 -s 640x480 <output.flv>
※ -s でサイズを指定する場合、2の倍数にしないとエラーでます。orz