ImageMagickでアニメーションGIFを編集する方法

調べていてもまとまった情報が出てこなくて不便だったので自分なりにまとめてみる。
GIFとは書いたが、ある程度はGIF以外(TIFとかMNGとかがそうか?)でも使えるはず。が、責任は持たない。

  • convert original.gif part%d.gif

これでとりあえず各画像を切り出せる。
自分はここでペイントでちまちまと変更を加えてみたりした。

  • convert -colors 32

ペイントで編集した弊害か、256色になっていたので32色に減色。

  • convert -resize -crop -repage

resizeは文字通りサイズ変更。cropは切り出し。repageはページジオメトリーの上書き。
crop、repageは共に[x]x[y]+[x-offset]+[y-offset]で指定する。

  • convert -delay 50 -loop 0 part*.gif new.gif

delayは再生の遅延時間。loopはアニメーションの再生回数。0を与えると無限ループ。

UNIXだと+adjoinというオプションで各画像を切り出せるようだ。

repageの指定が必要なのは、アニメーションGIFの場合各画像サイズが一定でないことがあげられる。
以下に例を示す。

> identify 0.gif
0.gif[0] GIF 54x90 54x90+0+0 PseudoClass 32c 8-bit 1.22852kb 
0.gif[1] GIF 13x2 54x90+20+45 PseudoClass 32c 8-bit 1.22852kb 
0.gif[2] GIF 14x2 54x90+20+46 PseudoClass 32c 8-bit 1.22852kb 
0.gif[3] GIF 14x3 54x90+20+46 PseudoClass 32c 8-bit 1.22852kb 
0.gif[4] GIF 14x4 54x90+20+45 PseudoClass 32c 8-bit 1.22852kb 

このように、画像のサイズだけでも54x90、13x2、14x2、14x3、14x4とばらばらで、しかしページジオメトリーでは54x90の部分は共通である。ページジオメトリーが表示上のサイズとして有効なので、repageオプションでここを丁度いいように揃えてやらないとアニメーションが破綻する。


0.gifはここhttp://badhand.moe.in/countdのカウンター素材のもの。