Ako funguje kompresia súborov?

Obsah:

Ako funguje kompresia súborov?
Ako funguje kompresia súborov?

Video: Ako funguje kompresia súborov?

Video: Ako funguje kompresia súborov?
Video: PLAYSTATION - ТЕЛЕФОН! 2024, Apríl
Anonim
Softvéroví inžinieri vždy vyvíjali 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 zohráva veľkú úlohu pri pripájaní k nám a umožňuje nám posielať menej dát po riadku, takže môžeme mať rýchlejšie sťahovanie a viac zapojení do zaneprázdnených sietí.
Softvéroví inžinieri vždy vyvíjali 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 zohráva veľkú úlohu pri pripájaní k nám a umožňuje nám posielať menej dát po riadku, takže môžeme mať rýchlejšie sťahovanie a viac zapojení do zaneprázdnených sietí.

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:

LZ77 algoritmus by sa pozrel na tento text, uvedomiť si, že to opakuje "howtogeek" trikrát, a zmeniť na to:
LZ77 algoritmus by sa pozrel na tento text, uvedomiť si, že to opakuje "howtogeek" trikrát, a zmeniť na to:
Potom, keď chce text prečítať späť, nahradí každú inštanciu (h) "howtogeek", čo nás prináša späť k pôvodnej frázii.
Potom, keď chce text prečítať späť, nahradí každú inštanciu (h) "howtogeek", čo nás prináša späť k pôvodnej frázii.

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:

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

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.

Teraz je zrejmé, že je to celkom extrémny príklad, pretože sme mali stále rovnaké slovo opakovane. 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 textový.
Teraz je zrejmé, že je to celkom extrémny príklad, pretože sme mali stále rovnaké slovo opakovane. 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 textový.

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?

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

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.
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, že?
Vyzerá dosť zle, že?

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.

PNG pre tento obrázok bol 200 KB, ale tento 50% kvalitný JPEG je len 28 KB.
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 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:

Tento obraz je strašný.Ale menšie množstvo kompresie JPEG môže mať značný 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ými dátovými pripojeniami. 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.
Tento obraz je strašný.Ale menšie množstvo kompresie JPEG môže mať značný 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ými dátovými pripojeniami. 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 jednoducho komprimovali každý snímok videa pomocou JPEG a určite to robia, ale je tu lepšia metóda pre video.
Video funguje trochu inak ako obrázky. Mali by ste si myslieť, že by jednoducho komprimovali 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á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.

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, keďže sa pravdepodobne nič viac nezobrazí.
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, keďže sa pravdepodobne nič viac nezobrazí.

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

Kompresia zvuku funguje veľmi podobne ako kompresia textu a obrazu. Kde JPEG odstraňuje detaily z obrazu, ktorý sa nezobrazí, 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.
Kompresia zvuku funguje veľmi podobne ako kompresia textu a obrazu. Kde JPEG odstraňuje detaily z obrazu, ktorý sa nezobrazí, 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ť 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í.

Odporúča: