Kuidas toimib failide tihendamine?

Sisukord:

Kuidas toimib failide tihendamine?
Kuidas toimib failide tihendamine?

Video: Kuidas toimib failide tihendamine?

Video: Kuidas toimib failide tihendamine?
Video: Fixing a Viewer's BROKEN Gaming PC? - Fix or Flop S2:E18 - YouTube 2024, November
Anonim
Tarkvarakunstnikud on alati välja töötanud uusi viise, kuidas paigaldada palju andmeid väikesesse ruumi. See oli tõsi, kui meie kõvakettad olid väikesed, ja Interneti tulek on just muutnud selle kriitilisemaks. Failide kokkusurumine mängib meie ühendamisel suurt osa, võimaldades meil saata vähem andmeid rea alla, et saaksime kiiremini allalaadida ja sobiks rohkem ühendusi hõivatud võrkudega.
Tarkvarakunstnikud on alati välja töötanud uusi viise, kuidas paigaldada palju andmeid väikesesse ruumi. See oli tõsi, kui meie kõvakettad olid väikesed, ja Interneti tulek on just muutnud selle kriitilisemaks. Failide kokkusurumine mängib meie ühendamisel suurt osa, võimaldades meil saata vähem andmeid rea alla, et saaksime kiiremini allalaadida ja sobiks rohkem ühendusi hõivatud võrkudega.

Kuidas see töötab?

Sellele küsimusele vastamiseks peaks selgitama mõningast väga keerukat matemaatikat, kindlasti rohkem, kui me seda artiklit hõlmama, kuid te ei pea täpselt aru, kuidas see matemaatiliselt põhitõdesid mõista.

Kõige populaarsemad teksti pakkimise raamatukogud tuginevad kahele kompresseerimisalgoritmile, kasutades samaaegselt nii väga tihedaid kokkusurumisnäitajaid. Need kaks algoritmi on "LZ77" ja "Huffmani kodeerimine." Huffmani kodeerimine on üsna keerukas, ja me ei lähe selle kohta detailseks. Eelkõige kasutab see lühemat määramiseks mõnda väljamõeldud matemaatikatkahendkoodid üksikutele kirjadele, failide suuruse vähenemine protsessis. Kui soovite selle kohta lisateavet, vaadake seda artiklit selle kohta, kuidas kood töötab, või seda seletuskirju, mille teosite Computerphile.

Teisest küljest on LZ77 suhteliselt lihtne ja siin me räägime. Selle eesmärk on eemaldada dubleeritud sõnad ja asendada need väiksema võtmega, mis tähistab sõna.

Võtke see lühike teksti näiteks:

LZ77 algoritm vaatab seda teksti, mõistab, et kordab "howtogeek" kolm korda ja muudab seda järgmiselt:
LZ77 algoritm vaatab seda teksti, mõistab, et kordab "howtogeek" kolm korda ja muudab seda järgmiselt:
Siis, kui ta soovib teksti tagasi lugeda, asendatakse see iga (h) eksemplar koos "howtogeek" -ga, viies meid tagasi esialgsesse fraasi.
Siis, kui ta soovib teksti tagasi lugeda, asendatakse see iga (h) eksemplar koos "howtogeek" -ga, viies meid tagasi esialgsesse fraasi.

Me kutsume sellist "kadudeta" kompressiooni - teie poolt sisestatud andmed on samad, mis teie välja tulevad andmed. Midagi pole kadunud.

Tegelikult ei kasuta LZ77 võtmete loendit, vaid selle asemel asendab teine ja kolmas sündmus uuesti mälus oleva linkiga:

Nüüd, kui see jõuab (h), vaatab ta tagasi "howtogeek" ja loeb selle asemel.
Nüüd, kui see jõuab (h), vaatab ta tagasi "howtogeek" ja loeb selle asemel.

Kui olete huvitatud üksikasjalikumast selgitusest, on see Computerphile video üsna kasulik.

Nüüd on see ideaalne näide. Tegelikult on enamik tekst tihendatud nii väikeste kui ka mõne tähemärgiga võtmetega. Näiteks surutakse sõna "the" kokku, isegi kui see ilmub sellistesse sõnadesse nagu "seal", "nende" ja "siis". Korduva tekstiga saate mõne hullu tihendusastme. Võtke see tekstifail 100 korda korduvalt sõnaga "howtogeek". Algne tekstifail on 3 kilobaiti suurune. Kokkupandud aga võtab see ainult 158 baiti. See on peaaegu 95% kompressioon.

Nüüd ilmselgelt on see üsna äärmuslik näide, sest meil oli lihtsalt sama sõna korduvalt ja uuesti. Üldiselt võite tõenäoliselt saada umbes 30-40% kompressiooni kasutades tihendusvormingut nagu ZIP failis, mis on enamasti tekst.
Nüüd ilmselgelt on see üsna äärmuslik näide, sest meil oli lihtsalt sama sõna korduvalt ja uuesti. Üldiselt võite tõenäoliselt saada umbes 30-40% kompressiooni kasutades tihendusvormingut nagu ZIP failis, mis on enamasti tekst.

See LZ77 algoritm kehtib kõigi binaarsete andmetega, muide, mitte ainult tekstiga, kuigi teksti on üldiselt lihtsam kompresseerida, kuna korduvaid sõnu enamikus keeltes kasutatakse. Näiteks võib selline keel nagu hiina keeles olla veidi keerukam kui inglise keel.

Kuidas pildi ja video kompenseerimine toimib?

Video- ja heliriba töö on väga erinev. Erinevalt tekstist, kus sul võib olla kadudeta tihendust, ja andmeid ei kaota, piltidega, mida nimetatakse "Lossy Compression", kus sa kaotad mõned andmed. Mida rohkem te tihendate, seda rohkem andmeid kaotate.
Video- ja heliriba töö on väga erinev. Erinevalt tekstist, kus sul võib olla kadudeta tihendust, ja andmeid ei kaota, piltidega, mida nimetatakse "Lossy Compression", kus sa kaotad mõned andmed. Mida rohkem te tihendate, seda rohkem andmeid kaotate.

See viib selleni, et need jubedaid JPEG-sid, mille inimesed on mitu korda üles laadinud, jaganud ja kopeerisid. Iga kord, kui pilt surutakse kokku, kaotab see mõned andmed.

Siin on näide. See on ekraanipilt, mille võtsin, et pole üldse kokkusurutud.

Seejärel võttis mul selle pildi ja käivitas selle Photoshopis mitu korda, iga kord eksportides seda madala kvaliteediga JPEG-vormingus. Siin on tulemus.
Seejärel võttis mul selle pildi ja käivitas selle Photoshopis mitu korda, iga kord eksportides seda madala kvaliteediga JPEG-vormingus. Siin on tulemus.
Tundub päris halb, eks?
Tundub päris halb, eks?

Noh, see on ainult halvim stsenaarium, mis ekspordib iga kord 0% -lise JPEG-kvaliteediga. Võrdluseks on siin 50% kvaliteediga JPEG, mis on lähtekoodiga PNG-piltest peaaegu eristatav, kui te seda ei näe ja vaata lähemalt.

Selle kujutise PNG suurus oli 200 KB, kuid see 50% kvaliteediga JPEG on ainult 28 KB.
Selle kujutise PNG suurus oli 200 KB, kuid see 50% kvaliteediga JPEG on ainult 28 KB.

Niisiis, kuidas see säästab nii palju ruumi? Noh, JPEG-algoritm on inseneriteate feat. Enamik pilte salvestab numbrite loendi, kusjuures iga numbriga tähistatakse ühte pikslit.

JPEG ei tee seda. Selle asemel hoiab see pilte kasutades mõnda nimega Diskreetne kooseansi transformatsioon, mis on erineva intensiivsusega liitunud sinine lainete kogum. Ta kasutab 64 erinevat võrrandit, kuid enamik neist ei kasutata. See ongi JPEG kvaliteedilugur Photoshopis ja muudes piltide rakendustes - vali, kui palju võrrandeid kasutada. Rakendused kasutavad seejärel Huffmani kodeeringut, et faili suurus veelgi vähendada.

See annab JPEG-dele insanely-kõrge tihendussuhte, mis võib vähendada faili, mis oleks sõltuvalt kvaliteedist väiksem kui paar kilobaiti. Loomulikult, kui te kasutate seda liiga palju, siis jõuate järgmisega:

See pilt on jube.Kuid väikesed JPEG-tihenduse kogused võivad märkimisväärselt mõjutada failisuurusi ja see muudab JPEG-i väga kasulikuks veebisaitide pildikompressioonil. Enamik veebis olevaid pilte on tihendatud allalaadimisaegade salvestamiseks, eriti mobiilside kasutajatele, kellel on viletsed andmesideühendused. Tegelikult on kõik kujutised How-To Geekis kokku puutunud, et muuta lehe laadimine kiiremaks, ja te pole seda tõenäoliselt kunagi märganud.
See pilt on jube.Kuid väikesed JPEG-tihenduse kogused võivad märkimisväärselt mõjutada failisuurusi ja see muudab JPEG-i väga kasulikuks veebisaitide pildikompressioonil. Enamik veebis olevaid pilte on tihendatud allalaadimisaegade salvestamiseks, eriti mobiilside kasutajatele, kellel on viletsed andmesideühendused. Tegelikult on kõik kujutised How-To Geekis kokku puutunud, et muuta lehe laadimine kiiremaks, ja te pole seda tõenäoliselt kunagi märganud.

Videokompressioon

Video töötab piltidest veidi erinevalt. Te arvate, et nad lihtsalt kopeerivad iga video raami JPEG-ga ja nad teevad seda kindlasti, kuid video jaoks on see parem viis.
Video töötab piltidest veidi erinevalt. Te arvate, et nad lihtsalt kopeerivad iga video raami JPEG-ga ja nad teevad seda kindlasti, kuid video jaoks on see parem viis.

Kasutame midagi, mida nimetatakse "ruumilise kompressiooniks", mis arvutab iga raami muutused ja salvestab need ainult. Nii näiteks, kui teil on videost mõne sekundi jooksul suhteliselt veel pildistatav pilt, salvestatakse palju ruumi, kuna tihendusalgoritmil pole vaja stseenis kõiki asju salvestada, mis ei muutu. Interframe-pakkimine on peamine põhjus, miks me üldse digitaaltelevisiooni ja veebivideo. Ilma selleta oleks videod sajad gigabaitid, mis on rohkem kui keskmine kõvaketta suurus 2005. aastal, kui YouTube käivitas.

Kuna ka ruumiline pakkimine toimib enamasti statsionaarsel videol, siis konfeti rikub videokvaliteeti.

Märkus. GIF ei tee seda, mistõttu animeeritud GIF-failid on sageli väga lühikesed ja väikesed, kuid siiski suhteliselt suur faili suurus.

Veel üks asi, mida meeles pidada videost, on selle bitikiirus - iga sekundi jooksul lubatud andmete hulk. Näiteks kui teie bitikiirus on 200 kb / s, näeb teie video välja päris halb. Kvaliteet tõuseb, kui bitikiirus tõuseb, kuid pärast paari megabaiti sekundis on teil vähenev tulu.

See on millimehhi videost võetud suumitud kaader. Vasakpoolne üks on 3Mb / s, ja paremal on 100Mb / s.

Faili suurus on 30 korda suurem, kuid kvaliteet ei suurene. Üldiselt jäävad YouTube'i videod sõltuvalt teie ühendusest ligikaudu 2-10 MB / s, sest tõenäoliselt ei märka enam midagi muud.
Faili suurus on 30 korda suurem, kuid kvaliteet ei suurene. Üldiselt jäävad YouTube'i videod sõltuvalt teie ühendusest ligikaudu 2-10 MB / s, sest tõenäoliselt ei märka enam midagi muud.

See demo toimib paremini tegeliku videoga, nii et kui soovite seda ise läbi vaadata, võite alla laadida samad bitikiiruse testi videod, mida siin kasutatakse.

Helitugevus

Heli kokkusurumine toimib väga sarnaselt teksti- ja pildikompressioonile. Kui JPEG eemaldab kujutistest detailid, mida te ei näe, heli tihendus heli jaoks sama. Teil ei pruugi olla vaja kuulda kitarri valikut krõngast, kui tegelik kitarr on palju, palju valjem.
Heli kokkusurumine toimib väga sarnaselt teksti- ja pildikompressioonile. Kui JPEG eemaldab kujutistest detailid, mida te ei näe, heli tihendus heli jaoks sama. Teil ei pruugi olla vaja kuulda kitarri valikut krõngast, kui tegelik kitarr on palju, palju valjem.

MP3 kasutab ka bitikiirust, ulatudes 48 ja 96 kbps madalaimast punktist 128 ja 240 kbps (päris hea) kuni 320 kbps (high-end audio), ja te tunnete tõenäoliselt vaid erakordselt head kõrvaklappe ( ja kõrvad).

Audio jaoks on ka kaadrisummutavaid kompressioonikodeid, millest peamine on FLAC-id, mis kasutab LZ77 kodeeringut täiesti kaotatud heli edastamiseks. Mõned inimesed vannuvad FLACi täiusliku helikvaliteedi järgi, kuid MP3 levimuse puhul tundub, et enamik inimesi ei suuda või ei erine sellest.

Soovitan: