Kaip veikia failų suspaudimas?

Turinys:

Kaip veikia failų suspaudimas?
Kaip veikia failų suspaudimas?

Video: Kaip veikia failų suspaudimas?

Video: Kaip veikia failų suspaudimas?
Video: How to monitor Frame rate in any Games [Show in-game FPS] - YouTube 2024, Kovas
Anonim
Programinės įrangos inžinieriai visada sukūrė naujus būdus, kaip įdėti daugybę duomenų į mažą erdvę. Tai buvo tiesa, kai mūsų standieji diskai buvo nedideli, o interneto atsiradimas ką tik padarė kritinę. Failų suspaudimas vaidina svarbų vaidmenį sujungiant mus, leisdamas mums siųsti mažiau duomenų linijoje, kad galėtume greičiau atsisiųsti ir tinkamesnius jungtis į užsiimtus tinklus.
Programinės įrangos inžinieriai visada sukūrė naujus būdus, kaip įdėti daugybę duomenų į mažą erdvę. Tai buvo tiesa, kai mūsų standieji diskai buvo nedideli, o interneto atsiradimas ką tik padarė kritinę. Failų suspaudimas vaidina svarbų vaidmenį sujungiant mus, leisdamas mums siųsti mažiau duomenų linijoje, kad galėtume greičiau atsisiųsti ir tinkamesnius jungtis į užsiimtus tinklus.

Taigi, kaip tai veikia?

Norint atsakyti į šį klausimą reikėtų paaiškinti tam tikrą labai sudėtingą matematiką, žinoma, daugiau nei mes galime įtraukti į šį straipsnį, tačiau jums nereikia tiksliai suprasti, kaip jis veikia matematiškai suprasti pagrindai.

Populiariausi teksto suspaudimo bibliotekos remiasi dviem glaudinimo algoritmais, tuo pačiu metu naudojantys labai didelius suspaudimo laipsnius. Šie du algoritmai yra "LZ77" ir "Huffman kodavimas". Huffmano kodavimas yra gana sudėtingas, ir mes čia nebus išsamiai apibūdinti. Visų pirma, jis naudojasi šiek tiek išgalvotas matematikos priskirti trumpesnįdvejetainiai kodai atskiromis raidėmis, proceso metu mažėja failų dydžiai. Jei norite sužinoti daugiau apie tai, peržiūrėkite šį straipsnį apie tai, kaip veikia šis kodas, arba šį paaiškintuvą "Computerphile".

Kita vertus, LZ77 yra palyginti paprastas ir apie tai mes kalbėsime apie tai. Juo siekiama pašalinti pasikartojančius žodžius ir juos pakeisti mažesniu raktu, kuris žymi žodį.

Pavyzdžiui, paimkite šį trumpą tekstą:

LZ77 algoritmas pažvelgė į šį tekstą, suprato, kad tris kartus pakartoja "howtogeek" ir pakeičia jį taip:
LZ77 algoritmas pažvelgė į šį tekstą, suprato, kad tris kartus pakartoja "howtogeek" ir pakeičia jį taip:
Tada, kai jis nori perskaityti tekstą, jis pakeis kiekvieną (h) egzempliorių "howtogeek", grąžins mus į pradinį frazę.
Tada, kai jis nori perskaityti tekstą, jis pakeis kiekvieną (h) egzempliorių "howtogeek", grąžins mus į pradinį frazę.

Mes vadiname suspaudimu kaip "be nuostolių" - duomenys, kuriuos įvedėte, yra tokie patys kaip jūsų gaunami duomenys. Nieko nėra prarasta.

Iš tikrųjų, LZ77 nenaudoja raktų sąrašo, bet pakeičia antrą ir trečią įvykius su nuoroda atgal į atmintį:

Taigi dabar, kai pasieks (h), jis grįš į "howtogeek" ir perskaitys tai vietoj.
Taigi dabar, kai pasieks (h), jis grįš į "howtogeek" ir perskaitys tai vietoj.

Jei jus domina išsamesnis paaiškinimas, šis "Computerphile" vaizdo įrašas yra gana naudingas.

Dabar tai idealizuotas pavyzdys. Iš tikrųjų, dauguma teksto suspaudžiami su tokiais mažais raktais kaip tik keli simboliai. Pavyzdžiui, žodis "the" būtų suspaustas, net jei jis pasirodys tokiais žodžiais kaip "ten", "jų" ir "tada". Pakartotiniu tekstu galite gauti keletą netikėtų glaudinimo santykių. Paimkite šį tekstinį failą su žodžiu "howtogeek", kartojama 100 kartų. Originalus teksto failas yra trijų kilobaitų dydžio. Tačiau suspaudus jis užima tik 158 baitų. Tai beveik 95% suspaudimas.

Dabar akivaizdu, kad tai yra gana ekstremali pavyzdys, nes mes turėjome tą patį žodį pakartoti. Paprastai, jūs greičiausiai pagausite apie 30-40% suspaudimo naudojant suspaudimo formą, pavyzdžiui ZIP, failo, kuris yra daugiausia tekstas.
Dabar akivaizdu, kad tai yra gana ekstremali pavyzdys, nes mes turėjome tą patį žodį pakartoti. Paprastai, jūs greičiausiai pagausite apie 30-40% suspaudimo naudojant suspaudimo formą, pavyzdžiui ZIP, failo, kuris yra daugiausia tekstas.

Šis LZ77 algoritmas taikomas ne tik tekstui, bet ir visiems dvejetainiams duomenims, nors tekstą paprastai lengviau suspausti dėl to, kiek daug kartų žodžių vartoja dauguma kalbų. Pavyzdžiui, tokia kalba kaip kinų kalba gali būti šiek tiek sunkiau suspausti nei anglų kalba.

Kaip veikia vaizdo ir kompresijos kokybė?

Vaizdo ir garso suspaudimas veikia labai skirtingai. Skirtingai nuo teksto, kuriame galite suskaidyti be nuostolių, o duomenų nėra, su vaizdais turime vadinamąjį "Lossy Compression", kuriame prarandate kai kuriuos duomenis. Ir kuo daugiau suglaudinsite, tuo daugiau duomenų jūs prarasite.
Vaizdo ir garso suspaudimas veikia labai skirtingai. Skirtingai nuo teksto, kuriame galite suskaidyti be nuostolių, o duomenų nėra, su vaizdais turime vadinamąjį "Lossy Compression", kuriame prarandate kai kuriuos duomenis. Ir kuo daugiau suglaudinsite, tuo daugiau duomenų jūs prarasite.

Tai sukelia tuos žiaurius JPEG vaizdus, kuriuos žmonės įkėlė, bendrino ir žiūri kelis kartus. Kiekvieną kartą, kai vaizdas tampa suspaustas, jis praranda kai kuriuos duomenis.

Štai pavyzdys. Tai yra ekrano kopija, kurią aš paėmė, kad nebuvo suspaustas.

Tada aš paėmė šį ekrano kopiją ir paleido jį "Photoshop" kelis kartus, kiekvieną kartą eksportuodamas jį kaip žemos kokybės JPEG. Štai rezultatas.
Tada aš paėmė šį ekrano kopiją ir paleido jį "Photoshop" kelis kartus, kiekvieną kartą eksportuodamas jį kaip žemos kokybės JPEG. Štai rezultatas.
Atrodo gana blogai, ar ne?
Atrodo gana blogai, ar ne?

Na, tai tik blogiausias scenarijus, kiekvieną kartą eksportuojant 0% JPEG kokybę. Palyginimui, čia yra 50% kokybės JPEG, kuris yra beveik neatskiriamas nuo šaltinio PNG atvaizdo, nebent jį sugadinsite ir atidžiai atrodysite.

Šio vaizdo dydis PNG buvo 200 KB dydžio, tačiau šis 50% kokybės JPEG yra tik 28 KB.
Šio vaizdo dydis PNG buvo 200 KB dydžio, tačiau šis 50% kokybės JPEG yra tik 28 KB.

Taigi, kaip tai taupo tiek daug vietos? Na, JPEG algoritmas yra inžinerijos feat. Dauguma atvaizdų saugo skaičių sąrašą, kiekvienas skaičius rodo vieną tašką.

"JPEG" tai nė vienas. Vietoje to, jis saugo vaizdus, naudodamas kažką vadinamą Diskretiška kosinine transformacija, ty sinoninių bangų kolekcija, kuri papildo skirtingą intensyvumą. Jis naudoja 64 skirtingas lygtis, tačiau dauguma iš jų nenaudoja. Tai yra kokybiška "JPEG" slankiklio funkcija "Photoshop" ir kitose vaizdo programose - pasirinkite, kiek lygčių reikia naudoti. Programos naudoja Huffman kodavimą, kad dar labiau sumažintų failo dydį.

Tai suteikia JPEG nepaprastai didelį suspaudimo laipsnį, kuris gali sumažinti failą, kuris, atsižvelgiant į kokybę, sumažintų keletą megabaitų iki pora kilobaitų. Žinoma, jei jį naudosite per daug, tai baigsite:

Šis vaizdas yra siaubingas.Tačiau nedideli JPEG suspaudimo kiekiai gali turėti reikšmingą įtaką failų dydžiui, todėl JPEG labai naudinga, kad vaizdo įrašų suspaudimas būtų tinklalapiuose. Dauguma nuotraukų, kurias matote internete, yra suspaustos, kad būtų išsaugotas atsisiuntimo laikas, ypač mobiliesiems vartotojams, turintiems prastą duomenų ryšį. Iš tikrųjų, visi "How-To Geek" vaizdai suglaudinami, kad puslapis būtų įkeltas greičiau, o jūs tikriausiai niekada nepastebėjote.
Šis vaizdas yra siaubingas.Tačiau nedideli JPEG suspaudimo kiekiai gali turėti reikšmingą įtaką failų dydžiui, todėl JPEG labai naudinga, kad vaizdo įrašų suspaudimas būtų tinklalapiuose. Dauguma nuotraukų, kurias matote internete, yra suspaustos, kad būtų išsaugotas atsisiuntimo laikas, ypač mobiliesiems vartotojams, turintiems prastą duomenų ryšį. Iš tikrųjų, visi "How-To Geek" vaizdai suglaudinami, kad puslapis būtų įkeltas greičiau, o jūs tikriausiai niekada nepastebėjote.

Vaizdo suspaudimas

Vaizdo įrašai veikia šiek tiek kitaip. Jūs manote, kad jie tiesiog suspaudžia visus vaizdo įrašų rėmus JPEG, ir jie tikrai tai daro, tačiau yra geresnis vaizdo įrašų metodas.
Vaizdo įrašai veikia šiek tiek kitaip. Jūs manote, kad jie tiesiog suspaudžia visus vaizdo įrašų rėmus JPEG, ir jie tikrai tai daro, tačiau yra geresnis vaizdo įrašų metodas.

Mes naudojame kažką, vadinamą "tarpsluoksnio suspaudimu", kuris apskaičiuoja pakeitimus tarp kiekvieno rėmo ir tik juos saugo. Pavyzdžiui, jei vaizdo įraše yra gana šiek tiek fotografuojamas vaizdas, kuris trunka keletą sekundžių, išgelbėti daug vietos, nes suspaudimo algoritmas nereikia saugoti visko, kas nesikeičia. Interprecinis suspaudimas yra pagrindinė priežastis, kodėl mes turime skaitmeninę televiziją ir interneto vaizdo įrašus. Be to, vaizdo įrašai būtų šimtai gigabaitų, daugiau nei vidutinis kietojo disko dydis 2005 m., Kai "YouTube" pradėjo veikti.

Be to, kadangi tarpsluoksnio suspaudimas geriausiai veikia su daugiausia stacionariu vaizdo įrašu, todėl konfeti sutrikdo vaizdo kokybę.

Pastaba: "GIF" to nepadaro, todėl animuotieji GIF dažnai yra labai trumpi ir maži, tačiau vis tiek yra gana didelis failo dydis.

Kitas dalykas, kurį reikia nepamiršti apie vaizdo įrašą, yra jo greitis - duomenų kiekis leidžiamas kas sekundę. Pavyzdžiui, jei jūsų duomenų srautas yra 200 kb / s, jūsų vaizdo įrašas atrodys gana blogai. Kokybė pakyla, kai beryšė padidėja, bet po poros megabaitų per sekundę gaunate mažėjančią grąžą.

Tai padidintas rėmelis, paimtas iš medūzos vaizdo. Kairėje pusėje yra 3Mb / s, o dešinėje - 100Mb / s.

30 kartų padidinti failo dydį, bet ne daug padidinti kokybę. Paprastai "YouTube" vaizdo įrašai sustoja maždaug 2-10 MB / s priklausomai nuo jūsų ryšio, nes tikriausiai nebūtų pastebėta nieko daugiau.
30 kartų padidinti failo dydį, bet ne daug padidinti kokybę. Paprastai "YouTube" vaizdo įrašai sustoja maždaug 2-10 MB / s priklausomai nuo jūsų ryšio, nes tikriausiai nebūtų pastebėta nieko daugiau.

Ši demo versija geriau veikia su faktiniu vaizdo įrašu, taigi, jei norite patikrinti save patys, galite atsisiųsti tuos pačius bitrate testo vaizdo įrašus, kurie čia naudojami.

Garso suspaudimas

Garso suspaudimas labai panašus į teksto ir vaizdo suspaudimą. Jei JPEG pašalina išsamią informaciją iš vaizdo, kurią nematysite, garsų suspaudimas nesiskiria nuo garso. Jums gali tekti išgirsti gitaros pasirinkimo garsą ant stygos, jei tikroji gitara yra daug, daug garsiau.
Garso suspaudimas labai panašus į teksto ir vaizdo suspaudimą. Jei JPEG pašalina išsamią informaciją iš vaizdo, kurią nematysite, garsų suspaudimas nesiskiria nuo garso. Jums gali tekti išgirsti gitaros pasirinkimo garsą ant stygos, jei tikroji gitara yra daug, daug garsiau.

MP3 taip pat naudoja bitų srautą, pradedant žemiausiu 48 ir 96 kbps greičiu (iki žemiausio pabaigos) iki 128 ir 240 kb / s (gana gera) iki 320 kb / s (aukščiausios klasės garso įrašas), ir jūs tikriausiai girdėsite tik skirtumą su itin geromis ausinėmis ( ir ausis).

Taip pat yra garso nesuderinamų kompresijos kodekų, kurių pagrindinis yra FLAC, kuris naudoja LZ77 koduotę, kad būtų galima visiškai neprarasti garso. Kai kurie žmonės prisiekia idealia garso kokybe, bet su MP3 paplitimu, atrodo, kad dauguma žmonių negali pasakyti ar neprieštarauja skirtumui.

Rekomenduojamas: