軽い再エンコードを試す
見た目の大きさは維持できますが、元GIFが効率的なら削減量が少ない、またはゼロの場合があります。
Light圧縮を試す →GIFを実際には小さく表示するなら、リサイズは比較的予測しやすい方法です。周囲に不要な余白があれば先にトリミングします。解像度低下、フレーム削減、質感の劣化を許容できる場合だけ圧縮を強くしてください。すでに効率的なサンプルではLightの削減量はほぼゼロでした。プリセットだけで必ず容量が減るとは限りません。
最も重要な条件を先に決めます。最適な方法は、不要なデータだけを減らす方法です。
見た目の大きさは維持できますが、元GIFが効率的なら削減量が少ない、またはゼロの場合があります。
Light圧縮を試す →幅と高さを50%にすると、4サンプルでフレーム数と再生時間を保ったまま52.2%〜65.7%削減できました。
GIFをリサイズ →不要な端だけを切り取ります。削除領域の複雑さにより削減率は11.3%〜41.0%でした。
GIFをトリミング →Strongは65.8%〜69.7%削減しましたが、画像寸法も縮小し、フレーム数を半分にしました。
圧縮レベルを比較 →各フレームにはピクセルの格子があります。幅と高さを50%にすると、1フレーム全体のピクセル位置は4分の1になります。
フレームが多いほど動きは滑らかになりますが、各フレームの画像データとタイミング情報が増えます。
質感、グラデーション、ノイズ、大きく動く領域は、単純で繰り返しの多い形よりも圧縮しにくくなります。
GIFはインデックスカラーを使います。色数を減らすと容量は下がりますが、写真では階調の段差やディザが目立つことがあります。
毎フレームで多くのピクセルが変わるアニメーションは、小さな要素だけが動くものより多くのデータを必要とします。
各ペアは同じ元アニメーションを使っています。カード上の表示サイズはそろえているため、実際の寸法とフレーム数はラベルで確認してください。
単純な形、少ない色、動くインターフェース要素。
元GIF · 116.32 KB · 800×450 · 40 フレーム
Strong · 39.38 KB · 560×315 · 20 フレームグラデーション、再現可能な質感、動く前景オブジェクト。
元GIF · 2.13 MB · 640×360 · 50 フレーム
Strong · 659.52 KB · 448×252 · 25 フレーム透明背景とくっきりした輪郭を持つ動くステッカー。
元GIF · 54.18 KB · 512×512 · 30 フレーム
Strong · 18.54 KB · 358×358 · 15 フレーム細い線、文書風の文字列、動くカーソル。
元GIF · 181.85 KB · 960×540 · 60 フレーム
Strong · 61.38 KB · 672×378 · 30 フレーム削減率は各出力をそれぞれの元GIFと比較した値です。この固定テストセットの結果であり、すべてのGIFに同じ割合を保証するものではありません。
| サンプル | 方法 | 設定 | ファイルサイズ | 削減率 | 寸法 | フレーム |
|---|---|---|---|---|---|---|
| GIF-UI | 元GIF | 元GIF | 116.32 KB | — | 800×450 | 40 |
| GIF-UI | 圧縮 | Light | 116.32 KB | 0.0% | 800×450 | 40 |
| GIF-UI | 圧縮 | Balanced | 97.45 KB | 16.2% | 680×383 | 40 |
| GIF-UI | 圧縮 | Strong | 39.38 KB | 66.2% | 560×315 | 20 |
| GIF-UI | リサイズ | 75% | 84.72 KB | 27.2% | 600×338 | 40 |
| GIF-UI | リサイズ | 50% | 55.24 KB | 52.5% | 400×225 | 40 |
| GIF-UI | トリミング | 各辺10% | 101.68 KB | 12.6% | 640×360 | 40 |
| GIF-UI | 組み合わせ | トリミング → 50% → Balanced | 40.79 KB | 64.9% | 272×153 | 40 |
| GIF-PHOTO | 元GIF | 元GIF | 2.13 MB | — | 640×360 | 50 |
| GIF-PHOTO | 圧縮 | Light | 2.13 MB | 0.0% | 640×360 | 50 |
| GIF-PHOTO | 圧縮 | Balanced | 2.06 MB | 3.1% | 544×306 | 50 |
| GIF-PHOTO | 圧縮 | Strong | 659.52 KB | 69.7% | 448×252 | 25 |
| GIF-PHOTO | リサイズ | 75% | 1.73 MB | 18.4% | 480×270 | 50 |
| GIF-PHOTO | リサイズ | 50% | 746.56 KB | 65.7% | 320×180 | 50 |
| GIF-PHOTO | トリミング | 各辺10% | 1.42 MB | 33.3% | 512×288 | 50 |
| GIF-PHOTO | 組み合わせ | トリミング → 50% → Balanced | 396.92 KB | 81.8% | 218×122 | 50 |
| GIF-STICKER | 元GIF | 元GIF | 54.18 KB | — | 512×512 | 30 |
| GIF-STICKER | 圧縮 | Light | 54.18 KB | 0.0% | 512×512 | 30 |
| GIF-STICKER | 圧縮 | Balanced | 45.62 KB | 15.8% | 435×435 | 30 |
| GIF-STICKER | 圧縮 | Strong | 18.54 KB | 65.8% | 358×358 | 15 |
| GIF-STICKER | リサイズ | 75% | 39.94 KB | 26.3% | 384×384 | 30 |
| GIF-STICKER | リサイズ | 50% | 25.92 KB | 52.2% | 256×256 | 30 |
| GIF-STICKER | トリミング | 各辺10% | 48.07 KB | 11.3% | 410×410 | 30 |
| GIF-STICKER | 組み合わせ | トリミング → 50% → Balanced | 19.64 KB | 63.7% | 174×174 | 30 |
| GIF-TEXT | 元GIF | 元GIF | 181.85 KB | — | 960×540 | 60 |
| GIF-TEXT | 圧縮 | Light | 181.85 KB | 0.0% | 960×540 | 60 |
| GIF-TEXT | 圧縮 | Balanced | 150.18 KB | 17.4% | 816×459 | 60 |
| GIF-TEXT | 圧縮 | Strong | 61.38 KB | 66.2% | 672×378 | 30 |
| GIF-TEXT | リサイズ | 75% | 132.23 KB | 27.3% | 720×405 | 60 |
| GIF-TEXT | リサイズ | 50% | 85.76 KB | 52.8% | 480×270 | 60 |
| GIF-TEXT | トリミング | 各辺10% | 107.23 KB | 41.0% | 768×432 | 60 |
| GIF-TEXT | 組み合わせ | トリミング → 50% → Balanced | 43.45 KB | 76.1% | 326×184 | 60 |
検証方法: プロジェクト所有の4つのGIFを現在のTanumi GIF workerで処理しました。全出力をffprobeで個別にデコードしています。Lightは寸法とフレーム数を維持し、元GIFとのSSIMは0.999999〜1.0でした。形状が変わる出力は、想定表示サイズで目視確認しました。
複数の変更を許容できる場合は、影響の少ないものから行います。
削減率のために重要な動きを切らないでください。トリミングは周囲が本当に未使用の場合に有効です。
幅960ピクセルのGIFを480ピクセルで表示するなら、見えない細部にもデータを使っています。
細い文字、グラデーション、動き、透明な端を確認します。まだ上限を超える場合だけStrongへ進みます。