gifsicle1.9.2でリリースされたlossyオプションでぶっ壊れたGIFアニメを手軽に作る

tl;dr

gifisicleで新しくリリースされたlossyオプションにデカイ数値を突っ込むと↓みたいな壊れたgifアニメが簡単に作れる。

gifsicle input.gif --lossy=80000 > output.gif 

f:id:razokulover:20190419181348g:plain


GIFアニメーションをいじくりまわすのに特化したCLIツールとしてgifsicleがある。

gifアニメーション限定だけど、gifsicleはImageMagickと比べてリサイズが速かったりビルドが楽といった特徴があったりするのでちょいちょい重宝してきた。

gifsicleでの最適化オプションは、O1 O2 O3 とあって O3が一番軽量化できる。

下記が元の画像とgifsicleのO3で最適化したgif。

gifsicle -O3 input.gif > output.gif 

元画像は441KBだが、gifsicleで変換したほうは321KBになっている。

f:id:razokulover:20190419174115g:plainf:id:razokulover:20190419174135g:plain
左がオリジナル 右がgifsicle O3で変換したもの

30%ほど軽くなっているのでこれでも十分ではあるが、lossygifを使うとさらに軽くなる。

lossygifというのはgifsicleのフォーク版。

これはpngquantで使われている量子化アルゴリズムをgifアニメでも利用できるようにしてgifsicleに実装している。

このツールを使って--lossy=30で最適化すると下記のようになる。サイズは272KBだ。元画像と比べると40%ほど軽量化している。

gifsicle --lossy=30 input.gif > output.gif 

f:id:razokulover:20190419174626g:plain
lossy=30で変換したもの

lossygifは2014年頃に実装されて、gifsicleへPRが送られている。

これが即マージ可能であれば特に問題はなかったが、実はこのPRはgifsicle本体が使っている色空間周りの処理と根本的に競合していてマージできないということがわかった。

で、すぐに改修ができればよかったのだけど、実装の難しさや作者にも色々な都合があったりしたようで長年まったりとあーだこーだと議論と修正がなされてきた。

それが今日、やっと本体にマージされた!

今までlossy機能を使いたい利用者たちは仕方なくlossygifを独自でビルドして長年使ってきたわけだが、これでgifsicle本体をビルドするだけでlossy機能がデフォルトで使えるようになった。

めでたい🎉🎉🎉

ということで早速手元のマシンに入れて試したみたのだが、少し元のlossygifと違った。

違うと言ってもインターフェースは同じなのだが、設定できる値が違う。

従来は30~200の間で--lossy=30という感じで設定していた。値が大きくなるにつれて画質が落ちていく。

gifsicle input.gif --lossy=30 > output.gif  

これが今回リリースされたgifsicleのlossyオプションでは、0から上限なく好きな数値を設定できるようになった。

gifsicle input.gif --lossy=300 > output.gif 

この機能を使ってlossyオプションにでかい値をぶっこんでやる。

そうすると綺麗なglitchではないが、ぶっ壊れた砂嵐エフェクトがかかったようなgifアニメが作れる。

例えば以下はlossy=20000で作った。

ヤバさが増す。

しかも60KBと87%ほど軽くなっている。

f:id:razokulover:20190419181956g:plain
lossy=20000 60KB

lossy=80000まで増やすともうわけがわからんがすごい。

f:id:razokulover:20190419181348g:plain
lossy=80000 47KB

単純にリサイズしたい!みたいな用途なら特に使い道がないんだけど、手軽にコマンド一発でぶっこわれたgifアニメを作りたい人にはオススメです。

github.com