連番画像からアニメーションGIFを作成

WebやTwitterの投稿用に連番画像からアニメーションGIFを作成する方法について調べてみた。

今回は、BlenderでFPSが30のOpneGLレンダリングの連番画像からアニメーションGIFを作成した。方法は色々あるが、GIMP、ImageMagick、FFMpegを使った作成方法について調べてみた。

次のアニメーションGIFはGIMPで作成したもの。

GIMPでの作成

GIMPで連番画像からアニメーションGIFを作る場合は、連番画像をレイヤーとして読み込み、GIF形式でエクスポートする。エクスポートのオプションでアニメーションとしてエクスポートにチェックを入れる。

各レイヤーのフレーム間で変化しない部分を透明にして、フレーム処理の設定を累積レイヤー(結合)にすると最適化されてファイルサイズが小さくなる。フィルター>アニメーション>GIF用最適化を実行すると各レイヤーを自動で処理してくれる。

ImageMagickでの作成

ImageMagickでアニメーションGIFを作成する場合はconvertもしくはmagickコマンドを使う。連番画像だけが存在するディレクトリで以下のコマンドを実行する。

convert -delay 3 *.png -layers optimize output.gif

-delayオプションはフレームの表示間隔を1/100秒単位で指定する。-layersオプションでoptimizeを指定すると最適化が行われてファイルサイズが小さくなる。

FFMpegでの作成

ffmpegコマンドでもアニメーションGIFが作成できる。FFMpegは動画ファイルを直接アニメーションGIFに変換することもできる。

最も単純な設定の場合、連番画像だけが存在するディレクトリ下で次のコマンドを実行する。

ffmpeg -pattern_type glob -i '*.png' -framerate 30 output.gif

‘*(glob)’を使って連番画像を読み込む場合は、-pattern_type globオプションをつける。フレームレートは-framerateオプションで設定する。FFMpegではアニメーションGIFの最適化が自動で行われるが、画質に関するオプション無しで変換を行うと、GIFに変換される際にディザリングにより画質が下がり、ファイルサイズもかなり大きくなる。ファイルサイズを抑えて画質を良くするには、入力の色情報をダウンサンプルするときに使うカラーパレットのパターンを用意する必要がある。これもFFMpegコマンドで以下のようにして生成できる。

ffmpeg -i 0001.png -vf palettegen palette.png

今回は、ソースに連番画像を使うので、インプットファイルに連番画像の1枚を指定しているが、動画をアニメーションGIFに変換する場合は、インプットファイルに動画ファイルを指定する。

カラーパレットが作成できたらカラーパレットを使ってアニメーションGIFを作成する。

ffmpeg -pattern_type glob -i 'img*.png' -framerate 30 -i palette.png -lavfi paletteuse output.gif

ここでは入力ファイルの設定が2つになり、連番画像とカラーパレットファイルを指定している。どちらも同じディレクトリに置く場合、連番ファイルの入力を’*.png’にすると、カラーパレットファイルも入力に使用されてしまい、コマンドが終了しなくなるので予め連番画像のファイル名の先頭に’img’を追加してある。

ちなみに連番画像のファイル名の一括変換はLinux環境の場合、renameコマンドが便利。renameコマンドはperlの正規表現を利用してファイル名のパターンを一括変換できる。次のコマンドはBlenderのOpenGLレンダリングの連番画像の一括変換の例。

rename -n 's/^0/img0/' *.png

それぞれの方法の比較

どの方法を使っても大体似たようなアニメーションGIFが作成できるが、ファイルサイズを比べると、テストに用いた連番画像ではGIMP、FFMpeg、ImageMagickの順で小さくなった。トリミングが必要な場合もGIMPだと簡単に行えるので、総合的にGIMPの使い勝手が一番良いと思う。ただ、入力ファイルが連番画像ではなく、動画ファイルの場合はFFMpegでの作業が早いと思われる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です