Tak ako to funguje?
Na odpoveď na túto otázku by sme mohli vysvetliť niektoré veľmi komplikované matematiky, určite viac ako môžeme pokryť v tomto článku, ale nemusíte presne pochopiť, ako to matematicky funguje na pochopenie základov.
Najpopulárnejšie knižnice na kompresiu textu sa spoliehajú na dva algoritmy kompresie, pričom obidva súčasne používajú na dosiahnutie veľmi vysokých pomerov kompresie. Tieto dva algoritmy sú "LZ77" a "Huffman kódovanie." Huffman kódovanie je pomerne zložité, a nebudeme ísť do podrobností o tom jeden. V prvom rade používa nejakú fantazijnú matematiku na priradenie kratšiehobinárne kódy na jednotlivé písmená, zmenšujúce sa veľkosti súborov v procese. Ak sa chcete dozvedieť viac o tom, prečítajte si tento článok o tom, ako funguje tento kód, alebo o tomto vysvetľujúcom nástroji Computerphile.
LZ77, na druhej strane, je relatívne jednoduché a o tom budeme hovoriť. Snaží sa odstrániť duplicitné slová a nahradiť ich menším "kľúčom", ktorý predstavuje slovo.
Vezmite si tento krátky text napríklad:
Voláme kompresiu, ako je táto "bezstratová" - dáta, ktoré zadáte, sú rovnaké ako údaje, ktoré získate. Nič nie je stratené.
V skutočnosti LZ77 nepoužíva zoznam kľúčov, ale namiesto toho nahrádza druhý a tretí výskyt odkazom späť do pamäte:
Ak máte záujem o podrobnejšie vysvetlenie, toto video z Computerphile je celkom užitočné.
Teraz je to idealizovaný príklad. V skutočnosti je väčšina textu komprimovaná klávesami, ktoré majú iba malý počet znakov. Napríklad slovo "the" by bolo komprimované aj vtedy, keď sa objaví slovami ako "tam", "ich" a "potom". S opakovaným textom môžete získať nejaké bláznivé pomery kompresie. Vezmite si tento textový súbor so slovom "howtogeek" 100 krát. Pôvodný textový súbor má veľkosť tri kilobyty. Keď je však komprimovaný, má iba 158 bajtov. To je skoro 95% kompresia.
Tento algoritmus LZ77 sa aplikuje na všetky binárne dáta, mimochodom, a nie len na text, aj keď text je vo všeobecnosti ľahšie komprimovať kvôli tomu, koľko opakovaných slov používa väčšina jazykov. Jazyk, akým je napríklad čínština, môže byť o niečo ťažšie stlačiť ako angličtina.
Ako funguje kompresia obrázkov a videa?
To je to, čo vedie k tým strašným vyzerajúcim súborom JPEG, ktoré ľudia nahrali, zdieľali a nasnímavali niekoľkokrát. Pri každom stlačení obrázka strácajú niektoré údaje.
Tu je príklad. Toto je screenshot, ktorý som si vzal, ktorý nebol komprimovaný vôbec.
No, je to len najhorší scenár, vyvážajúci vždy pri 0% JPEG kvalite. Pre porovnanie, je tu 50% kvalitný JPEG, ktorý je takmer nerozoznateľný od zdrojového PNG obrazu, pokiaľ ho nevyfukujete a nezaujímajte.
Takže ako ušetrí toľko miesta? No, algoritmus JPEG je výkonom inžinierstva. Väčšina obrázkov ukladá zoznam čísel, pričom každé číslo predstavuje jeden pixel.
JPEG to nič z toho. Namiesto toho ukladá obrázky pomocou niečoho nazývaného Diskrétna kozinová transformácia, ktorá je kolekciou sínusových vĺn spojených s rôznou intenzitou. Používa 64 rôznych rovníc, ale väčšina z nich sa nevyužíva. To je to, čo spravuje posuvník kvality pre formát JPEG vo Photoshope a iných aplikáciách s obrázkami - vyberte koľko rovníc použijete. Aplikácie potom používajú kódovanie Huffman, aby zmenšili veľkosť súboru ešte ďalej.
To dáva súborom JPEG mimoriadne vysoký pomer kompresie, ktorý môže v závislosti od kvality znížiť počet súborov, ktoré by boli viac megabajtov až na pár kilobajtov. Samozrejme, ak ho príliš veľa používate, skončíte tým:
Kompresia videa
Používame niečo nazývané "interframe compression", ktoré vypočítava zmeny medzi jednotlivými rámcami a iba ich ukladá. Takže napríklad ak máte relatívne stále záber, ktorý vo videu zaberie niekoľko sekúnd, ušetrí sa veľa priestoru, pretože algoritmus kompresie nemusí uložiť všetky veci v scéne, ktorá sa nemení. Kompresia medzi počítačmi je hlavným dôvodom, prečo máme vôbec digitálne televízne a webové video. Bez nej by videá predstavovali stovky gigabajtov, čo je viac ako priemerná veľkosť pevného disku v roku 2005, kedy sa služba YouTube spustila.
Taktiež vzhľadom na to, že interná kompresia funguje najlepšie s väčšinou stacionárnym videom, to je dôvod, prečo confetti ruší kvalitu videa.
Poznámka: GIF to neurobí, čo je dôvod, prečo sú animované GIF často veľmi krátke a malé, ale stále majú dosť veľkú veľkosť súboru.
Ďalšia vec, ktorú je potrebné mať na pamäti, je video bitrate - množstvo dát povolených každú sekundu. Ak je vaša dátová rýchlosť 200 kb / s, vaše video bude vyzerať dosť zle. Kvalita stúpa vzhľadom na zvýšenie bitovej rýchlosti, ale po niekoľkých megabajtoch za sekundu sa vám znižuje návratnosť.
Toto je zväčšený rámček z videa medúzy. Jeden na ľavej strane je 3Mb / s a ten vpravo je 100Mb / s.
Táto demo funguje lepšie s aktuálnym videom, takže ak si to chcete prečítať sami, môžete si stiahnuť tie isté videá na testovanie dátovej rýchlosti, ktoré sa tu používajú.
Kompresia zvuku
MP3 tiež používa bitovú rýchlosť pohybujúcu sa od nízkeho konca 48 a 96 kbps (nízky koniec) až 128 a 240 kbps (celkom dobre) až 320 kb / s (high-end audio) a pravdepodobne budete počuť len rozdiel s výnimočne dobrými slúchadlami a uši).
K dispozícii sú tiež bezstratové kompresné kodeky pre audio - hlavný je FLAC - ktorý používa kódovanie LZ77 na dodanie úplne bezstratového zvuku. Niektorí ľudia prisahajú perfektnou zvukovou kvalitou FLACu, ale s prevahou MP3 sa zdá, že väčšina ľudí buď nedokáže povedať, alebo im to nevadí.