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:
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:
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.
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?
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.
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.
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:
Videokompressioon
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.
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
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.