Miten tiedostojen pakkaus toimii?

Sisällysluettelo:

Miten tiedostojen pakkaus toimii?
Miten tiedostojen pakkaus toimii?

Video: Miten tiedostojen pakkaus toimii?

Video: Miten tiedostojen pakkaus toimii?
Video: We fixed Windows 10 - Microsoft will HATE this! - YouTube 2024, Marraskuu
Anonim
Ohjelmiston insinöörit ovat aina kehittäneet uusia tapoja asentaa paljon tietoja pieneen tilaan. Se oli totta, kun kiintolevyt olivat pieniä, ja Internetin kynnys on juuri tehnyt siitä kriittisempi. Tiedostojen pakkaaminen on tärkeä osa yhdistää meidät ja antaa meille vähemmän tietoja alaspäin, jotta voimme nopeuttaa lataamista ja sovittaa useampia yhteyksiä varattuihin verkkoihin.
Ohjelmiston insinöörit ovat aina kehittäneet uusia tapoja asentaa paljon tietoja pieneen tilaan. Se oli totta, kun kiintolevyt olivat pieniä, ja Internetin kynnys on juuri tehnyt siitä kriittisempi. Tiedostojen pakkaaminen on tärkeä osa yhdistää meidät ja antaa meille vähemmän tietoja alaspäin, jotta voimme nopeuttaa lataamista ja sovittaa useampia yhteyksiä varattuihin verkkoihin.

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:

LZ77-algoritmi tarkastelisi tätä tekstiä, ymmärtää, että se toistaa "howtogeek" kolme kertaa ja muuttaa sen tähän:
LZ77-algoritmi tarkastelisi tätä tekstiä, ymmärtää, että se toistaa "howtogeek" kolme kertaa ja muuttaa sen tähän:
Sitten, kun se haluaa lukea tekstin takaisin, se korvaa jokaisen (h) esimerkin "howtogeek" kanssa, joka tuo meidät takaisin alkuperäiseen lauseeseen.
Sitten, kun se haluaa lukea tekstin takaisin, se korvaa jokaisen (h) esimerkin "howtogeek" kanssa, joka tuo meidät takaisin alkuperäiseen lauseeseen.

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:

Joten nyt, kun se tulee (h), se palaa "howtogeek" ja lukee sitä sen sijaan.
Joten nyt, kun se tulee (h), se palaa "howtogeek" ja lukee sitä sen sijaan.

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.

Nyt ilmeisesti tämä on melko äärimmäinen esimerkki, koska meillä oli vain sama sana toistuvasti uudestaan. Yleiskäytännössä olet todennäköisesti noin 30-40%: n pakkaus käyttämällä pakkausmuotoa, kuten ZIP-tiedostoa, joka on enimmäkseen tekstiä.
Nyt ilmeisesti tämä on melko äärimmäinen esimerkki, koska meillä oli vain sama sana toistuvasti uudestaan. Yleiskäytännössä olet todennäköisesti noin 30-40%: n pakkaus käyttämällä pakkausmuotoa, kuten ZIP-tiedostoa, joka on enimmäkseen tekstiä.

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?

Video- ja äänenpakkaus toimii hyvin eri tavalla. Toisin kuin tekstissä, jossa voi olla häviöttömän pakkaus, eikä tietoja ole kadonnut, kuvien kanssa meillä on nimeltään "Lossy Compression", jossa menetät joitain tietoja. Ja mitä enemmän pakkaat, sitä enemmän tietoja menetät.
Video- ja äänenpakkaus toimii hyvin eri tavalla. Toisin kuin tekstissä, jossa voi olla häviöttömän pakkaus, eikä tietoja ole kadonnut, kuvien kanssa meillä on nimeltään "Lossy Compression", jossa menetät joitain tietoja. Ja mitä enemmän pakkaat, sitä enemmän tietoja menetät.

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.

Sitten otin kyseisen kuvakaappauksen ja suoritetin sen Photoshopin kautta useaan kertaan, aina viemällä se pienikokoisena JPEG-muodossa. Tässä on tulos.
Sitten otin kyseisen kuvakaappauksen ja suoritetin sen Photoshopin kautta useaan kertaan, aina viemällä se pienikokoisena JPEG-muodossa. Tässä on tulos.
Näyttää melko huonolta, eikö?
Näyttää melko huonolta, eikö?

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.

Kuvan PNG-koko oli kooltaan 200 kt, mutta tämä 50% laatuinen JPEG on vain 28 kt.
Kuvan PNG-koko oli kooltaan 200 kt, mutta tämä 50% laatuinen JPEG on vain 28 kt.

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:

Tuo kuva on kamala.Pienet määrät JPEG-pakkausta voivat kuitenkin vaikuttaa merkittävästi tiedostokokoon, ja tämä tekee JPEG: sta erittäin hyödyllisen kuvan pakkaamiseksi verkkosivustoilla. Suurin osa verkossa näkyvistä kuvista pakataan tallentamaan latausaikoja, varsinkin mobiilikäyttäjille, joilla on huonot datayhteydet. Itse asiassa kaikki How-To Geek -kuvat on pakattu, jotta sivujen lataaminen nopeutuu, ja et todennäköisesti koskaan huomannut.
Tuo kuva on kamala.Pienet määrät JPEG-pakkausta voivat kuitenkin vaikuttaa merkittävästi tiedostokokoon, ja tämä tekee JPEG: sta erittäin hyödyllisen kuvan pakkaamiseksi verkkosivustoilla. Suurin osa verkossa näkyvistä kuvista pakataan tallentamaan latausaikoja, varsinkin mobiilikäyttäjille, joilla on huonot datayhteydet. Itse asiassa kaikki How-To Geek -kuvat on pakattu, jotta sivujen lataaminen nopeutuu, ja et todennäköisesti koskaan huomannut.

Videopakkaus

Video toimii hieman eri tavoin kuin kuvat. Sinä ajattelette, että ne vain pakottaisivat jokaisen videokuvan JPEG-muodossa, ja he varmasti tekevät sen, mutta on parempi tapa videolle.
Video toimii hieman eri tavoin kuin kuvat. Sinä ajattelette, että ne vain pakottaisivat jokaisen videokuvan JPEG-muodossa, ja he varmasti tekevät sen, mutta on parempi tapa videolle.

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.

Tiedostokoko on 30-kertainen, mutta ei paljon laatua. Yleensä YouTube-videot istuvat noin 2-10Mb / s riippuen yhteydestänne, sillä mitään ei todennäköisesti huomaa.
Tiedostokoko on 30-kertainen, mutta ei paljon laatua. Yleensä YouTube-videot istuvat noin 2-10Mb / s riippuen yhteydestänne, sillä mitään ei todennäköisesti huomaa.

Tämä demo toimii paremmin varsinaisen videon kanssa, joten jos haluat tarkistaa sen itse, voit ladata täällä käytetyt samat bittinopeuden testivideot.

Äänenpakkaus

Äänenpakkaus toimii hyvin samaan tapaan kuin tekstin ja kuvan pakkaus. Jos JPEG poistaa yksityiskohdat kuvasta, jota et näe, äänipakkaus tekee samoja ääniä. Sinun ei ehkä tarvitse kuulla merkkijonoa kitaraa, jos todellinen kitara on paljon, paljon kovempaa.
Äänenpakkaus toimii hyvin samaan tapaan kuin tekstin ja kuvan pakkaus. Jos JPEG poistaa yksityiskohdat kuvasta, jota et näe, äänipakkaus tekee samoja ääniä. Sinun ei ehkä tarvitse kuulla merkkijonoa kitaraa, jos todellinen kitara on paljon, paljon kovempaa.

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.

Suositeltava: