Kako deluje stiskanje datotek?
Programski inženirji so vedno razvili nove načine prilagajanja veliko podatkov v majhen prostor. Bilo je res, ko so bili naši trdi diski majhni, in prihod interneta je pravkar postal bolj kritičen. Stiskanje datotek igra veliko vlogo pri povezovanju nas, saj nam omogoča, da pošiljamo manj podatkov po liniji, da bomo lahko hitreje prenesli podatke in povezali več povezav na zasedena omrežja..
Torej, kako deluje?
Če želite odgovoriti na to vprašanje, bi bilo treba pojasniti nekaj zelo zapletenih matematik, zagotovo več, kot jih lahko pokrijemo v tem članku, vendar vam ni treba natančno razumeti, kako deluje matematično, da razumete osnove..
Najbolj priljubljene knjižnice za stiskanje besedila so odvisne od dveh algoritmov stiskanja, pri čemer oba uporabita hkrati za doseganje zelo visokih razmerij stiskanja. Ta dva algoritma sta »LZ77« in »Huffmanovo kodiranje«. Huffmanovo kodiranje je precej zapleteno in tega ne bomo podrobneje opisali tukaj. Predvsem uporablja nekaj fantazijske matematike, da dodeli krajše binarnih kod na posamezne črke, zmanjšanje velikosti datotek v postopku. Če želite izvedeti več o tem, si oglejte ta članek o tem, kako deluje koda, ali ta razlagalnik s Computerphile.
Po drugi strani pa je LZ77 razmeroma preprost in o tem bomo tukaj govorili. Prizadeva si odstraniti podvojene besede in jih nadomestiti z manjšim "ključem", ki predstavlja besedo.
Vzemite ta kratek del besedila, na primer:
Algoritem LZ77 bi pogledal to besedilo, ugotovil, da trikrat ponavlja "howtogeek" in ga spremeni v to:
Potem, ko želi prebrati besedilo nazaj, bo nadomestil vsak primerek (h) z »howtogeek« in nas vrnil na prvotno frazo.
Stiskanje, kot je ta »brez izgube« - podatke, ki jih vnesete, so enaki kot podatki, ki jih dobite. Nič ni izgubljeno.
V resnici pa LZ77 ne uporablja seznama ključev, ampak zamenja drugi in tretji pojav s povezavo nazaj v spomin:
Torej, ko pride do (h), bo pogledal nazaj na "howtogeek" in to prebral.
Če vas zanima podrobnejša razlaga, je ta video iz Computerphilea zelo koristen.
To je idealiziran primer. V resnici je večina besedila stisnjena z malimi ključi. Na primer, beseda "bi" bi bila stisnjena, tudi če se pojavi v besedah, kot so "tam", "njihova" in "takrat". Vzemite to besedilno datoteko z besedo "howtogeek", ki se ponovi 100-krat. Izvirna besedilna datoteka je velikosti treh kilobajtov. Čeprav je stisnjen, ima le 158 bajtov. To je skoraj 95% stiskanje.
Očitno je to precej ekstremen primer, saj smo znova in znova ponovili isto besedo. V splošni praksi boste verjetno dobili približno 30-40% stiskanje z obliko stiskanja, kot je ZIP, v datoteki, ki je večinoma besedilna.
Algoritem LZ77 se uporablja za vse binarne podatke, ne samo besedilo, čeprav je besedilo na splošno lažje stisniti zaradi tega, koliko besed se ponavlja večina jezikov. Jezik, kot je kitajski, je morda težje stisniti, kot je na primer angleščina.
Kako deluje kompresija slike in videa?
Video in avdio stiskanje deluje zelo različno. Za razliko od besedila, kjer lahko uporabljate kompresijo brez izgube podatkov in se podatki ne izgubijo, s slikami imamo tako imenovano »Lossy Compression«, kjer izgubite nekaj podatkov. In bolj ko stiskate, več podatkov izgubite.
To je tisto, kar vodi do tistih grozovitih JPEG-jev, ki so jih ljudje večkrat naložili, delili in posneli. Vsakič, ko se slika stisne, izgubi nekaj podatkov.
Tukaj je primer. To je posnetek zaslona, ki ga sploh nisem stisnil.
Nato sem posnela ta screenshot in ga večkrat pognala skozi Photoshop, vsakič sem ga izvozila kot JPEG nizke kakovosti. Tukaj je rezultat.
Izgleda zelo slabo, prav?
No, to je samo najslabši možni scenarij, vsakokrat izvozi pri 0% kakovosti JPEG. Za primerjavo, tukaj je 50-odstotna kakovostna JPEG, ki se skoraj ne razlikuje od izvorne PNG slike, razen če jo poganjate in pogledate bližje.
PNG za to sliko je bila velikosti 200 KB, vendar je ta JPEG s kakovostjo 50% samo 28 KB.
Kako torej prihranimo toliko prostora? No, algoritem JPEG je tehnični podvig. Večina slik shranjuje seznam številk, pri čemer vsaka številka predstavlja eno slikovno piko.
JPEG tega ne počne. Namesto tega shrani slike z nekaj, kar se imenuje Diskretna kosinusna transformacija, ki je zbirka sinusnih valov, ki se dodajo skupaj z različnimi intenzivnostmi. Uporablja 64 različnih enačb, vendar jih večina ne uporablja. To pomeni, da drsnik za kakovost JPEG v Photoshopu in drugih aplikacijah za slike izbere, koliko enačb bo uporabil. Aplikacije nato uporabljajo Huffmanovo kodiranje, da še bolj zmanjšajo velikost datoteke.
To JPEG-jem daje neverjetno visoko razmerje stiskanja, kar lahko zmanjša datoteko, ki bi bila več megabajtov do nekaj kilobajtov, odvisno od kakovosti. Seveda, če ga uporabljate preveč, boste na koncu dobili to:
Ta podoba je grozna. Vendar manjše količine stiskanja JPEG lahko pomembno vplivajo na velikost datoteke, zato je JPEG zelo uporaben za stiskanje slik na spletnih mestih. Večina slik, ki jih vidite na spletu, je stisnjena, da prihranite čas prenosa, zlasti za mobilne uporabnike s slabimi podatkovnimi povezavami. Pravzaprav so bile vse slike na računalnikih How-To Geek stisnjene, da bi bila stran hitrejša in verjetno še nikoli niste opazili.
Stiskanje videoposnetkov
Video se nekoliko razlikuje od slik. Mislili bi, da bi zgolj obkrožili vsak okvir videa z uporabo JPEG-a in to zagotovo naredili, vendar je boljša metoda za video.
Uporabljamo nekaj, kar imenujemo »medframe kompresija«, ki izračunava spremembe med posameznimi okviri in jih shranjuje. Če imate na primer relativno malo posnetka, ki traja nekaj sekund v videoposnetku, se shrani veliko prostora, ker algoritem stiskanja ne potrebuje shranjevanja vseh stvari v prizoru, ki se ne spreminjajo. Interframe stiskanje je glavni razlog, da imamo digitalno televizijo in spletni video. Brez tega bi bili videoposnetki na stotine gigabajtov, kar je več kot povprečna velikost trdega diska leta 2005, ko se je YouTube zagnal.
Prav tako, ker medframe stiskanje najbolje deluje z večinoma stacionarnim videom, zato konfeti uničijo kakovost videa.
Opomba: GIF tega ne počne, zato so animirani GIF-i pogosto zelo kratki in majhni, vendar imajo še vedno veliko velikost datoteke.
Druga stvar, ki jo morate imeti v mislih glede videa, je njena bitna hitrost - količina podatkov, dovoljena v vsaki sekundi. Če je vaša bitna hitrost 200 kb / s, bo vaš videoposnetek videti precej slab. Kakovost narašča, ko se hitrost poveča, vendar se po nekaj megabajtih na sekundo zmanjša donosnost.
To je povečan okvir, posnet iz videa meduze. Ena na levi je pri 3Mb / s, tista na desni je 100Mb / s.
30x povečanje velikosti datoteke, vendar ne veliko povečanje kakovosti. Na splošno, video posnetki YouTube sedijo okrog 2-10Mb / s, odvisno od vaše povezave, saj nič več ne bi bilo opaziti.
Ta predstavitev deluje bolje z dejanskim videoposnetkom, tako da, če jo želite sami preveriti, lahko prenesete iste preskusne video posnetke, ki so bili uporabljeni tukaj.
Kompresija zvoka
Avdio stiskanje deluje zelo podobno kot stiskanje besedila in slik. Če JPEG odstrani podrobnosti iz slike, ki je ne boste videli, zvočna kompresija enako velja za zvoke. Morda ne boste morali slišati škripanje kitara pick na niz, če je dejanska kitara je veliko, veliko glasnejši.
MP3 uporablja tudi bitno hitrost, ki sega od nizkega konca 48 in 96 kbps (nizek konec) do 128 in 240 kb / s (kar je precej dobro) do 320 kb / s (high-end audio), in verjetno boste slišali samo razliko z izjemno dobrimi slušalkami ( in ušesa).
Obstajajo tudi kodeki za stiskanje brez izgube zvoka za avdio, glavni pa je FLAC, ki uporablja kodiranje LZ77 in zagotavlja popoln zvok brez izgube. Nekateri ljudje prisegajo na popolno kakovost zvoka FLAC-a, toda s prevalenco MP3 se zdi, da večina ljudi ne ve, ali ne moti razlike.