Kuidas toimib failide kokkusurumine?
Tarkvara insenerid on alati arendanud uusi viise, kuidas väikesesse ruumi palju andmeid paigaldada. See oli tõsi, kui meie kõvakettad olid väikesed ja interneti tulek on just muutnud selle kriitilisemaks. Failide kokkusurumine mängib suurt rolli meie ühendamisel, lubades meil reale vähem andmeid saata, et saaksime kiiremaid allalaadimisi ja rohkem sidemeid hõivatud võrkudesse.
Niisiis, kuidas see toimib?
Sellele küsimusele vastamine tähendaks mõningate väga keeruliste matemaatika selgitamist, mis on kindlasti rohkem, kui käesolevas artiklis käsitleme, kuid te ei pea täpselt aru saama, kuidas see matemaatiliselt toimib, et mõista põhitõdesid..
Kõige populaarsemad raamatukogud teksti tihendamiseks tuginevad kahele tihendamisalgoritmile, kasutades mõlemat samal ajal väga kõrge tihendussuhte saavutamiseks. Need kaks algoritmi on "LZ77" ja "Huffmani kodeerimine." Huffmani kodeerimine on üsna keeruline ja me ei lähe selles osas üksikasjalikult. Peamiselt kasutab see lühemat laadimiseks mõnda fancy matemaatikat binaarsed koodid üksikute tähtedega, kahanevad faili suurused protsessis. Kui soovite selle kohta rohkem teada saada, vaadake seda artiklit selle kohta, kuidas kood toimib või Computerphile'i seletaja.
LZ77 on seevastu suhteliselt lihtne ja me räägime siin. Selle eesmärk on eemaldada dubleerivad sõnad ja asendada need väiksema "võtmega", mis tähistab sõna.
Võtke see lühike tekst, näiteks:
LZ77 algoritm vaataks seda teksti, mõistaks, et see kordab "howtogeek" kolm korda ja muudab selle:
Siis, kui ta tahab teksti tagasi lugeda, asendaks see iga (h) eksemplari “howtogeekiga”, viies meid tagasi algsesse fraasi.
Me nimetame kompressiooni, nagu see on „kadudeta“ - andmed, mida sisestate, on samad, mis andmed, mille sa välja tulid. Miski pole kadunud.
Tegelikkuses ei kasuta LZ77 võtmete loendit, vaid asendab teise ja kolmanda esinemise mälus oleva lingiga:
Nüüd, kui ta saabub (h), vaatab ta tagasi “howtogeek” ja luges selle asemel.
Kui olete huvitatud üksikasjalikumast selgitusest, on see Computerphile'i video päris kasulik.
Nüüd on see idealiseeritud näide. Tegelikkuses on enamik tekste tihendatud nii vähe kui ainult mõned tähemärgid. Näiteks sõna „the” tihendatakse isegi siis, kui see ilmub sõnadega „seal“, „nende” ja „siis“. Korduva tekstiga saad mõningaid hullumisi kompressioonisuhteid. Võtke see tekstifail korduvalt korduvalt sõna „howtogeek”. Algne tekstifail on kolm kilobaiti. Kui see on kokkusurutud, võtab see ainult 158 baiti. See on peaaegu 95% kokkusurumine.
Loomulikult on see päris äärmuslik näide, sest meil oli sama ja sama sõna korduv ja korduv. Üldiselt praktiseeritakse tõenäoliselt umbes 30-40% kokkusurumine, kasutades kompressioonivormingut nagu ZIP, failis, mis on enamasti tekst.
See LZ77 algoritm kehtib kõikidele binaarandmetele, mitte ainult tekstile, kuigi tekst on üldiselt lihtsam kokkusuruda, kui paljud korduvad sõnad enamiku keelte kasutavad. Selline keel nagu hiina keel võib olla mõnevõrra keerulisem kui inglise keel.
Kuidas toimib pildi ja video tihendamine?
Video ja heli tihendamine toimib väga erinevalt. Erinevalt tekstist, kus võib olla kadudeta kompressioon ja andmeid ei ole kadunud, on meil pilte, mida nimetatakse „kadunud kompressiooniks“, kus kaotate mõned andmed. Ja mida rohkem sa tihendad, seda rohkem andmeid kaotate.
See toob kaasa need kohutavad välimusega JPEG-id, mida inimesed on mitu korda üles laadinud, jaganud ja pildistanud. Iga kord, kui pilt tihendatakse, kaotab see mõned andmed.
Siin on näide. See on pilt, mille ma ei võtnud üldse kokku surutud.
Siis võtsin selle ekraanipildi ja jooksisin seda mitu korda läbi Photoshopi, iga kord eksportides seda madala kvaliteediga JPEG-vormingus. Siin on tulemus.
Tundub päris halb?
Noh, see on ainult halvim stsenaarium, mis ekspordib iga kord 0% JPEG kvaliteediga. Võrdluseks, siin on 50% kvaliteetne JPEG, mis on peaaegu eristamatu allika PNG-kujutisest, välja arvatud juhul, kui te seda lõhkete ja lähemalt vaatate.
Selle pildi PNG oli 200 KB, kuid see 50% kvaliteetne JPEG on ainult 28 KB.
Niisiis, kuidas see nii palju ruumi säästab? Noh, JPEG-algoritm on inseneritöö. Enamik pilte salvestab numbrite loendi, kusjuures iga number esindab ühte pikslit.
JPEG seda ei tee. Selle asemel salvestab see pildid kasutades midagi, mida nimetatakse diskreetseks kosmeetiliseks teisenduseks, mis on sinine lainete kogum, mis on ühendatud erineva intensiivsusega. See kasutab 64 erinevat võrrandit, kuid enamik neist ei kasuta. Seda valib Photoshopi JPEG-i kvaliteediliugur ja muud pildirakendused, kui palju võrrandeid kasutada. Rakendused kasutavad seejärel Huffmani kodeeringut faili suuruse vähendamiseks veelgi.
See annab JPEG-ile ebaühtlaselt kõrge tihendusastme, mis võib sõltuvalt kvaliteedist vähendada faili, mis oleks mitu megabaiti kuni paar kilobaiti. Loomulikult, kui kasutate seda liiga palju, jõuad sellega:
See pilt on kohutav. Kuid väikestes kogustes JPEG-i kokkusurumisel võib olla suur mõju failisuurusele ning see muudab JPEG-i väga kasulikuks veebisaitidel pildi tihendamiseks. Enamik võrgus olevaid pilte on tihendatud allalaadimise ajal, eriti mobiilikasutajatele, kellel on nõrgad andmed. Tegelikult on kõik How-To Geeki pildid kokkusurutud, et muuta lehe laadimine kiiremaks ja sa pole ilmselt kunagi märganud.
Video tihendamine
Video töötab piltidest natuke erinevalt. Te arvate, et nad lihtsalt suruksid iga videokaadri JPEG-i abil ja nad kindlasti teevad seda, kuid videol on parem meetod.
Me kasutame midagi, mida nimetatakse „liidestevaheliseks kokkusurumiseks”, mis arvutab iga kaadri vahelised muutused ja salvestab need ainult. Näiteks, kui teil on suhteliselt ikka tehtud pilt, mis võtab video aega mitu sekundit, salvestatakse palju ruumi, sest tihendamisalgoritm ei pea salvestama kõiki asju, mis ei muutu. Interframe'i kokkusurumine on peamine põhjus, miks meil on digitaaltelevisioon ja veebivideo üldse. Ilma selleta oleksid videod sadade gigabaitide võrra suuremad kui keskmine kõvaketta suurus 2005. aastal, kui YouTube käivitati.
Samuti, kuna kasutajaliidese tihendamine toimib kõige paremini enamasti statsionaarsete videotega, siis konfetti hävitab video kvaliteet.
Märkus: GIF ei tee seda, mistõttu on animeeritud GIF-id sageli väga lühikesed ja väikesed, kuid neil on siiski üsna suur failisuurus.
Teine asi, mida meeles pidada video kohta, on selle bitikiirus - iga sekundi kohta lubatud andmete hulk. Kui teie bitikiirus on näiteks 200 kb / s, näeb teie video päris halvasti. Kvaliteet tõuseb, kui bitikiirus tõuseb, kuid pärast paari megabaidi sekundis väheneb tulu.
See on suurendatud raam, mis on võetud meduusi videost. Vasakpoolne on 3Mb / s ja paremal 100Mb / s.
30-kordne failimahu suurenemine, kuid mitte kvaliteet. Üldiselt sõltuvad YouTube'i videod sõltuvalt teie ühendusest umbes 2–10 MB / s, sest midagi ei ilmu tõenäoliselt.
See demo toimib tegeliku videoga paremini, nii et kui soovite seda ise kontrollida, saate alla laadida samad bittide testimise videod, mida siin kasutatakse.
Audio kompressioon
Heli kokkusurumine toimib väga sarnaselt teksti ja pildi tihendamisele. Kui JPEG eemaldab detaili pildist, mida te ei näe, teeb heli tihendamine sama. Kui tegelik kitarr on palju, palju valjem, ei pruugi teil olla vaja kuulda kitarri valimist..
MP3 kasutab ka bitikiirust, alates 48 ja 96 kbps (madal) lõpust kuni 128 ja 240 kbit / s (üsna hea) kuni 320 kbit / s (kõrgekvaliteediline heli) ja kuulete tõenäoliselt ainult erakordselt heade kõrvaklappidega ( ja kõrvad).
On ka kadudeta kompressioonikoodekeid audio-peamiseks, mis on FLAC-kood, mis kasutab LZ77 kodeeringut täiesti kadudeta heli edastamiseks. Mõned inimesed vannuvad FLACi täiusliku helikvaliteediga, kuid MP3 levikuga tundub, et enamik inimesi ei suuda erinevust öelda või mitte..