Kako funkcionira kompresija datoteka?

Sadržaj:

Kako funkcionira kompresija datoteka?
Kako funkcionira kompresija datoteka?
Anonim
Softverski inženjeri uvijek su razvili nove načine prilagodbe velikog broja podataka u mali prostor. Bilo je to točno kada su naši tvrdi diskovi bili sitni, a pojavljivanje interneta upravo je učinilo još kritičnijim. Kompresija datoteka igra veliku ulogu u povezivanju nas, dopuštajući nam slanje manje podataka niz liniju kako bismo imali brže preuzimanje i prilagodili više veza na zauzetim mrežama.
Softverski inženjeri uvijek su razvili nove načine prilagodbe velikog broja podataka u mali prostor. Bilo je to točno kada su naši tvrdi diskovi bili sitni, a pojavljivanje interneta upravo je učinilo još kritičnijim. Kompresija datoteka igra veliku ulogu u povezivanju nas, dopuštajući nam slanje manje podataka niz liniju kako bismo imali brže preuzimanje i prilagodili više veza na zauzetim mrežama.

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:

LZ77 algoritam bi pogledao ovaj tekst, shvatio da ponavlja "howtogeek" tri puta i promijeni ga na ovo:
LZ77 algoritam bi pogledao ovaj tekst, shvatio da ponavlja "howtogeek" tri puta i promijeni ga na ovo:
Zatim, kada želi pročitati tekst natrag, zamijenit će svaki primjerak (h) s "howtogeekom", vraćajući nas natrag na izvorni izraz.
Zatim, kada želi pročitati tekst natrag, zamijenit će svaki primjerak (h) s "howtogeekom", vraćajući nas natrag na izvorni izraz.

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:

Dakle, sada, kada dođe do (h), ona će se osvrnuti na "howtogeek" i pročitati umjesto toga.
Dakle, sada, kada dođe do (h), ona će se osvrnuti na "howtogeek" i pročitati umjesto toga.

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.

Sada očito, to je prilično ekstremni primjer jer smo imali istu riječ ponavljanim. U općenitoj praksi vjerojatno ćete dobiti oko 30-40% kompresije pomoću formata kompresije kao što je ZIP na datoteci koja je uglavnom tekst.
Sada očito, to je prilično ekstremni primjer jer smo imali istu riječ ponavljanim. U općenitoj praksi vjerojatno ćete dobiti oko 30-40% kompresije pomoću formata kompresije kao što je ZIP na datoteci koja je uglavnom tekst.

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?

Kompresija video i audio zapisa vrlo je drugačija. Za razliku od teksta gdje možete imati kompresiju bez gubitaka, a podaci se ne gube, s slikama imamo ono što se zove "Lossy Compression" gdje izgubite neke podatke. Što više komprimirati, to više podataka izgubite.
Kompresija video i audio zapisa vrlo je drugačija. Za razliku od teksta gdje možete imati kompresiju bez gubitaka, a podaci se ne gube, s slikama imamo ono što se zove "Lossy Compression" gdje izgubite neke podatke. Što više komprimirati, to više podataka izgubite.

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.

Zatim sam snimio snimku zaslona i pokrenuo ga kroz Photoshop više puta, svaki put kad ga izvezem kao JPC visoke kakvoće. Ovo je rezultat.
Zatim sam snimio snimku zaslona i pokrenuo ga kroz Photoshop više puta, svaki put kad ga izvezem kao JPC visoke kakvoće. Ovo je rezultat.
Izgleda prilično loše, zar ne?
Izgleda prilično loše, zar ne?

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.

PNG za ovu sliku bio je 200 KB, ali ovaj 50% kvalitetni JPEG je samo 28 KB.
PNG za ovu sliku bio je 200 KB, ali ovaj 50% kvalitetni JPEG je samo 28 KB.

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:

Ta je slika strašna.No manje količine JPEG kompresije mogu imati značajan utjecaj na veličinu datoteke, što čini JPEG vrlo korisnim za komprimiranje slika na web stranicama. Većina slika koje vidite na mreži komprimirana je radi uštede na vremenima preuzimanja, posebno za korisnike mobilnih mreža s lošim podatkovnim vezama. Zapravo, sve slike na How-To Geeku bile su komprimirane kako bi učitavanje stranice bile brže i vjerojatno nikad niste primijetili.
Ta je slika strašna.No manje količine JPEG kompresije mogu imati značajan utjecaj na veličinu datoteke, što čini JPEG vrlo korisnim za komprimiranje slika na web stranicama. Većina slika koje vidite na mreži komprimirana je radi uštede na vremenima preuzimanja, posebno za korisnike mobilnih mreža s lošim podatkovnim vezama. Zapravo, sve slike na How-To Geeku bile su komprimirane kako bi učitavanje stranice bile brže i vjerojatno nikad niste primijetili.

Komprimiranje videozapisa

Videozapis se razlikuje od slika. Smatrali biste da će samo komprimirati svaki okvir videozapisa pomoću JPEG-a, a to sigurno čine, ali postoji bolja metoda za videozapise.
Videozapis se razlikuje od slika. Smatrali biste da će samo komprimirati svaki okvir videozapisa pomoću JPEG-a, a to sigurno čine, ali postoji bolja metoda za videozapise.

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.

Povećanje veličine datoteke od 30x, ali ne znatno povećanje kvalitete. Općenito, videozapisi na usluzi YouTube sjede oko 2-10Mb / s, ovisno o vašoj vezi, kao i sve više vjerojatno ne bi primijetili.
Povećanje veličine datoteke od 30x, ali ne znatno povećanje kvalitete. Općenito, videozapisi na usluzi YouTube sjede oko 2-10Mb / s, ovisno o vašoj vezi, kao i sve više vjerojatno ne bi primijetili.

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

Audio kompresija funkcionira vrlo slično tekstu i kompresiji slike. Gdje JPEG uklanja detalje iz slike koju nećete vidjeti, kompresija zvuka radi isto za zvukove. Možda nećete morati čuti škripanje gitara na traci ako je stvarna gitara mnogo, puno glasnija.
Audio kompresija funkcionira vrlo slično tekstu i kompresiji slike. Gdje JPEG uklanja detalje iz slike koju nećete vidjeti, kompresija zvuka radi isto za zvukove. Možda nećete morati čuti škripanje gitara na traci ako je stvarna gitara mnogo, puno glasnija.

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.

Preporučeni: