Hur Fungerar Filkomprimering Arbete?

0
438

Programvara ingenjörer har alltid utvecklat nya sätt att montera en massa uppgifter i ett litet utrymme. Det var sant när våra hårddiskar var liten, och tillkomsten av internet har bara gjort det mer kritisk. Filkomprimering spelar en stor roll i att ansluta oss, att låta oss skicka mindre data ner linjen så kan vi ha en snabbare nedladdningar och få plats med fler anslutningar på upptagen nätverk.

Så Hur Fungerar det?

För att besvara denna fråga skulle innebära att förklara några mycket komplicerad matematik, säkert mer än vad vi kan täcka i denna artikel, men du behöver inte förstå exakt hur det fungerar matematiskt för att förstå grunderna.

De mest populära bibliotek för att komprimera text förlita sig på två komprimeringsalgoritmer, att använda båda på samma gång för att uppnå mycket hög kompression. Dessa två algoritmer är “LZ77” och “Huffman-kodning.” Huffmankodning är ganska komplicerat, och vi kommer inte att gå in i detalj på det här. Först och främst så använder några fancy matematik för att tilldela kortare binära koder till enskilda bokstäver, krympande filstorlekar i processen. Om du vill läsa mer om detta, kolla in denna artikel om hur koden fungerar, eller detta explainer av Computerphile.

LZ77, å andra sidan, är relativt enkelt och det är vad vi kommer att prata om här. Det syftar till att ta bort dubbletter av ord och ersätta dem med en mindre “viktiga” som representerar ordet.

Ta detta kort stycke text som till exempel:

Den LZ77 algoritm skulle titta på denna text, inse att det upprepar “howtogeek” tre gånger, och ändra det till det här:

Sedan, när man vill läsa sms: a tillbaka, att det skulle ersätta varje instans av (h) med “howtogeek,” att föra oss tillbaka till den ursprungliga frasen.

Vi kallar komprimering som denna “lossless”—de data som du lägger till är desamma som de uppgifter du får ut. Ingenting är förlorat.

I verkligheten, LZ77 inte använda en lista över nycklar, men i stället ersätter den andra och tredje förekomst med en länk tillbaka i minnet:

Så nu, när det blir till (h), det kommer att se tillbaka till “howtogeek” och läsa istället.

Om du är intresserad av en mer detaljerad förklaring, denna video från Computerphile är ganska bra.

Nu, detta är en idealiserad exempel. I verkligheten, de flesta texten är komprimerad med nycklar så liten som bara ett fåtal tecken. Till exempel, ordet “det” skulle vara komprimerad även när den visas i ord som “finns där”, “deras”, och “sedan.” Med upprepad text, du kan få lite galen kompression. Ta med denna text fil med ordet “howtogeek” upprepas 100 gånger. Den ursprungliga texten fil är tre kb i storlek. När komprimerad, men, det tar bara upp 158 byte. Det är nästan 95% komprimering.

Nu, naturligtvis, det är ett ganska extremt exempel eftersom vi hade precis samma ord upprepas om och om igen. I allmän praktik, kommer du förmodligen att få runt 30-40% komprimering med hjälp av en komprimering format som ZIP på en fil som mestadels består av text.

Detta LZ77 algoritm gäller för alla binära data, förresten, och inte bara text, men texten är i allmänhet lättare att komprimera på grund av hur många upprepade ord mest använda språk. Ett språk som Kinesiska kan vara lite svårare att komprimera än engelska, till exempel.

Hur Bild och Video Komprimering Arbete?

Komprimering av ljud och Video fungerar på mycket olika sätt. Till skillnad från med text där du kan få icke-förstörande komprimering, och inga data går förlorade, med bilder som vi har vad som kallas “Förstörande Komprimering” där du inte förlorar någon data. Och ju mer du komprimera, ju mer data du förlorar.

Detta är vad som leder till dessa hemska utseende Jpeg-bilder som folk har laddat upp, delas och screenshotted flera gånger. Varje gång blir bilden komprimeras, det förlorar en del data.

Här är ett exempel. Detta är en skärmdump jag tog på mig det har inte varit komprimerad alls.

Jag tog sedan skärmdump och sprang igenom Photoshop flera gånger, varje gång med att exportera det som en låg kvalitet JPEG. Här är resultatet.

Ser ganska illa, eller hur?

Nåväl, detta är bara ett värsta-fall-scenario, att exportera till 0% JPEG-kvalitet varje gång. För jämförelse, här är en 50% kvalitet JPEG, som är nästan omöjlig att skilja från den källa som PNG-bild om du blåser upp det och ta en närmare titt.

PNG för denna bild var 200 KB i storlek, men detta 50% kvalitet JPEG är bara 28 KB.

Så hur fungerar det att spara så mycket utrymme? Tja, JPEG-algoritmen är en bedrift av teknik. De flesta bilder för lagring av en lista av tal, där varje rad representerar en enda pixel.

JPEG gör inget av detta. I stället lagrar bilder med hjälp av något som kallas en Diskret Cosinus Transform, som är en samling av sinusvågor läggs samman i varierande intensitet. Den använder 64 olika ekvationer, men de flesta av dessa inte får användas. Detta är vad kvalitet reglaget för JPEG i Photoshop och andra bild-appar gör—välj hur många ekvationer att använda. De appar som sedan använda Huffman-kodning för att minska filstorleken ytterligare.

Detta ger Jpeg-filer i ett vansinnigt högt kompressionsförhållande, vilket kan minska en fil som skulle ha flera megabyte ner till ett par kilobyte, beroende på kvalitet. Naturligtvis, om du använder den för mycket, att du slutar med detta:

Att bilden är hemsk. Men mindre mängder av JPEG-komprimering kan ha en betydande inverkan på storleken på filen, och detta gör att JPEG-mycket användbart för bildkomprimering på webbplatser. De flesta bilder du ser på nätet är komprimerade för att spara på nerladdning, särskilt för mobila användare med dålig data anslutningar. I själva verket är alla bilder på How-To Geek har komprimerats för att göra sidan laddar snabbare, och du förmodligen aldrig märkt.

Video Komprimering

Video fungerar lite annorlunda bilder. Man skulle kunna tro att de bara skulle komprimera varje ram av video med JPEG, och de gör verkligen det, men det finns en bättre metod för video.

Vi använder något som kallas “interframe komprimering,” som beräknar förändringar mellan varje bildruta och endast lagrar dem. Så, till exempel, om du har en relativt fortfarande skott som tar upp flera sekunder i en video, en mycket utrymme får sparas eftersom den komprimeringsalgoritm som inte behöver förvara alla grejer i den scen som inte förändras. Interframe komprimering är den främsta anledningen till att vi har digital-TV och webb-video alls. Utan det, videor skulle vara hundratals gigabyte, mer än den genomsnittliga hårddisk storlek i 2005, när YouTube lanserades.

Dessutom, eftersom interframe komprimering fungerar bäst med mestadels stillastående video, detta är varför konfetti ruiner video kvalitet.

Obs: GIF inte göra detta, vilket är anledningen till animerade Gif-filer är ofta mycket kort och liten, men fortfarande har en ganska stor filstorlek.

En annan sak att tänka på om videon är dess bitrate—den mängd data som är tillåtna i varje sekund. Om din bitrate är 200 kb/s, till exempel, din video kommer att se ganska dålig. Kvalitet går upp så bitrate går upp, men efter ett par megabyte per sekund, du får avtagande avkastning.

Detta är en in-zoomad ram tagen från en video av en manet. Den till vänster är på 3 mbit/s, och den till höger är 100Mb/s.

En 30x öka i storlek, men inte mycket ökning i kvalitet. I allmänhet, YouTube-videor sitta runt 2-10 mb/s beroende på din anslutning, som allt mer skulle förmodligen inte vara märkt.

Denna demo fungerar bättre med den faktiska video, så om du vill kolla upp det för dig själv, kan du ladda ner samma bitrate testa videor som används här.

Komprimering Av Ljud

Komprimering av ljud fungerar mycket på samma sätt till text och bild komprimering. Där JPEG-tar bort detaljer ur en bild som du inte ser, ljud komprimering gör samma sak för ljud. Du kanske inte behöver höra det knarrande gitarr plocka på strängen om den faktiska gitarr är mycket, mycket högre.

MP3 använder också bitrate, som sträcker sig från den lägre delen av 48 och 96 kbps (den lägre delen) till 128 och 240kbps (ganska bra) till 320 kbit / s (high-end-ljud), kommer du troligen bara höra skillnaden med exceptionellt bra hörlurar (och öron).

Det finns även förlustfri komprimering codecs för audio—det viktigaste är att FLAC—som använder LZ77-kodning för att levererar helt förlustfritt ljud. Vissa människor svär vid FLAC är perfekt ljudkvalitet, men med förekomsten av MP3, det verkar de flesta människor antingen inte kan berätta eller inte ihåg den skillnaden.