ZeroTool Workbench

GIF 圧縮ツール

アップロードなしで GIF を圧縮。ロッシー LZW、減色、リサイズ、フレーム間引きに対応し、圧縮前後のサイズをブラウザ上で比較できます。

100% クライアントサイド データはブラウザ外に出ません 無料 · 登録不要

Drop a GIF here, or click to select

You can also paste a copied GIF file with Ctrl/Cmd+V

Animated or static GIF (GIF87a / GIF89a)

詳しいガイドを読む GIF 圧縮の仕組みと実践:ロッシー LZW と減色でアニメーション GIF を軽量化する

使い方

  1. GIF をドロップエリアに置くか、クリックして選択します。コピーした GIF ファイルを Ctrl/Cmd+V で貼り付けることもできます。
  2. 読み込むと選択中の設定で 1 回自動的に圧縮し、元の GIF と結果を並べてファイルサイズとともに表示します。
  3. 設定を変えたら「圧縮」を押して作り直します。エンコードは重い処理なので、スライダーを動かすたびに再計算はしません。
  4. 「GIF をダウンロード」で {元の名前}-compressed.gif として保存します。

各設定とファイルサイズの関係

設定内容サイズへの影響
ロッシー(0–100、既定 40)色ずれが「ロッシー × 0.6」以内なら LZW が既存の並びを再利用できる動画から作った GIF では最も効きやすい項目。231 フレームの画面録画では 40 で元の 42%、100 で 19%
色数(256〜4)カラーテーブルの大きさ。1 枠は透明用色が少ないほど符号が短くなり、繰り返しも増える。元の GIF の色数が上限以内なら、パレットは元の色のまま
幅縦横比を保って縮小。高さは自動画素数は縮小率の 2 乗で減る。幅を半分にするとデータ量はおよそ 4 分の 1
フレーム2・3・4 フレームごとに 1 枚を残す保存するフレームが減る。残したフレームは間引いたフレームの時間も表示するため、全体の長さは変わらない
ディザリングFloyd–Steinberg 誤差拡散色数が少ないときにグラデーションがなめらかになる代わりに、ファイルは大きくなりやすい

幅は縮小のみです。空欄、0、元の幅より大きい値はすべて元の幅として扱います。縮小では、出力画素が覆う元の画素を面積で重み付けして平均します。不透明な部分が半分に満たない出力画素は透明になります。

フレームの表示時間は 10 ms 単位で書き込み、最小は 20 ms です。元のファイルで 0 または 10 ms のフレームは 100 ms として書き込みます。ブラウザが実際にそう再生するためです。

フレーム最適化のしくみ

GIF の各フレームはキャンバス全体を覆う必要がありません。このツールは最初のフレームだけを全体で書き込み、以降のフレームは画面に表示中の内容と比べて、変化した画素を含む最小の矩形だけを書き込みます。矩形の中で変化していない画素は透明色にして前のフレームを透かせ、長い連続としてまとめて圧縮します。まったく変化のないフレームは透明な 1 画素だけにして、表示時間を残します。

透明の画素にはもう一手間かかります。見えていた画素を透明に戻したいとき、その上に透明の画素を描いても何も起きません。そこで直前のフレームの処理方法(disposal)を 2(背景に戻す)にし、その矩形を該当する画素まで広げます。ブラウザは次のフレームを描く前にその範囲を消去します。

パレットはアニメーション全体で 1 回だけ作ります。全フレームで使う色がカラーテーブルに収まるなら、色はそのまま残ります。収まらない場合はメディアンカットで色空間を箱に分け、箱ごとの平均色を使います。

対応範囲

  • 出力は常に GIF です。WebP 変換器は GIF の最初のフレームを静止 WebP に変換します。アニメーション WebP が必要な場合は、PC で libwebp 付属の gif2webp を使ってください。
gif2webp -lossy -q 75 in.gif -o out.webp
  • MP4 は同じ内容の GIF より数倍小さくなることが多い形式です。PC の ffmpeg で変換してください。幅か高さが奇数の場合は、yuv420p が偶数サイズを必要とするため -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" を加えます。
ffmpeg -i in.gif -movflags +faststart -pix_fmt yuv420p out.mp4
  • フレームの切り抜き・並べ替え・編集はできません。GIF を PNG のフレームに分けるには GIF 分解ツールを使ってください。
  • サイズ上限:デコード後 5,000 万ピクセル、1,000 フレーム、1 フレーム 16,777,216 ピクセル。
  • JPEG・PNG・WebP 画像は画像圧縮ツールをご利用ください。

関連ツール

  • GIF 分解ツール:フレームを PNG・JPG で書き出したり、スプライトシートを作ったりできます。
  • 画像圧縮ツール:JPEG・PNG・WebP を圧縮・リサイズ。
  • WebP 変換器:PNG・JPG・GIF の最初のフレームを WebP に変換。

FAQ

GIF はどこかにアップロードされますか?

いいえ。ファイルは File API で読み込み、このページの JavaScript がブラウザ内でデコードと再エンコードを行い、結果はメモリから直接ダウンロードします。ローカルに保存するのは設定(ロッシー、色数、フレーム、ディザリング)だけです。幅はファイルごとに決まるため保存しません。元の GIF と圧縮結果はどこにも保存されません。

「ロッシー」スライダーは何をしていますか?

GIF は LZW で画素を圧縮します。画素の並びが以前に出てきた並びを繰り返すほど、ファイルは小さくなります。ロッシーが 0 より大きいと、既知の並びを延ばせる場合に限り、エンコーダーは画素を近い色のパレット色に置き換えて書き込みます。許容する最大の色ずれは「ロッシー × 0.6」(RGB 空間での距離)で、既定値 40 なら 24、100 なら 60 です。フレーム間では、表示中の画素との距離がこの範囲内なら変化なしとみなし、描き直しません。透明の画素は変わりません。0 のときは画素をそのまま書き込みます。

圧縮後のほうが大きくなることがあるのはなぜですか?

gifsicle -O3 で最適化済みの GIF や、フレームごとに別のカラーテーブルを持つ GIF があるためです。このツールは全フレーム共通のパレットを 1 つだけ書き出し、色数は最大 255 色と透明 1 枠です。元の GIF が 256 色を使い切っていたり、フレームごとに色が違ったりすると再減色が必要になり、サイズが増えることがあります。その場合はページに表示され、ファイルはそのままダウンロードできます。小さくしたいときは、色数を減らす、ロッシーを上げる、幅を縮めるのいずれかを試してください。

どのくらいの大きさの GIF まで扱えますか?

デコード後 5,000 万ピクセル(幅 × 高さ × フレーム数)、1,000 フレーム、1 フレーム 16,777,216 ピクセル(一辺 16,384 px)までです。GIF 分解ツールと同じ上限で、スマートフォンのメモリに収まるようにしています。それより大きいファイルは、PC で gifsicle -O3 --lossy=80 --colors 128 input.gif -o output.gif を実行してください。

ディザリングが既定でオフなのはなぜですか?

ディザリングは隣り合うパレット色の画素を散らして、パレットにない色を再現します。この点のパターンはフレームごとに変わり、動いていない部分でも変わるため、変化なしとみなせる画素が大きく減り、LZW も繰り返しを見つけにくくなります。231 フレームの画面録画で試したところ、64 色でディザリングをオンにすると出力が 1.9 倍(元の 42% から 80%)になりました。色数が少なくグラデーションの縞が目立つときだけオンにするのがおすすめです。