読者です 読者をやめる 読者になる 読者になる

uzullaがブログ

uzullaがブログです。

gifsicleで超速アニメーションGif生成

gif

「みなさん元気に大量のgifアニ生成してますか!!!!!(超小声)」*1

gifsicleを知った

TLに流れてきたんですが、gifsicleというGif<>アニメーションGifコンバータを知りました

gifsicle
http://www.lcdf.org/gifsicle/

個人的に把握した特徴は以下の通り

・速い
・入力はGifのみサポート
・速い
・ビルドが楽だった
・速い
OSXBrewからはいるらしいけど、XQuartzが必要(なのでやってみてない)
・速い
・詳しくは上のURL見た方が速い


速い

100枚ほどの、1280x720pxなGif連番画像を、さくらの980円でAnimation Gifにくみたてた場合のベンチマークです。
対抗馬のConvertはImageMagickよりも3倍速いと評判のYoyaMagick(http://labs.gree.jp/blog/date/2013/05/http://uzulla.hateblo.jp/entry/2013/06/23/200936)。

$ time gifsicle --delay=10 --loop *.gif > ../anim1.gif
real 0m4.702s
user 0m4.502s
sys 0m0.192s

$ time convert *.gif ../anim2.gif
real 0m19.337s
user 0m5.768s
sys 0m4.068s

  • rw-rw-r-- 1 yancha yancha 25262804 10月 4 20:16 2013 anim1.gif
  • rw-rw-r-- 1 yancha yancha 25697225 10月 4 20:17 2013 anim2.gif


4倍速い。
つまりImageMagickの10倍以上は速い(ホントか?)


そして、ファイルサイズもちょっとだけちいさい。


早速Pyazo対応させました

Gifzoサーバとしてもつかえたり、iPhoneからウェブブラウザで動画を送信するとGifアニメに変換できたりするPyazoをgifsicleに対応させました。

https://github.com/uzulla/pyazo
(作った時のエントリ http://uzulla.hateblo.jp/entry/2013/06/16/011657

マジで速くなりました、今なら変換速度はGifzoに勝てる。
生成されるファイルサイズも半分位になりました。

…「速度は」?

いままでは品質の為に「FFmpegPNGに変換、ImageMagickでアニメーションgifに変換」していましたが*2、今回gifsicle対応のために中間ファイルをgifにしてみました*3


実は、中間ファイルをGifにするとIMでもファイルサイズは良い感じになります*4、中間がPNGGIFで大体二倍くらい差が生まれるみたいですね*5


そして、FFMpegでの変換自体もpngよりもgifが数倍高速で、今回ffmpegの処理+gifsicleの処理で10倍以上速くなりました。



判りづらいのでまとめてみますか

中間ファイル アニGif生成プログラム 画質 ファイルサイズ 速度
png Imagemagick 低速
gif Imagemagick ほどほど
png gifsicle n/a n/a n/a
gif gifsicle 高速

勝手に本家Gifzoとくらべてみる

本家Gifzoは画質優先っぽいですね。


本家に大変失礼ながら、勝手な条件で勝手に比べると、たとえばこういう画質差があります。

グレーバックの所など、あきらかに本家の方が良いですね。


ただ、かなり「単色」「アニメ絵」に特化した感じがあり、ディザで処理したほうがマッハバンドが出ない分、体感画質が上がるケースも有ります。

fpsを増やしてもおなじようなファイルサイズにおさまっているので、現実世界の動画ならば、こちらのほうが良いケースも多いかなと思いますね。


ま、ここらへんは趣味の問題です。

PyazoはiPhoneSafariブラウザから動画をUlしてGif動画をつくる、という変わった使い方をするのが楽しいので、こっちの方が直近個人的には良い感じになっております。
オプションで切り替えはできますので、皆様お好きな方をどうぞ。

ということで

gifsicle速い!最高!!

ところで…

ffmpegってカラーパレットを良い感じにしてくれるオプションないんですかね…っておもって早数年、やっぱりまだないのか〜〜。

*1:Gifアニみたいな帯域を超消費するものを生成していると、インフラ屋から抹消されても文句が言えない

*2:FFmpegGifに変換すると、パレットが固定になってしまって品質がおちるのでPNG経由にしています

*3:ImageMagick利用時は、オンオフ設定可能です

*4:勿論速度は全然gifsicleの方が速い

*5:減色工夫すれば、差が埋まるらしいが…

*6:ちなみに、右端がぶっこわれているのは、多分ffmpegの問題ですが、まだよくわからぬ(このエントリ書いていたら気付いたので、調査していない)-> うーん、雑なマジックをつかった https://github.com/uzulla/Pyazo2/issues/5#issuecomment-32692277