Pagrindinis » kaip » Kaip veikia failų suspaudimas?

    Kaip veikia failų suspaudimas?

    Programinės įrangos inžinieriai visada sukūrė naujus būdus, kaip pritaikyti daug duomenų į mažą erdvę. Tiesa, kai mūsų kietieji diskai buvo nedideli, o interneto atsiradimas ką tik tapo kritiškesnis. Failų glaudinimas atlieka svarbų vaidmenį jungiantis mus, leisdami mums siųsti mažiau duomenų žemiau linijos, kad galėtume greičiau parsisiųsti ir daugiau tinklų prijungti prie užimamų tinklų.

    Taigi, kaip tai veikia?

    Kad atsakytumėte į šį klausimą, reikštų paaiškinti kai kuriuos labai sudėtingus matematikos aspektus, žinoma, daugiau nei galime aptarti šiame straipsnyje, tačiau jums nereikia tiksliai suprasti, kaip jis matematiškai veikia, kad suprastų pagrindus.

    Populiariausios bibliotekos tekstui suspausti remiasi dviem suspaudimo algoritmais, naudojant abu tuo pačiu metu, kad būtų pasiekti labai aukšti suspaudimo koeficientai. Šie du algoritmai yra „LZ77“ ir „Huffman kodai“. „Huffman“ kodavimas yra gana sudėtingas, ir mes čia nekalbėsime apie tai. Pirma, ji naudoja keletą išgalvotų matematikos, kad priskirtų trumpesnius dvejetainiai kodai prie atskirų raidžių, susitraukiantys failo dydžiai. Jei norite sužinoti daugiau apie tai, skaitykite šį straipsnį apie tai, kaip veikia kodas, arba šį „Computerphile“ paaiškinimą.

    Kita vertus, LZ77 yra gana paprasta ir apie tai kalbėsime. Juo siekiama pašalinti pasikartojančius žodžius ir pakeisti juos mažesniu „raktu“, kuris reiškia žodį.

    Paimkite šį trumpą tekstą, pavyzdžiui:

    LZ77 algoritmas pažvelgtų į šį tekstą, suprasdamas, kad jis kartoja „howtogeek“ tris kartus ir pakeičia jį į:

    Tada, kai jis nori perskaityti tekstą, jis pakeis kiekvieną (h) atvejį su „howtogeek“, atnešdamas atgal į pradinę frazę.

    Mes vadiname kompresiją, kaip šis „be nuostolių“ - duomenys, kuriuos įvedėte, yra tokie patys, kaip ir išeiti. Nieko nėra prarasta.

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

    Taigi dabar, kai jis patenka į (h), jis žiūri į „howtogeek“ ir jį perskaitys.

    Jei jus domina išsamesnis paaiškinimas, šis „Computerphile“ vaizdo įrašas yra labai naudingas.

    Dabar tai idealizuotas pavyzdys. Iš tikrųjų, dauguma tekstų yra suspaustas su tokiais mažais klavišais, kaip tik keli simboliai. Pavyzdžiui, žodis „the“ būtų suspaustas net tada, kai jis pasirodys tokiuose žodžiuose kaip „ten“, „jų“ ir „tada“. Kartojant tekstą, galite gauti kai kuriuos beprotiškus suspaudimo santykius. Paimkite šį tekstinį failą su žodžiu „howtogeek“ 100 kartų. Originalus tekstinis failas yra trijų kilobaitų dydžio. Kai suspaustas, jis užima tik 158 baitus. Tai beveik 95% suspaudimas.

    Akivaizdu, kad tai yra labai ekstremalus pavyzdys, nes mes tiesiog pakartojome tą patį žodį. Apskritai praktikoje, tikriausiai, gausite maždaug 30-40% suspaudimą naudojant kompresijos formatą, pvz., ZIP, faile, kuris dažniausiai yra tekstas.

    Šis LZ77 algoritmas taikomas visiems binariniams duomenims, beje, o ne tik tekstui, nors tekstas paprastai yra lengviau suspausti, nes daugelis kalbų naudoja daug kartų. Pavyzdžiui, kinų kalba gali būti šiek tiek sunkiau suspausti nei anglų.

    Kaip veikia vaizdo ir vaizdo suspaudimo darbai?

    Vaizdo ir garso kompresija veikia labai skirtingai. Skirtingai nuo teksto, kuriame gali būti prarastas suspaudimas, ir jokie duomenys nėra prarasti, su vaizdais mes vadiname „prarastą suspaudimą“, kur prarandate kai kuriuos duomenis. Kuo daugiau suspausite, tuo daugiau duomenų prarasite.

    Tai veda prie tų baisių ieškančių JPEG, kuriuos žmonės įkėlė, bendrino ir ekranavo kelis kartus. Kiekvieną kartą, kai vaizdas suspaustas, jis praranda kai kuriuos duomenis.

    Štai pavyzdys. Tai yra ekrano kopija, kurią aš neužspaudžiau.

    Tada paėmiau tą ekrano kopiją ir keletą kartų bėgo jį per „Photoshop“, kiekvieną kartą jį eksportuojant kaip žemos kokybės JPEG. Štai rezultatas.

    Atrodo gana blogai, tiesa?

    Na, tai tik blogiausias atvejis, kiekvieną kartą eksportuojant 0% JPEG kokybę. Palyginimui, čia yra 50% kokybės JPEG, kuris beveik neatsiejamas nuo šaltinio PNG vaizdo, nebent jį suspaustumėte ir atidžiai apžiūrėtumėte.

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

    Taigi, kaip taupo tiek daug vietos? Na, JPEG algoritmas yra inžinerijos bruožas. Dauguma vaizdų saugo numerių sąrašą, kiekvienas skaičius nurodo vieną pikselį.

    JPEG to nepadaro. Vietoj to ji saugo vaizdus, ​​naudodama kažką, vadinamą Diskrečiu kosininiu transformavimu, kuris yra sinusinių bangų rinkinys, sujungtas skirtingu intensyvumu. Jis naudoja 64 skirtingas lygtis, tačiau dauguma jų nesinaudoja. Tai, ką „Photoshop“ ir kitų vaizdo programų „JPEG“ kokybės slankiklis leidžia pasirinkti, kiek naudojamų lygčių. Programos tada naudoja „Huffman“ kodavimą, kad dar labiau sumažintų failo dydį.

    Tai suteikia JPEG nepaprastai aukštą suspaudimo koeficientą, kuris gali sumažinti failą, kuris būtų daug megabaitų iki kelių kilobaitų, priklausomai nuo kokybės. Žinoma, jei jį naudosite per daug, jūs baigsite:

    Šis vaizdas yra siaubingas. Tačiau nedideli JPEG suspaudimo kiekiai gali turėti didelę įtaką failo dydžiui, todėl JPEG yra labai naudingas vaizdų suspaudimui svetainėse. Dauguma nuotraukų, kurias matote internete, yra suspaustos, kad jas būtų galima sutaupyti atsisiuntimo metu, ypač mobiliesiems vartotojams, turintiems prastą duomenų ryšį. Iš tiesų visi „How-To Geek“ vaizdai buvo suspausti, kad puslapio įkėlimas būtų greitesnis, ir jūs tikriausiai niekada nepastebėjote.

    Vaizdo suspaudimas

    Vaizdo įrašas šiek tiek skiriasi nuo vaizdų. Jūs manote, kad jie tiesiog suspaustų kiekvieną vaizdo rėmelį naudodami JPEG, ir jie tikrai tai padarys, bet yra geresnis vaizdo įrašo metodas.

    Mes naudojame kažką, vadinamą „sąsajos glaudinimu“, kuris apskaičiuoja pokyčius tarp kiekvieno rėmelio ir tik juos saugo. Taigi, pavyzdžiui, jei turite santykinai dar fotografiją, kuri užtrunka keletą sekundžių vaizdo įraše, daug vietos bus išsaugota, nes suspaudimo algoritmas neprivalo išsaugoti visų dalykų, kurie nekeičia. „Interframe“ suspaudimas yra pagrindinė priežastis, kodėl mes vis dar turime skaitmeninės televizijos ir interneto vaizdo. Be to, vaizdo įrašai būtų šimtai gigabaitų, ty daugiau nei 2005 m., Kai „YouTube“ paleisdavo vidutinį kietojo disko dydį.

    Be to, kadangi sąsajos glaudinimas geriausiai veikia dažniausiai su stacionariu vaizdo įrašu, tai kodėl konfeti sugadina vaizdo kokybę.

    Pastaba: „GIF“ to nepadaro, todėl animuoti GIF dažnai yra labai trumpi ir maži, tačiau vis dar yra gana didelis failo dydis.

    Kitas dalykas, kurį reikia nepamiršti apie vaizdo įrašą, yra jo bitratas - duomenų kiekis, kuris leidžiamas kas sekundę. Pavyzdžiui, jei jūsų bitratas yra 200 kb / s, jūsų vaizdo įrašas bus gana blogas. Kokybė pakyla, kai bitratas pakyla, bet po poros megabaitų per sekundę mažėja grįžta.

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

    30 kartų padidėja failo dydis, bet ne daug padidėja kokybė. Apskritai, „YouTube“ vaizdo įrašai sėdi apie 2-10 MB / s, priklausomai nuo jūsų ryšio, nes nieko daugiau nebūtų pastebėta.

    Šis demonstravimas veikia geriau su tikruoju vaizdo įrašu, todėl, jei norite jį patikrinti, galite atsisiųsti tuos pačius bitrate bandomus vaizdo įrašus, kurie naudojami čia.

    Garso suspaudimas

    Garso suspaudimas labai panašus į teksto ir vaizdo glaudinimą. Kai JPEG pašalina išsamią informaciją iš vaizdo, kurį nematysite, garsų suspaudimas tas pats. Jums gali prireikti girdėti gitara pasišalinimo eilutę, jei tikroji gitara yra daug, daug garsesnė.

    MP3 taip pat naudoja bitrate, pradedant nuo mažo galo iki 48 ir 96 kbps (žemo galo) iki 128 ir 240 kbps (gana gerai) iki 320kbps (aukštos klasės garsas), ir tikriausiai tik girdėsite skirtumą su išskirtinai geromis ausinėmis ( ir ausys).

    Taip pat yra nuostolių be kompresijos kodekai, skirti pagrindiniam garso ir vaizdo įrašui, kuris yra „FLAC“, kuris naudoja „LZ77“ kodavimą, kad būtų galima visiškai prarasti garsą. Kai kurie žmonės prisiekia pagal puikią FLAC garso kokybę, tačiau, kalbant apie MP3 paplitimą, atrodo, kad dauguma žmonių negali pasakyti ar neprieštarauja skirtumui.