Hogyan működik a fájltömörítés?

Tartalomjegyzék:

Hogyan működik a fájltömörítés?
Hogyan működik a fájltömörítés?

Videó: Hogyan működik a fájltömörítés?

Videó: Hogyan működik a fájltömörítés?
Videó: How to Display FPS, GPU, CPU Usage in Games | Windows 10 tips and tricks - YouTube 2024, November
Anonim
A szoftvermérnökök mindig új módszereket fejlesztettek ki arra, hogy sok adatot egy kis helyre telepítsenek. Igaz, amikor a merevlemezünk kicsi volt, és az internet megjelenése éppen kritikusabbá tette. A fájlok tömörítése nagy szerepet játszik abban, hogy kapcsolatba léphessünk velünk, így kevesebb adatot küldhetünk le a vonalról, így gyorsabban tölthetünk le és több kapcsolatot tudunk elfoglalni a forgalmas hálózatokon.
A szoftvermérnökök mindig új módszereket fejlesztettek ki arra, hogy sok adatot egy kis helyre telepítsenek. Igaz, amikor a merevlemezünk kicsi volt, és az internet megjelenése éppen kritikusabbá tette. A fájlok tömörítése nagy szerepet játszik abban, hogy kapcsolatba léphessünk velünk, így kevesebb adatot küldhetünk le a vonalról, így gyorsabban tölthetünk le és több kapcsolatot tudunk elfoglalni a forgalmas hálózatokon.

Tehát hogyan működik?

Ennek a kérdésnek a megválaszolásához néhány nagyon bonyolult matematika magyarázata lenne, minden bizonnyal több, mint amit ebben a cikkben le tudunk fedni, de nem kell pontosan megértenünk, hogyan működik matematikailag az alapok megértése.

A szövegek tömörítéséhez a legnépszerűbb könyvtárak két tömörítési algoritmust támaszkodnak, egyidejűleg mindkettővel a nagyon nagy tömörítési arány eléréséhez. Ez a két algoritmus "LZ77" és "Huffman kódolás". A Huffman kódolás meglehetősen bonyolult, és itt nem fogunk részletesen foglalkozni. Elsősorban néhány finom matematikát használ rövidebb hozzárendeléshezbináris kódok egyéni betűkkel, a fájl méretének csökkentésével. Ha többet szeretne megtudni erről, nézze meg ezt a cikket a kód működéséről, vagy ezt a magyarázó a Computerphile.

Az LZ77 viszont viszonylag egyszerű, és itt fogunk beszélni. A kettős szavak eltávolítására törekszik, és kicseréljük őket egy kisebb, kulcsszóval rendelkező kulcsra.

Vegyük például ezt a rövid szöveget:

Az LZ77 algoritmus megnézné ezt a szöveget, rájön, hogy háromszor ismételje meg a "howtogeek" -t, és megváltoztatja ezt:
Az LZ77 algoritmus megnézné ezt a szöveget, rájön, hogy háromszor ismételje meg a "howtogeek" -t, és megváltoztatja ezt:
Aztán, amikor vissza kívánja olvasni a szöveget, a (h) minden példányát "howtogeek" -el helyettesítené, és visszaadja az eredeti kifejezésbe.
Aztán, amikor vissza kívánja olvasni a szöveget, a (h) minden példányát "howtogeek" -el helyettesítené, és visszaadja az eredeti kifejezésbe.

Ezt a "veszteségmentes" tömörítést nevezzük - az Ön által megadott adatok megegyeznek az adatokkal. Semmi sem veszít.

A valóságban az LZ77 nem használja a kulcsok listáját, hanem helyettesíti a második és a harmadik előfordulást a memóriában lévő hivatkozással:

Tehát most, amikor megérkezik (h), visszanéz a "howtogeek" -re, és ezt olvassa el.
Tehát most, amikor megérkezik (h), visszanéz a "howtogeek" -re, és ezt olvassa el.

Ha részletesebb magyarázatot szeretne, akkor a Computerphile-tól származó videó nagyon hasznos.

Ez egy idealizált példa. A valóságban a legtöbb szöveget olyan kulcsokkal tömörítik, mint néhány karakter. Például az "a" szó tömörül akkor is, ha olyan szavakkal jelenik meg, mint az "ott", "az" és "azután". A megismételt szöveggel őrült tömörítési arányokat kaphat. Vidd ezt a szövegfájlt a "howtogeek" szóval 100 alkalommal megismétlődve. Az eredeti szövegfájl három kilobájt méretű. A tömörítéskor azonban csak 158 bájtot vesz igénybe. Ez közel 95% -os tömörítés.

Nyilvánvaló, hogy ez egy meglehetősen szélsőséges példa, mivel ugyanazt a szót újra és újra megismételjük. Az általános gyakorlatban valószínűleg körülbelül 30-40% -os tömörítést kapsz tömörítési formátum használatával, például ZIP-t egy olyan fájlra, amely többnyire szöveges.
Nyilvánvaló, hogy ez egy meglehetősen szélsőséges példa, mivel ugyanazt a szót újra és újra megismételjük. Az általános gyakorlatban valószínűleg körülbelül 30-40% -os tömörítést kapsz tömörítési formátum használatával, például ZIP-t egy olyan fájlra, amely többnyire szöveges.

Ez az LZ77 algoritmus az összes bináris adatra vonatkozik, egyébként nem csak szöveges, bár a szöveget általában könnyebb összenyomni, mivel a legtöbb nyelv többször használatos. Például egy olyan nyelv, mint a kínai, kicsit nehezebb tömöríteni, mint az angol.

Hogyan működik a kép és a videó tömörítése?

A videó és hang tömörítése nagyon másképp működik. Ellentétben a szöveggel, ahol veszteségmentes tömörítéssel rendelkezhet, és nincs adat elveszett, a képekkel megvan az úgynevezett "Lossy Compression", ahol bizonyos adatokat elveszítünk. És minél több tömörítenél, annál több adatot veszítesz.
A videó és hang tömörítése nagyon másképp működik. Ellentétben a szöveggel, ahol veszteségmentes tömörítéssel rendelkezhet, és nincs adat elveszett, a képekkel megvan az úgynevezett "Lossy Compression", ahol bizonyos adatokat elveszítünk. És minél több tömörítenél, annál több adatot veszítesz.

Ez vezet azokhoz a szörnyű megjelenésű JPEG-fájlokhoz, amelyeket az emberek töltöttek fel, megosztottak és többször is készítettek képernyőt. Minden alkalommal, amikor a kép tömörül, elvesz néhány adatot.

Íme egy példa. Ez egy screenshot volt, amit egyáltalán nem tömörítettem.

Ezután elkészítettem ezt a screenshotot, és többször is átfutottam a Photoshopon, miközben minőségi JPEG-ként exportáltam. Itt van az eredmény.
Ezután elkészítettem ezt a screenshotot, és többször is átfutottam a Photoshopon, miközben minőségi JPEG-ként exportáltam. Itt van az eredmény.
Nagyon rosszul néz ki, ugye?
Nagyon rosszul néz ki, ugye?

Nos, ez csak a legrosszabb forgatókönyv, amely minden alkalommal exportál 0% -os JPEG minőségben. Összehasonlításképpen, itt van egy 50% -os minőségi JPEG, amely szinte megkülönböztethetetlen a forrás PNG-képétől, hacsak nem fújja fel, és közelebbről megvizsgálja.

A kép PNG-je 200 KB méretű, de ez az 50% -os minőségű JPEG csak 28 KB.
A kép PNG-je 200 KB méretű, de ez az 50% -os minőségű JPEG csak 28 KB.

Tehát, hogyan takarít meg annyi helyet? Nos, a JPEG algoritmus a mérnöki feladat. A legtöbb kép tárolja a számok listáját, mindegyik szám egyetlen pixelet képvisel.

A JPEG ezt sem teszi. Ehelyett a képeket a Discrete Cosine Transform-el (Discrete Cosine Transform) nevezik, amely a különböző intenzitással összekapcsolt szinuszhullámok gyűjteménye. 64 különböző egyenletet használ, de ezek többsége nem használatos. Ez az, amit a JPEG képminőség csúszka a Photoshopban és más képes alkalmazásokban - válassza ki, hogy hány egyenletet használjon. Az alkalmazások ezt követően a Huffman kódolással tovább csökkentik a fájlméretet.

Ez a JPEG-ekhez képest őrülten nagy tömörítési arányt eredményez, amely a minőségtől függően akár több kilobájtnyi több megabájtot is képes csökkenteni. Természetesen, ha túl sokat használsz, akkor ezzel végül:

Ez a kép borzalmas.De a kisebb mennyiségű JPEG tömörítés jelentős hatással lehet a fájlméretre, és ezáltal a JPEG nagyon hasznos a webhelyek tömörítéséhez. Az online legtöbbet megtekintett képeket tömörítve töltheti le a letöltési idő, különösen a rossz adatkapcsolattal rendelkező mobil felhasználók számára. Valójában a How-To Geek összes képét tömörítették, hogy gyorsabbá tegyék az oldalak betöltését, és valószínűleg soha nem vették észre.
Ez a kép borzalmas.De a kisebb mennyiségű JPEG tömörítés jelentős hatással lehet a fájlméretre, és ezáltal a JPEG nagyon hasznos a webhelyek tömörítéséhez. Az online legtöbbet megtekintett képeket tömörítve töltheti le a letöltési idő, különösen a rossz adatkapcsolattal rendelkező mobil felhasználók számára. Valójában a How-To Geek összes képét tömörítették, hogy gyorsabbá tegyék az oldalak betöltését, és valószínűleg soha nem vették észre.

Videó tömörítés

A videó kicsit eltér a képektől. Azt gondolná, hogy csak tömörítenék a videók mindegyikét a JPEG használatával, és biztosan ezt teszik, de van egy jobb módja a videónak.
A videó kicsit eltér a képektől. Azt gondolná, hogy csak tömörítenék a videók mindegyikét a JPEG használatával, és biztosan ezt teszik, de van egy jobb módja a videónak.

Használunk valamit "interframe compression" néven, amely kiszámítja a változásokat az egyes kockák között, és csak azokat tárolja. Tehát például, ha viszonylag lövéses felvétel készítesz, amely több másodpercet vesz fel a videóban, akkor sok hely kerül mentésre, mivel a tömörítési algoritmusnak nem kell minden olyan dolgot tárolnia a jelenetben, amely nem változik. Az interframe tömörítés a fő oka annak, hogy egyáltalán digitális TV-t és webes videót használunk. Anélkül, hogy a videók több száz gigabájt lennének, ami meghaladná az átlagos merevlemez méretét 2005-ben, amikor a YouTube elindult.

Továbbá, mivel az interfunkciós tömörítés a legjobban a legtöbb rögzített videóval működik, ezért a konfetti rombolja a videó minőségét.

Megjegyzés: a GIF ezt nem teszi meg, ezért az animált GIF-ek gyakran nagyon rövidek és kicsiek, de mégis elég nagy fájlmérettel rendelkeznek.

Egy másik dolog, hogy szem előtt tartsuk a videót a bitrátája - az adatok mennyisége minden másodpercben megengedett. Ha például a bitsebessége 200 kb / s, akkor a videó elég rosszul fog kinézni. A minőség felemelkedik, amint a bitráta felemelkedik, de másodpercenként néhány megabájt után csökken.

Ez egy nagyított kocka, amelyet egy medúza videója vett. A bal oldalon 3Mb / s, a jobb oldalon 100Mb / s.

A fájlméret 30-szoros növekedése, de nem sokkal nagyobb a minőség. Általában a YouTube-videók a kapcsolódástól függően 2-10Mb / s-ot használnak, mivel valószínűleg nem fogják észrevenni.
A fájlméret 30-szoros növekedése, de nem sokkal nagyobb a minőség. Általában a YouTube-videók a kapcsolódástól függően 2-10Mb / s-ot használnak, mivel valószínűleg nem fogják észrevenni.

Ez a demo jobban működik a tényleges videóval, így ha meg szeretné nézni magának, akkor itt letöltheti az itt használt bitráta teszt videókat.

Audio tömörítés

Az audio tömörítés nagyon hasonlít a szöveg és a kép tömörítéséhez. Ha a JPEG eltávolítja a nem látható képről a részleteket, akkor a hangok tömörítése ugyanaz a hangok esetében. Lehet, hogy nem kell hallani a gitárvágás csörömpölését a karaktersoron, ha a tényleges gitár sokkal, sokkal hangosabb.
Az audio tömörítés nagyon hasonlít a szöveg és a kép tömörítéséhez. Ha a JPEG eltávolítja a nem látható képről a részleteket, akkor a hangok tömörítése ugyanaz a hangok esetében. Lehet, hogy nem kell hallani a gitárvágás csörömpölését a karaktersoron, ha a tényleges gitár sokkal, sokkal hangosabb.

Az MP3 bitrátát is használ, 48 és 96 kbps (alacsony vég) 128 és 240 kb / s (nagyon jó) 320 kbit / s-ig (high-end audio), és valószínűleg csak a kivételesen jó fejhallgatóval és fülek).

Vannak veszteségmentes tömörítő kodekek is az audióhoz - a legfontosabb a FLAC - amely LZ77 kódolást használ, és teljes veszteségmentes hangot nyújt. Vannak, akik a FLAC tökéletes hangminőségével esküdnek, de az MP3 előfordulása miatt úgy tűnik, a legtöbb ember nem tudja megmondani, vagy nem bánja a különbséget.

Ajánlott: