Så hvordan virker det?
Å svare på det spørsmålet innebærer å forklare noen svært kompliserte matte, sikkert mer enn vi kan dekke i denne artikkelen, men du trenger ikke å forstå nøyaktig hvordan det fungerer matematisk for å forstå det grunnleggende.
De mest populære bibliotekene for komprimering av tekst er avhengige av to komprimeringsalgoritmer, og bruker begge samtidig for å oppnå svært høye kompresjonsforhold. Disse to algoritmene er "LZ77" og "Huffman-koding." Huffman-koding er ganske komplisert, og vi kommer ikke til å gå i detalj på den her. Primært bruker den litt fancy matte til å tildele korterebinære koder til individuelle bokstaver, krympende filstørrelser i prosessen. Hvis du vil lære mer om det, sjekk ut denne artikkelen om hvordan koden fungerer, eller dette forklarer av Computerphile.
LZ77, derimot, er relativt enkelt og er hva vi snakker om her. Det søker å fjerne dupliserte ord og erstatte dem med en mindre "nøkkel" som representerer ordet.
Ta dette korte teksten til for eksempel:
Vi kaller kompresjon som denne "lossless" -dataene du legger inn er de samme som dataene du kommer ut. Ingenting er tapt.
I virkeligheten bruker ikke LZ77 en liste over nøkler, men erstatter i stedet den andre og tredje forekomsten med en link tilbake i minnet:
Hvis du er interessert i en mer detaljert forklaring, er denne videoen fra Computerphile ganske nyttig.
Nå er dette et idealisert eksempel. I virkeligheten er mest tekst komprimert med taster så små som bare noen få tegn. For eksempel vil ordet "the" bli komprimert, selv når det vises i ord som "der", "deres" og "da." Med gjentatt tekst kan du få noen sprø kompresjonsforhold. Ta denne tekstfilen med ordet "howtogeek" gjentatt 100 ganger. Den opprinnelige tekstfilen er tre kilobytes i størrelse. Når det komprimeres, tar det bare opp 158 byte. Det er nesten 95% komprimering.
Denne LZ77-algoritmen gjelder for alle binære data, forresten, og ikke bare tekst, men tekst er generelt lettere å komprimere på grunn av hvor mange gjentatte ord de fleste språk bruker. Et språk som kinesisk kan være litt vanskeligere å komprimere enn engelsk, for eksempel.
Hvordan fungerer bilde- og videokomprimering?
Dette fører til de fryktelige JPEG-bildene som folk har lastet opp, delt og skjermdumpet flere ganger. Hver gang bildet blir komprimert, mister det noen data.
Her er et eksempel. Dette er et skjermbilde jeg tok som ikke har blitt komprimert i det hele tatt.
Vel, dette er bare et worst case scenario, eksporterer med 0% JPEG kvalitet hver gang. Til sammenligning, her er en 50% kvalitets JPEG, som nesten ikke skiller seg fra kilde PNG-bildet, med mindre du blåser det opp og ser nærmere på det.
Så hvordan sparer det så mye plass? Vel, JPEG-algoritmen er en teknikk. De fleste bilder lagrer en liste med tall, med hvert tall som representerer en enkelt piksel.
JPEG gjør ingen av dette. I stedet lagrer det bilder ved hjelp av noe som kalles en Diskret Cosine Transform, som er en samling av sinusbølger lagt sammen i varierende intensiteter. Den bruker 64 forskjellige ligninger, men de fleste av disse blir ikke brukt. Dette er hva kvalitetsskyven for JPEG i Photoshop og andre bildeapper gjør - velg hvor mange likninger du skal bruke. Appene bruker deretter Huffman-koding for å redusere filstørrelsen enda lenger.
Dette gir JPEGer et sinnsykt høyt kompresjonsforhold, noe som kan redusere en fil som vil være flere megabyte ned til et par kilobytes, avhengig av kvaliteten. Selvfølgelig, hvis du bruker det for mye, slutter du med dette:
Videokomprimering
Vi bruker noe som heter "interframe compression", som beregner endringene mellom hver ramme og bare lagrer dem. Så hvis du for eksempel har et relativt stille bilde som tar opp flere sekunder i en video, blir mye plass lagret fordi komprimeringsalgoritmen ikke trenger å lagre alle ting i scenen som ikke endres. Interramkomprimering er hovedårsaken til at vi har digital TV og nettvideo i det hele tatt. Uten det ville videoene være hundrevis av gigabyte, mer enn den gjennomsnittlige harddiskstørrelsen i 2005 da YouTube startet.
Også siden interframekomprimering fungerer best med det meste stasjonær video, er det derfor konfettiene ødelegger videokvaliteten.
Merk: GIF gjør ikke dette, og derfor er animerte GIF ofte svært korte og små, men har fortsatt en ganske stor filstørrelse.
En annen ting å huske på video er bitrate-mengden data tillatt i hvert sekund. Hvis bitraten din er 200 kb / s, vil videoen din se for eksempel ganske dårlig ut. Kvaliteten går opp ettersom bithastigheten går opp, men etter et par megabyte per sekund får du avtagende avkastning.
Dette er en zoomet ramme tatt fra en video av en maneter. Den til venstre er 3Mb / s, og den til høyre er 100Mb / s.
Denne demoen virker bedre med den faktiske videoen, så hvis du vil sjekke det ut for deg selv, kan du laste ned de samme bitrate testvideoene som brukes her.
Lydkomprimering
MP3 bruker også bithastighet, fra den lave enden på 48 og 96 kbps (den lave enden) til 128 og 240kbps (ganske bra) til 320kbps (high-end lyd), og du vil sannsynligvis bare høre forskjellen med svært gode hodetelefoner ( og ører).
Det er også lossless komprimeringskodinger for lyd - den viktigste er FLAC-som bruker LZ77-koding for å levere helt tapsløs lyd. Noen sverger ved FLACs perfekte lydkvalitet, men med utbredelsen av MP3 virker det som de fleste heller ikke kan fortelle eller ikke bry seg om forskjellen.