Pa kako radi?
Da biste odgovorili na to pitanje, to bi značilo objasniti neku vrlo složenu matematiku, svakako više nego što možemo pokriti u ovom članku, ali ne morate točno razumjeti kako matematički radi kako bi razumio osnove.
Najpopularnije biblioteke za komprimiranje teksta oslanjaju se na dva kompresijska algoritma, koji istodobno koriste kako bi se postigli vrlo visoki omjeri kompresije. Ova dva algoritma su "LZ77" i "Huffmanov kodiranje". Kodiranje Huffman je prilično komplicirano, a ovdje nećemo detaljno opisati. Prvenstveno, upotrebljava neku fantazijsku matematiku za dodjeljivanje kraćebinarni kodovi na pojedinačna slova, smanjujući veličine datoteka u tom procesu. Ako želite saznati više o tome, pogledajte ovaj članak o tome kako kôd funkcionira ili ovo objašnjenje od strane računala.
LZ77, s druge strane, relativno je jednostavan i o čemu ćemo ovdje govoriti. Ona nastoji ukloniti duple riječi i zamijeniti ih manjim "ključem" koji predstavlja riječ.
Uzmite ovaj kratki tekst na primjer:
Zvučamo kompresiju poput ovog "bez gubitaka" - podaci koje unesete isti su kao i podaci koje izlazite. Ništa se ne gubi.
U stvarnosti, LZ77 ne koristi popis ključeva, već zamjenjuje drugu i treću pojavu s vezom natrag u memoriju:
Ako ste zainteresirani za detaljnije objašnjenje, ovaj videozapis iz programa Computerphile prilično je koristan.
Sada je to idealizirani primjer. U stvarnosti je većina teksta komprimiran sa tipkama manjim od samo nekoliko znakova. Na primjer, riječ "ja" bi bila komprimirana čak i kad se pojavi riječima "tamo", "njih" i "zatim". Uz ponovljeni tekst, možete dobiti neke lude omjere kompresije. Uzmite ovu tekstualnu datoteku s riječju "howtogeek" ponovljeno 100 puta. Izvorna tekstualna datoteka veličine je tri kilobajta. Međutim, kada se komprimira, ona zauzimaju samo 158 bajta. To je gotovo 95% kompresije.
Ovaj LZ77 algoritam se odnosi na sve binarne podatke, usput, a ne samo na tekst, iako je tekst lakše komprimirati zbog broja ponovljenih riječi koje većina jezika koristi. Primjerice, jezik poput kineskog može biti malo teže komprimirati nego engleski.
Kako funkcionira slika i video kompresije?
To je ono što vodi do onih zlonamjernih JPEG-ova koje su korisnici učitali, dijelili i pregledali nekoliko puta. Svaki put kad se slika stisne, gubi podatke.
Evo primjera. Ovo je screenshot koji sam uzeo da uopće nije komprimiran.
Pa, ovo je samo najgori scenarij, izvozi svaki put na 0% JPEG kvalitete. Za usporedbu, evo 50% kvalitetnog JPEG-a, koji se gotovo ne razlikuje od izvornog PNG slike, osim ako ga ne dišite i ne budete bliski pogledali.
Pa kako to spasiti toliko prostora? Pa, JPEG algoritam je stvaranje inženjeringa. Većina slika pohranjuje popis brojeva, pri čemu svaki broj predstavlja jedan piksel.
JPEG ništa od toga. Umjesto toga, pohranjuje slike pomoću nečega što se zove diskretna kozin transformacija, koja je zbirka sinusnih valova koji se zbrajaju pri različitim intenzitetima. Koristi 64 različite jednadžbe, ali većina se ne koristi. To je ono što klizač za kvalitetu JPEG-a u Photoshopu i drugim slikovnim aplikacijama odabire koliko ćete jednadžbi koristiti. Aplikacije zatim upotrebljavaju Huffmanov kodiranje kako bi se još više smanjila veličina datoteke.
To daje JPEG-ima neznatno visok omjer kompresije koji može smanjiti datoteku koja će biti višestruko megabajte do nekoliko kilobajta, ovisno o kvaliteti. Naravno, ako ga previše koristite, završite s ovim:
Komprimiranje videozapisa
Koristimo nešto što se naziva "kompresija sučelja", koja izračunava izmjene između svakog okvira i pohranjuje samo one. Na primjer, ako imate relativno mirni snimak koji za nekoliko sekundi zauzima videozapis, puno prostora se spremaju jer algoritam za komprimiranje ne treba pohraniti sve stvari na scenu koja se ne mijenja. Kompresija interframe je glavni razlog zašto uopće imamo digitalni TV i web video. Bez toga videozapisi bi bili stotine gigabajta, više od prosječne veličine tvrdog diska u 2005 kada je pokrenuo YouTube.
Također, budući da kompresija sučelja djeluje najbolje s većinom stacionarnim videozapisom, zato konfeti ruše kvalitetu videozapisa.
Napomena: GIF to ne čini, zbog čega su animirani GIF-ovi često vrlo kratki i mali, ali još uvijek imaju veliku veličinu datoteke.
Još jedna stvar koju treba imati na umu o videozapisu jest njegova brzina prijenosa - količina podataka dozvoljena u svakoj sekundi. Na primjer, ako je brzina prijenosa od 200 kb / s, vaš će se videozapis izgledati prilično loš. Kvaliteta se povećava s povećanjem brzine prijenosa, ali nakon nekoliko megabajta u sekundi dobivate smanjenje vraćanja.
Ovo je zumirani okvir snimljen iz videa meduza. Onaj s lijeve strane nalazi se na 3Mb / s, a desno na 100Mb / s.
Ova demo funkcionira bolje s stvarnim videozapisom, pa ako želite to provjeriti sami, možete preuzeti iste testne videozapise brzog prijenosa koji se ovdje koriste.
Audio kompresija
MP3 također koristi bitrate, od niskih krajeva od 48 i 96 kbps (niski kraj) do 128 i 240 kbps (prilično dobar) do 320 kbps (high-end audio), a vjerojatno ćete čuti razliku samo uz izuzetno dobre slušalice ( i uši).
Tu su i codec za kompresiju bez gubitaka za audio - glavni je FLAC - koji koristi LZ77 kodiranje za isporuku potpuno bez gubitaka. Neki se zaklinju prema savršenoj kvaliteti zvuka FLAC-a, ali s prevalencijom MP3-a, čini se da većina ljudi ili ne može reći ni ne smeta razlika.