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:
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:
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.
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?
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.
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.
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:
Videó tömörítés
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.
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 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.