Optog en 5-sekunders demonstrationsvideo, eksporterede den til GIF og så filstørrelsen: 18 MB.
Prøv at indsætte den i et dokument, sende den i en gruppe eller bruge den i en README-fil, og uploaden fejler eller den tager evigheder at indlæse.
Hvordan kan en GIF være større end en video, og hvordan komprimerer du den uden at den bliver fyldt med støj?
Først forstå: Hvorfor er GIF så stor
GIF-formatet er fra 1987, og nogle af dets oprindelige indstillinger bestemmer, at det "er tykt":
- Hver enkelt frame er et komplet billede. Der er ikke den "kun registrer ændringer"-komprimering, man ser i videoer – medmindre du eksporterer med specifikke optimeringer, er 100 frames 100 billeder.
- Komprimeringsalgoritmen er gammel. GIF bruger kun LZW-lossless komprimering, som er god til "samme farver i rækkefølge", men møder gradienter, fotos og små teksturer næsten uden at kunne komprimere.
- Maksimalt 256 farver pr. frame. Hvis farverne ikke rækker til, bruger eksportværktøjet "dithering" – små sprøglede punkter for at simulere overgange. For øjet ser disse punkter ud som en glat overgang, men for LZW er det den sværeste data at komprimere.
Så en GIF-fils størrelse afhænger hovedsageligt af: størrelse × antal frames × hvor "fragmenteret" hvert billede er. Alle nedenstående metoder angriber netop dette.
Seks metoder, sorteret efter kvalitetstab fra lavt til højt
1. Frame-optimering: Gem kun "den ændrede del" (uden tab)
Mange skærmbilled-værktøjer og designsoftware eksporterer GIF med hele billedet i hver frame. Men i en demonstrationsvideo er det ofte kun musen og et lille område, der bevæger sig.
Frame-optimering gør det: i hver frame gemmes kun det rektangel, der er anderledes end den forrige frame; uændrede dele er markeret som gennemsigtige pixels. Når disse gennemsigtige pixels lægger sig sammen, kan LZW komprimere dem meget effektivt.
Billedet ændrer sig ikke en eneste pixel, animationen ser helt identisk ud, bare på en mere effektiv måde at gemme. For GIF med "baggrund, der ikke bevæger sig, men dele, der gør det" (skærmbilleder, UI-demos, emojis), kan dette spare en del plads.
2. LZW med tab: Tillad en lille "udsving" i komprimeringsalgoritmen (visuelt uden tab)
Dette er tankegangen bag gifsicles --lossy parameter: under kodning tillader du, at farverne har en meget lille afvigelse, så flere pixels kan behandles som "samme farve" og kobles sammen. LZW-effektiviteten stiger markant.
Dets karakteristika er: ingen reduktion af farvetal, ingen ændring af størrelse, ingen ændring af frames, men prisen er en let "grainy" overflade. Jo højere værdi, jo mere sparer du, jo tydeligere bliver græset. Ved let brug (f.eks. --lossy=30~40) er det svært at se på normal afstand.
3. Reducér farvetallet: Fra 256 ned til 128 eller 64
Når paletten fra 256 farver sænkes til 128 eller 64 farver, har hver pixel mindre information, og komprimeringseffekten stiger.
For flade stil illustrationer, ikon-animationer, UI-skærmbilleder er farverne allerede få, så reduktionen er næsten uden tab; men for fotobaserede billeder eller billeder med mange gradienter vil reduktionen give tydelige farvebånd og flager.
4. Reducer framerate (framerate reduction)
Mange GIF-er eksporteres med 30 fps eller 60 fps, men GIF er ikke god til høje framerate. Mange scener kan sagtens bruge 10~15 fps.
Halverer du framerate, halveres størrelsen ofte også. Prisen er at bevægelsen ikke er så flydende – det påvirker ikke demonstrationsvideoer, men animationer, der kræver en flydende følelse.
5. Reducer størrelse (resize)
Størrelse og antal pixels står i direkte forhold: halverer du bredde og højde, er antallet af pixels kun en fjerdedel.
Hvis du optager på en Retina-skærm, kan den oprindelige bredde være over 2000 pixels, men den vises ofte kun på 600~800 pixels bredde. Eksportér i den faktiske visningsstørrelse, ofte den mest givende skridt. Prisen er, at det bliver sløret ved forstørrelse – pas på læsbarheden ved tekst.
6. Skift format: GIF til video eller WebP
Hvis platformen tillader det, er den mest radikale løsning at ikke bruge GIF:
- MP4 / WebM: Moderne video-kodning har "inter-frame" komprimering. Samme indhold tager ofte kun en brøkdel af GIF-størrelsen. På websider kan du bruge
<video autoplay loop muted playsinline>for at få samme effekt som GIF. - Dynamisk WebP / APNG: Understøtter flere farver og bedre komprimering, og alle moderne browsere kan afspille dem.
Prisen er kompatibilitet: mange chat-apps, fora, dokumentværktøjer og e-mail-klienter genkender kun GIF. Skifter du format, kan det ikke vises, eller det vil ikke afspille automatisk.
En tabel, der viser valgmulighederne
| Metode | Kvalitetseffekt | God til | Dårlig til |
|---|---|---|---|
| Frame-optimering | Ingen, pixels ændres ikke | Alle GIF-er, især skærmbilleder og lokale animationer | – (bør altid gøres) |
| LZW med tab (let) | Meget let "grain" | De fleste GIF-er | Pixelkunst, der er meget følsom over for støj |
| Reducer farvetallet | Farvebånd og flager i gradienter | Flade illustrationer, ikoner, UI | Fotos, billeder med mange gradienter |
| Reducer framerate | Bevægelse bliver "klistret" | Demonstrationsvideoer, animationer med mange stillbilleder | Animationer, der kræver flydende bevægelse |
| Reducer størrelse | Færre detaljer | Originalstørrelse er tydeligt større end den vises | Tekstindhold, der skal kunne læses tydeligt |
| Skift format | Ofte bedre | Websider, platforme du selv kontrollerer | Platforme, der kun accepterer GIF |
Logikken er: gør de trin, der ikke skader eller næsten ikke skader først, og gå derefter nedad efter behov. Hvis de to første trin er tilstrækkeligt små, behøver du ikke ofre farvetal, framerate og størrelse.
De første to trin kan ImgZilla gøre for dig i batch
Hvis du har en masse GIF-er – samlinger af emojis, demonstrationsvideoer i dokumenter, webmateriale – er det besværligt at slæbe dem ind i værktøjer én efter én og justere parametre.
ImgZilla er et macOS-billedekomprimeringsværktøj, der bruger præcis de to første punkter fra tabellen ovenfor:
- Baseret på gifsicle: Først den højeste frame-optimering (ligner
-O3), derefter lagt en let LZW med tab (ligner--lossy=40). - Ingen reduktion af farvetal, ingen frameremoval, ingen ændring af størrelse, ingen ændring af loop. Animationen er stadig den samme framerate, længde og opløsning, bare filen er mindre.
- Komprimerer på stedet: Filnavn, sti og format ændres ikke. GIF-er i dokumenter, websider eller Markdown, der refererer til
demo.gif, er stadigdemo.gifefter komprimering, ingen ændring af links. - Træk hele en mappe ind: Gennemgår undermapper rekursivt, og behandler GIF-er sammen med JPG, PNG, WebP osv.
- Komprimerer ikke, hvis den ikke kan: GIF-er, der allerede er optimerede, med under 0,4% komprimering, markeres som "minimeret" og beholder deres oprindelige form uden at bruge gratis kvoter.
- Flytter originale filer til papirkurven: Hvis du ikke er tilfreds, kan du højreklikke og flytte dem tilbage til oprindelse.
- Kører fuldstændig lokalt: Ingen upload til servere, ingen begrænsninger fra online-værktøjer – selv store skærmbilled-GIF-er på flere ti-tusind MB kan håndteres.
Hvor meget der kan spares, afhænger af, hvordan GIF-erne er blevet eksporteret. GIF-er fra skærmbilleder uden frame-optimering, hvor det meste er stille, sparer ofte mest; GIF-er, der allerede er komprimeret med professionelle værktøjer, kan kun spare lidt, eller blive markeret som "minimeret" – det er normalt.
Hvad ImgZilla ikke gør
For at "sørg for, at animationen ser ens ud", lader ImgZilla dig ikke gøre trin 3~6. Hvis de to første trin stadig er for store, skal du selv beslutte, hvad der skal ofres:
bash
Brug gifsicle kommandolinje: 128 farver, bredde 640, stærkere tabskomprimering
gifsicle -O3 --lossy=80 --colors 128 --resize-width 640 input.gif -o output.gif
Brug ffmpeg til at konvertere GIF til MP4 (ofte meget mindre størrelse)
ffmpeg -i input.gif -movflags +faststart -pix_fmt yuv420p
-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" output.mp4
For frameremoval og tidsjustering skal værktøjer som ezgif være mere intuitive.
En bedre vane: Eksportér ikke for store GIF-er i første omgang
Til sidst tre råd, der kan få dig til at komprimere mindre i fremtiden:
- Indsnævr vinduet før du optager, og optag kun det område, du skal bruge, i stedet for hele Retina-skærmen.
- Vælg 10~15 fps ved eksport, det er ofte tilstrækkeligt til demos.
- Eksporter og komprimér straks, så du gør frame-optimering og let tab – dette kræver ingen beslutningstagning og er godt til automatisering.
GIF er et gammelt format, men det er stadig den største fællesnævner for "automatisk afspilning overalt". I stedet for at diskutere om du skal droppe det, lad være med at lade GIF-er tage mere plads, end de skal.
ImgZilla understøtter i øjeblikket kun macOS (12.3 og nyere) og kan downloades fra Mac App Store. Den gratis version kan komprimere 10 GIF-er om dagen, og det tæller kun, hvis det lykkes – træk en mappe fyldt med GIF-er ind og se, hvor meget der kan spares.
