Niin miten se toimii?
Vastaus tähän kysymykseen käsittäisi selittävän hyvin monimutkaista matematiikkaa, varmasti enemmän kuin mitä tässä artikkelissa voidaan käsitellä, mutta sinun ei tarvitse ymmärtää tarkasti, miten se toimii matemaattisesti ymmärtääkseen perusasiat.
Suosituimmat kirjastojen kompressointiin perustuvat kaksi puristusalgoritmia, jotka käyttävät sekä samanaikaisesti erittäin suuria pakkaussuhteita. Nämä kaksi algoritmia ovat "LZ77" ja "Huffman-koodaus". Huffman-koodaus on melko monimutkaista, emmekä lähde yksityiskohtiin tälle. Ensisijaisesti se käyttää hieman fancy math antaa lyhyenbinäärikoodit yksittäisiin kirjaimiin, pienentää tiedostokokoa prosessissa. Jos haluat lisätietoja siitä, tutustu tähän artikkeliin siitä, miten koodi toimii, tai tämä selittäjä Computerphile.
Toisaalta LZ77 on suhteellisen yksinkertainen ja siitä me puhumme täällä. Se pyrkii poistamaan päällekkäiset sanat ja korvaamaan ne pienemmällä avaimella, joka edustaa sanan.
Ota tämä lyhyt kappale esimerkiksi:
Me kutsumme pakkaukseksi kuten tämä "häviöttömästi" - annat tiedot ovat samat kuin tiedot, joita saat ulos. Mikään ei menetetä.
Todellisuudessa LZ77 ei käytä avainluetteloa, vaan korvaa toisen ja kolmannen tapahtuman korvaamalla linkin takaisin muistiin:
Jos olet kiinnostunut yksityiskohtaisemmasta selityksestä, tämä video Computerphilesta on melko hyödyllinen.
Nyt tämä on ihanteellinen esimerkki. Todellisuudessa useimmat tekstit pakataan avaimilla niin pieniksi kuin vain muutamia merkkejä. Esimerkiksi sana "the" olisi pakattu, vaikka se ilmestyy sanoin "siellä", "niiden" ja "sitten". Toistuvalla tekstillä voit saada aikaan joitain hulluja pakkaussuhteita. Ota tämä tekstitiedosto sanalla "howtogeek" toistuvasti 100 kertaa. Alkuperäinen tekstitiedosto on kooltaan 3 kilotavua. Kun pakattu, se kuitenkin vie vain 158 tavua. Se on lähes 95% pakkausta.
Tämä LZ77-algoritmi koskee kaikkia binaaritietoja, ei kuitenkaan vain tekstiä, vaikka tekstistä yleensä on helpompi pakata, koska useimmat toistuvat sanat useimmista kielistä käyttävät. Kiinalainen kieli voi olla hieman vaikeampi pakata esimerkiksi englantia.
Miten kuva- ja videopakkaus toimii?
Tämä johtaa siihen kammottaviin näköisiin JPEG-tiedostoihin, joita ihmiset ovat lähettäneet, jaettuina ja näytöissä useita kertoja. Joka kerta kun kuva pakataan, se menettää joitakin tietoja.
Tässä on esimerkki. Tämä on kuvakaappaus, jota ei ole pakattu lainkaan.
No, tämä on vain huonoin tapaus, joka vie aina 0% JPEG-laatua. Vertailun vuoksi tässä on 50% laadukas JPEG-tiedosto, joka on melkein erottuva lähde-PNG-kuvasta, ellet räjäytä sitä ja tarkkaile.
Joten miten se säästää niin paljon tilaa? No, JPEG-algoritmi on tekninen esitys. Useimmat kuvat tallentavat numeroluettelon, ja jokainen numero edustaa yhtä pikseliä.
JPEG ei mitään tästä. Sen sijaan se tallentaa kuvia käyttämällä jotain nimeltä Discrete Cosine Transform, joka on kokoelma siniaallot, jotka on yhdistetty eri intensiteetteihin. Se käyttää 64 eri yhtälöä, mutta useimmat niistä eivät ole käytössä. Tämä on se, mitä JPEG-kuvanlaadun liukusäädin Photoshopissa ja muissa kuvasovelluksissa tekee - valita, kuinka monta yhtälöä haluat käyttää. Sovellukset käyttävät sitten Huffman-koodausta tiedostojen koon pienentämiseksi entisestään.
Tällöin JPEG: eille on ikävästi korkea pakkaussuhde, joka voi pienentää tiedoston, joka olisi useita megatavuja alhaalta pari kilotavua riippuen laadusta. Tietenkin, jos käytät sitä liikaa, päädyt tähän:
Videopakkaus
Käytämme jotain nimeltä "interframe compression", joka laskee muutokset jokaisen kehyksen välillä ja tallentaa ne vain. Joten esimerkiksi, jos sinulla on suhteellisen laukaus, joka vie muutaman sekunnin videon aikana, paljon tilaa tallennetaan, koska pakkausalgoritmilla ei tarvitse tallentaa kaikkia tavaroita kohtauksessa, joka ei muutu. Interframe-pakkaus on tärkein syy siihen, että meillä on digitaalinen televisio ja web-video. Ilman sitä videot saisivat satoja gigatavua, enemmän kuin keskimääräinen kiintolevyn koko vuonna 2005, kun YouTube käynnistettiin.
Lisäksi, koska interframe-pakkaus toimii parhaiten useimmissa pysyvissä videoissa, siksi konfetti pilata videon laadun.
Huomaa: GIF ei tee tätä, minkä vuoksi animoituja GIF-tiedostoja ovat usein hyvin lyhyet ja pienet, mutta silti niissä on melko suuri tiedostokoko.
Toinen asia, joka pitää mielessä videosta, on sen bittinopeus - määrä, joka sallitaan joka sekunnissa. Jos bittinopeus on esimerkiksi 200 kb / s, videosi näyttää melko huonolta. Laatu nousee, kun bittinopeus nousee, mutta parin megatavun sekunnissa vähenee palautus.
Tämä on zoomattu kehys, joka on otettu meduusan videosta. Vasemmalla on 3Mb / s, ja oikealla on 100Mb / s.
Tämä demo toimii paremmin varsinaisen videon kanssa, joten jos haluat tarkistaa sen itse, voit ladata täällä käytetyt samat bittinopeuden testivideot.
Äänenpakkaus
MP3 käyttää myös bittinopeutta, joka vaihtelee 48: n ja 96 kbps: n (alimmainen) 128 ja 240 kbps: n (melko hyvä) 320 kt: n tarkkuudella (high-end-ääni), ja kuulet vain poikkeuksellisen hyvät kuulokkeet ( ja korvat).
Myös häviötöntä pakkauskoodekkia äänelle - tärkein on FLAC - joka käyttää LZ77-koodausta täysin häviöttömän äänen tuottamiseen. Jotkut vannovat FLAC: n täydellistä äänenlaatua, mutta MP3-levinneisyys näyttää siltä, että useimmat ihmiset eivät joko voi kertoa tai välttää eroa.