Programvareingeniører har alltid utviklet nye måter å tilpasse mye data på en liten plass. Det var sant da harddiskene våre var små, og fremkomsten av internett har bare gjort det mer kritisk. Filkomprimering spiller en stor rolle i å koble oss sammen, og lar oss sende mindre data nedover linjen slik at vi kan ha raskere nedlastinger og tilpasse flere tilkoblinger til travle nettverk.



Så hvordan fungerer det?

For å svare på det spørsmålet vil det innebære å forklare noe veldig komplisert matematikk, absolutt 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 å komprimere tekst er avhengige av to komprimeringsalgoritmer, og bruker begge samtidig for å oppnå svært høye komprimeringsforhold. Disse to algoritmene er LZ77 og Huffman-koding. Huffman-koding er ganske komplisert, og vi vil ikke gå i detalj på den her. Primært bruker den litt fancy matematikk for å tildele kortere binæ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, på den annen side, er relativt enkel og er det vi skal snakke om her. Den søker å fjerne dupliserte ord og erstatte dem med en mindre nøkkel som representerer ordet.

Ta denne korte teksten for eksempel:

LZ77-algoritmen ville se på denne teksten, innse at den gjentar howtogeek tre ganger, og endre den til dette:

endre startmenyen windows 10
Annonse

Så, når den vil lese teksten tilbake, vil den erstatte hver forekomst av (h) med howtogeek, og bringe oss tilbake til den opprinnelige frasen.

Vi kaller komprimering som dette tapsfri – dataene du legger inn er de samme som dataene du får ut. Ingenting går tapt.

I virkeligheten bruker ikke LZ77 en liste over nøkler, men erstatter i stedet den andre og tredje forekomsten med en lenke tilbake i minnet:

Så nå, når det kommer til (h), vil det se tilbake til howtogeek og lese det i stedet.

Hvis du er interessert i en mer detaljert forklaring, denne videoen fra Computerphile er ganske nyttig.

Nå er dette et idealisert eksempel. I virkeligheten er det meste av 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 deretter. Med gjentatt tekst kan du få vanvittige komprimeringsforhold. Ta denne tekstfilen med ordet howtogeek gjentatt 100 ganger. Den originale tekstfilen er tre kilobyte stor. Når den er komprimert, tar den bare opp 158 byte. Det er nesten 95% kompresjon.

Annonse

Nå er det åpenbart et ganske ekstremt eksempel siden vi nettopp hadde det samme ordet gjentatt om og om igjen. I allmennpraksis vil du sannsynligvis få rundt 30-40% komprimering ved å bruke et komprimeringsformat som ZIP på en fil som hovedsakelig består av tekst.

Denne LZ77-algoritmen gjelder forresten alle binære data, og ikke bare tekst, selv om tekst generelt sett er 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?

Video- og lydkomprimering fungerer veldig forskjellig. I motsetning til med tekst hvor du kan ha tapsfri komprimering, og ingen data går tapt, med bilder har vi det som kalles Lossy Compression hvor du mister noen data. Og jo mer du komprimerer, jo mer data mister du.

Dette er det som fører til de grusomme JPEG-ene som folk har lastet opp, delt og tatt skjermbilder 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.

Jeg tok deretter det skjermbildet og kjørte det gjennom Photoshop flere ganger, hver gang jeg eksporterte det som en lavkvalitets JPEG. Her er resultatet.

hvordan sentrere Word-dokument

Ser ganske dårlig ut, ikke sant?

Annonse

Vel, dette er bare et verste tilfelle, og eksporterer til 0 % JPEG-kvalitet hver gang. Til sammenligning, her er en JPEG-kvalitet på 50 %, som nesten ikke kan skilles fra kilde-PNG-bildet med mindre du sprenger det og tar en nærmere titt.

PNG-en for dette bildet var 200 KB i størrelse, men denne JPEG-kvaliteten med 50 % er bare 28 KB.

Så hvordan sparer det så mye plass? Vel, JPEG-algoritmen er en ingeniørbragd. De fleste bilder lagrer en liste over tall, der hvert tall representerer en enkelt piksel.

JPEG gjør ingenting av dette. I stedet lagrer den bilder ved hjelp av noe som kalles a Diskret Cosinus Transform , som er en samling av sinusbølger lagt sammen med varierende intensitet. Den bruker 64 forskjellige ligninger, men de fleste av disse blir ikke brukt. Dette er hva kvalitetsglidebryteren for JPEG i Photoshop og andre bildeapper gjør – velg hvor mange ligninger du vil bruke. Appene bruker deretter Huffman-koding for å redusere filstørrelsen ytterligere.

Dette gir JPEG-er et vanvittig høyt komprimeringsforhold, som kan redusere en fil som vil være på flere megabyte ned til et par kilobyte, avhengig av kvaliteten. Selvfølgelig, hvis du bruker det for mye, ender du opp med dette:

Det bildet er grusomt. Men mindre mengder JPEG-komprimering kan ha en betydelig innvirkning på filstørrelsen, og dette gjør JPEG svært nyttig for bildekomprimering på nettsteder. De fleste bildene du ser på nettet er komprimert for å spare nedlastningstider, spesielt for mobilbrukere med dårlige dataforbindelser. Faktisk har alle bildene på Kyoceramita blitt komprimert for å gjøre sidelasting raskere, og du har sannsynligvis aldri lagt merke til det.

Videokomprimering

Video fungerer litt annerledes enn bilder. Du skulle tro at de bare ville komprimere hvert bilde med JPEG, og det gjør de absolutt, men det er en bedre metode for video.

Annonse

Vi bruker noe som kalles interframe-komprimering, som beregner endringene mellom hver frame og bare lagrer disse. Så hvis du for eksempel har et relativt stillbilde som tar flere sekunder i en video, spares mye plass fordi komprimeringsalgoritmen ikke trenger å lagre alle tingene i scenen som ikke endres. Interframe-komprimering er hovedårsaken til at vi i det hele tatt har digital-TV og webvideo. Uten det ville videoer vært hundrevis av gigabyte, mer enn gjennomsnittlig harddiskstørrelse i 2005 da YouTube ble lansert.

hva står jk for

Siden interframe-komprimering fungerer best med stort sett stasjonær video, er dette grunnen konfetti ødelegger videokvaliteten .

Merk: GIF gjør ikke dette, og det er derfor animerte GIF-er ofte er veldig korte og små, men har fortsatt en ganske stor filstørrelse.

En annen ting å huske på med video er bithastigheten – mengden data som er tillatt i hvert sekund. Hvis bithastigheten for eksempel er 200 kb/s, vil videoen din se ganske dårlig ut. Kvaliteten går opp etter hvert som 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 manet. Den til venstre er på 3Mb/s, og den til høyre er 100Mb/s.

Annonse

En 30x økning i filstørrelse, men ikke mye økning i kvalitet. Vanligvis sitter YouTube-videoer rundt 2-10 Mb/s avhengig av tilkoblingen din, siden noe mer sannsynligvis ikke vil bli lagt merke til.

Denne demoen fungerer bedre med faktisk video, så hvis du vil sjekke den ut selv, kan du laste ned den samme bitrate testvideoer brukt her.

Lydkomprimering

Lydkomprimering fungerer veldig likt tekst- og bildekomprimering. Der JPEG fjerner detaljer fra et bilde som du ikke vil se, gjør lydkomprimering det samme for lyder. Du trenger kanskje ikke å høre knirkingen fra gitarhakket på strengen hvis den faktiske gitaren er mye, mye høyere.

MP3 bruker også bitrate, alt fra den lave enden på 48 og 96 kbps (den lave enden) til 128 og 240 kbps (ganske bra) til 320 kbps (high-end lyd), og du vil sannsynligvis bare høre forskjellen med eksepsjonelt gode hodetelefoner ( og ører).

Det finnes også tapsfrie komprimeringskodeker for lyd – den viktigste er FLAC – som bruker LZ77-koding for å levere helt tapsfri lyd. Noen mennesker sverger til FLACs perfekte lydkvalitet, men med utbredelsen av MP3 ser det ut til at de fleste enten ikke kan se eller ikke har noe imot forskjellen.

LES NESTE