Úvodná » ako » Ako funguje kompresia súborov?

    Ako funguje kompresia súborov?

    Softvéroví inžinieri vždy vyvinuli nové spôsoby prispôsobenia veľkého množstva údajov do malého priestoru. Bolo to pravda, keď boli naše pevné disky drobné a príchod internetu práve zhoršil. Kompresia súborov má veľkú úlohu pri pripájaní k nám a umožňuje nám posielať menej dát po riadku, aby sme mohli mať rýchlejšie sťahovanie a lepšie pripojenie k zaneprázdneným sieťam.

    Tak ako to funguje?

    Na odpoveď na túto otázku by bolo potrebné vysvetliť niektoré veľmi komplikované matematiky, určite viac ako môžeme pokryť v tomto článku, ale nemusíte presne pochopiť, ako to funguje matematicky na pochopenie základov.

    Najobľúbenejšie knižnice pre kompresiu textu sa spoliehajú na dva kompresné algoritmy, pričom obidva súbežne používajú na dosiahnutie veľmi vysokých pomerov kompresie. Tieto dva algoritmy sú kódovanie "LZ77" a "Huffmanovo kódovanie". Kódovanie Huffman je dosť komplikované a my tu nebudeme podrobne vysvetľovať. V prvom rade používa nejakú fantazijnú matematiku na pridelenie kratšieho času biná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 programe Computerphile.

    LZ77, na druhej strane, je relatívne jednoduchý a o čom tu 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:

    LZ77 algoritmus by sa pozrel na tento text, uvedomiť si, že to opakuje "howtogeek" trikrát, a zmeniť na to:

    Potom, keď si chce text prečítať späť, nahradí každú inštanciu (h) "howtogeek", čo nás prináša späť na pôvodnú frázu.

    Túto kompresiu nazývame ako "bezstratové" - údaje, ktoré ste vložili, 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:

    Takže teraz, keď sa dostane do (h), bude sa pozerať späť na "howtogeek" a čítať, že namiesto toho.

    Ak máte záujem o podrobnejšie vysvetlenie, toto video od Computerphile je celkom užitočné.

    Teraz ide 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", "their" a "then". 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 takmer 95% kompresia.

    Teraz je zrejmé, že je to dosť extrémny príklad, pretože sme znova a znova opakovali to isté slovo. Vo všeobecnosti sa pravdepodobne dostanete asi 30-40% kompresie pomocou kompresného formátu ako je ZIP v súbore, ktorý je väčšinou text.

    Tento algoritmus LZ77 sa aplikuje na všetky binárne dáta, mimochodom, a nie iba na text, hoci 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?

    Kompresia videa a zvuku funguje veľmi odlišne. Na rozdiel od textu, kde môžete mať bezstratovú kompresiu a žiadne údaje nie sú stratené, s obrázkami máme to, čo sa nazýva "strata kompresie", kde strácate nejaké dáta. A čím viac budete komprimovať, tým viac údajov stratíte.

    To je to, čo vedie k tým strašným vyzerajúcim súborom JPEG, ktoré ľudia nahrávajú, zdieľajú a skenujú niekoľkokrát. Zakaždým, keď sa obraz komprimuje, stratí niektoré údaje.

    Tu je príklad. Toto je screenshot, ktorý som si vzal, ktorý nebol vôbec komprimovaný.

    Potom som túto snímku prevzal a spustil ho cez Photoshop viackrát, zakaždým ju vyexportoval ako nekvalitný JPEG. Tu je výsledok.

    Vyzerá dosť zle, správne?

    No, je to len najhorší scenár, vyváža vždy pri 0% JPEG kvalite. Pre porovnanie, tu je 50% kvalitný JPEG, ktorý je takmer nerozlíšiteľný od zdrojového obrázka PNG, pokiaľ ho nevyfukujete a nezabudnite.

    PNG pre tento obrázok bol 200 KB, ale tento 50% kvalitný JPEG je len 28 KB.

    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 sinusových vĺn spojených s rôznou intenzitou. Používa 64 rôznych rovníc, ale väčšina z nich sa nepoužíva. To je to, čo urobí kvalitný posúvač pre JPEG vo Photoshope a iných obrázkových aplikáciách - zvoľte koľko rovníc použijete. Aplikácie potom používajú Huffman kódovanie pre zníženie veľkosti súboru ešte ďalej.

    To dáva JPEGs mimoriadne vysoký pomer kompresie, ktorý môže znížiť súbor, ktorý by bol viac megabajtov až na pár kilobajtov, v závislosti od kvality. Samozrejme, ak používate to príliš veľa, skončíte týmto:

    Tento obraz je strašný. Ale menšie množstvo kompresie JPEG môže mať významný vplyv na veľkosť súboru a to robí JPEG veľmi užitočným pre kompresiu obrázkov na webových stránkach. Väčšina obrázkov, ktoré vidíte online, je komprimovaná, aby sa ušetrili časy preberania, najmä pre mobilných používateľov so zlým pripojením k dátam. V skutočnosti boli všetky obrázky na stránke How-To Geek komprimované, aby sa načítavanie stránky rýchlejšie a pravdepodobne ste si nikdy nevšimli.

    Kompresia videa

    Video funguje trochu inak ako obrázky. Mali by ste si myslieť, že by skomprimovali každý snímok videa pomocou JPEG a určite to robia, ale je tu lepšia metóda pre video.

    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álnu televíziu 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.

    Vzhľadom na to, že kompresia medzi počítačmi funguje najlepšie s väčšinou stacionárnym videom, z tohto dôvodu confetti ruší kvalitu videa.

    Poznámka: GIF to nerobí, č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šou vecou, ​​ktorú treba mať na pamäti, je jeho rýchlosť - množstvo údajov 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 dochádza k poklesu výnosov.

    Toto je zväčšený snímok prevzatý z videa medúzy. Jeden na ľavej strane je 3Mb / s a ​​ten vpravo je 100Mb / s.

    30-násobné zvýšenie veľkosti súboru, ale nie výrazné zvýšenie kvality. Všeobecne platí, že videá YouTube sa pohybujú v rozmedzí 2 až 10 Mb / s v závislosti od vášho pripojenia, pretože by sa pravdepodobne nič viac nevšimlo.

    Táto demo funguje lepšie s aktuálnym videom, takže ak si to chcete prečítať sami, môžete si stiahnuť rovnaké videá na testovanie dátovej rýchlosti, ktoré sa tu používajú.

    Kompresia zvuku

    Kompresia zvuku funguje veľmi podobne ako kompresia textu a obrazu. Tam, kde JPEG odstraňuje detaily z obrázka, ktorý sa nezobrazuje, kompresia zvuku robí to isté pre zvuky. Možno nebudete musieť počuť vrhanie gitaru na strunu, ak je skutočná gitara oveľa silnejšia.

    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ť iba rozdiel s výnimočne dobrými slúchadlami a uší).

    K dispozícii sú aj bezstratové kompresné kodeky pre zvukové zariadenia - hlavným je FLAC, ktorý používa kódovanie LZ77 na dodanie úplne bezstratového zvuku. Niektorí ľudia prisahajú dokonalou kvalitou zvuku FLAC, ale s prevahou MP3 sa zdá, že väčšina ľudí buď nedokáže povedať,.