ffmpegで動画からアニメーションGIFを作る

改めて言うのも何だけどffmpegは凄いね。大抵の形式を変換できるけど、まさかアニメーションGIFまで作れるとは知らなかった。しかし、ffmpegの開発が内部的に揉めてて分裂したりしたそうだけど大丈夫なんかね。無くならないことを切に願うばかり。今のところは開発は止まってないみたいなので一安心という所か。
基本的なコマンドライン
以下のコマンドで変換できる。input.mp4が元となる動画ファイル。もちろんmp4でなくても大概の動画は使える。output.gifが出力されるアニメーションGIFのファイル名。-rはフレームレートなので10じゃカクカクしすぎという場合は-r 15とか増やす。出来上がるファイルサイズとのトレードオフで。個人的にはせいぜい15くらいまでじゃないかと思う。それ以上になってもファイルサイズの増加と滑らかさが見合わなくなってくる感じがする。
ffmpeg -i input.mp4 -r 10 -f gif output.gif
コマンド打つのめんどくさいよと言う向きには、こんなバッチファイルを作っておけば、そのバッチファイルに動画ファイルをドラッグ&ドロップすれば変換できる。ffmpegの部分は環境に合わせてパス指定を追加の事。
ffmpeg -i %1 -r 10 -f gif "%~dpn1.gif"
その他オプション
出力するGIFの解像度を縮小したい時は-vf scaleオプションを使う。例えば変換元の動画ファイルの解像度を半分に縮小したいときはこんな感じ。
ffmpeg -i input.mp4 -r 10 -vf scale=iw/2:ih/2 -f gif output.gif
さらに必要のない部分を除外する場合は-vf cropオプションでクロッピングも出来る。例えば、変換元の動画が400x300のサイズで、それを左上を起点とする座標のX=30, Y=20から370x280のサイズで切り取りたい場合は下のように指定する。この辺のオプションはアニメーションGIFを作る時だけじゃなくて、動画の形式を変換する時にも使える。
ffmpeg -i input.mp4 -r 10 -vf crop=370:280:30:20 -f gif output.gif
ffmpeg-crop
-vf crop=width:height:left:topって感じ。グレーの部分が変換元となる動画ファイルで、白の部分が作成したいアニメーションGIFのサイズ。