「PythonでアニメーションGIFの圧縮を行いたい」
「Pillowを使わずにGIF画像を簡単にリサイズしたい」
このような場合には、pygifsicleがオススメです。
この記事では、pygifsicleについて解説しています。
本記事の内容
- pygifsicleとは?
- pygifsicleのシステム要件
- pygifsicleのインストール
- pygifsicleの動作確認
それでは、上記に沿って解説していきます。
pygifsicleとは?
pygifsicleとは、Gifsicleのラッパーのことです。
Gifsicleは、GIF処理用のコマンドラインツールになります。
そのGifsicleをPythonから操作可能にしたライブラリが、pygifsicleです。
Gifsicleについては、次の記事で説明しています。
「Gifsicleが便利過ぎるのでPythonから使いたい!!」
この要望から生まれたモノが、pygifsicleと言えます。
似たようなライブラリには、ffmpeg-pythonが存在しています。
こちらは、PythonからFFmpegを操作することが可能になります。
以上、pygifsicleについての説明でした。
次は、pygifsicleのシステム要件を確認しましょう。
pygifsicleのシステム要件
現時点(2021年12月)でのpygifsicleの最新バージョンは、1.0.5となります。
この最新バージョンは、2021年10月3日にリリースされています。
サポートOSに関しては、以下を含むクロスプラットフォーム対応です。
- Windows
- macOS
- Linux
そして、サポート対象となるPythonのバージョンはPython 3となります。
バージョンの詳細は、記載されていません。
ラッパーであるため、そんなに複雑なことはしていないのでしょう。
だからこそ、Python 3という適当な記述なのだと思われます。
OSやPythonのバージョンは、それほど重要ではありません。
重要なのは、Gifsicleです。
そのため、事前にGifsicleのインストールを済ませておく必要があります。
正確には、「gifsicle」コマンドが動くことが条件です。
pygifsicleは、あくまでGifsicleのラッパーです。
そのため、「gifsicle」コマンドが動かないとpygifsicleも機能できません。
以上、pygifsicleのシステム要件を説明しました。
次は、pygifsicleをインストールしましょう。
pygifsicleのインストール
検証は、次のバージョンのPythonで行います。
$ python -V Python 3.9.9
まずは、現状のインストール済みパッケージを確認しておきます。
$ pip list Package Version ---------- ------- pip 21.3.1 setuptools 59.5.0 wheel 0.36.2
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、pygifsicleのインストールです。
pygifsicleのインストールは、以下のコマンドとなります。
pip install pygifsicle
インストールは、一瞬で終わります。
では、どんなパッケージがインストールされたのかを確認しましょう。
$ pip list Package Version ---------- ------- pip 21.3.1 pygifsicle 1.0.5 setuptools 59.5.0 wheel 0.36.2
pygifsicleには、依存するパッケージがありません。
やはり、シンプルな構成です。
だから、Python 3というアバウトなバージョン指定なのでしょう。
依存関係があると、Pythonのバージョンも関係してきますからね。
いづれにせよ、pygifsicleは簡単に既存環境に導入可能です。
依存関係が問題になることは、ありませんので。
以上、pygifsicleのインストールを説明しました。
次は、pygifsicleの動作確認を行います。
pygifsicleの動作確認
pygifsicleの動作確認を行うためには、GIFアニメ画像を用意します。
上記記事から、アニメーションGIFを取得します。
このGIFファイルをtest_1.gif、test_2.gifとします。
両方とも同じファイルです。
test_1.gif、test_2.gif
サイズを確認しておきます。
$ ls -lh test*.gif | awk '{print $9,$5}' test_1.gif 816K test_2.gif 816K
圧縮する方法には、2つの方法が存在しています。
- optimize関数の利用
- gifsicle関数の利用
それぞれを下記で説明します。
optimize関数の利用
optimize関数の利用は、簡単です。
何も考える必要がありません。
optimize関数を使ってGIFアニメを圧縮するコードは、以下。
from pygifsicle import optimize optimize("test_1.gif")
上記を実行すると、test_1.gifが上書き保存されています。
再度、サイズを確認します。
$ ls -lh *.gif | awk '{print $9,$5}' test_1.gif 546K test_2.gif 816K
サイズが縮小されています。
ただ、これでは少し使い勝手が悪いです。
ファイルを上書きしたくない場合もあるでしょう。
それに、圧縮率が悪いです。
3分の2に圧縮された程度に過ぎません。
そもそも、Gifsicleは3分の1まで圧縮可能です。
gifsicle関数の利用
Gifsicleの性能をフルに活かせるのが、gifsicle関数ということです。
from pygifsicle import gifsicle gifsicle( sources="test_2.gif", destination="test_2_dst.gif", optimize=False, colors=256, options=["--optimize=3"] )
上書きしないように、「destination」を指定しています。
あと、「optimize」が若干ややこしいです。
「optimize=True」であれば、options=[“–optimize=3”]が無効となります。
「optimize=False」であれば、options=[“–optimize=3”]が有効となります。
なお、「optimize=True」の場合にはoptions=[“–optimize=1”]が有効です。
1や3の数字の意味は、以下。
1 Stores only the changed portion of each image. This is the default. 2 Also uses transparency to shrink the file further. 3 Try several optimization methods (usually slower, sometimes better results).
3が、最も圧縮率は高くなります。
では、上記のgifsicle関数のコードを実行しましょう。
結果は、以下となります。
$ ls -lh *.gif | awk '{print $9,$5}' test_1.gif 546K test_2.gif 816K test_2_dst.gif 295K
gifsicle関数を使うと、約3分の1まで圧縮できました。
圧縮できたGIFアニメは、以下のファイルとなります。
test_2_dst.gif
オリジナルのGIFアニメと比べて、どうでしょうか?
違和感を感じますか?
個人的には、全く感じません。
もっと複雑なGIFアニメなら、少しは違和感が出てくるのかもしれません。
でも、3分の1まで圧縮できるなら、利用するしかないでしょう。
GIFを扱うシステムなら、デフォルトでインストールすべきですね。
以上、pygifsicleの動作確認を説明しました。