Kā darbojas failu saspiešana?
Programmatūras inženieri vienmēr ir izstrādājuši jaunus veidus, kā ievietot daudzus datus nelielā telpā. Tā bija taisnība, kad mūsu cietie diski bija niecīgi, un interneta ieviešana tikko ir padarījusi to kritiskāku. Failu saspiešanai ir liela nozīme, veidojot savienojumu ar mums, ļaujot mums nosūtīt mazāk datu rindā, lai mēs varētu saņemt ātrākus lejupielādes un vairāk pieslēgumu aizņemtiem tīkliem.
Tātad, kā tas darbojas?
Lai atbildētu uz šo jautājumu, būtu jāizskaidro dažas ļoti sarežģītas matemātikas, protams, vairāk nekā mēs varam aptvert šajā rakstā, bet jums nav nepieciešams precīzi saprast, kā tas matemātiski darbojas, lai izprastu pamatus..
Vispopulārākās teksta saspiešanas bibliotēkas balstās uz diviem kompresijas algoritmiem, izmantojot abus vienlaicīgi, lai sasniegtu ļoti augstus saspiešanas koeficientus. Šie divi algoritmi ir "LZ77" un "Huffman kodēšana." Huffman kodēšana ir diezgan sarežģīta, un mēs šeit neko nespēsim detalizēt. Pirmkārt, tā izmanto kādu iedomātu matemātiku, lai piešķirtu īsāku binārie kodi uz atsevišķiem burtiem, sarūkot faila izmēriem. Ja vēlaties uzzināt vairāk par to, skatiet šo rakstu par koda darbību vai šo Computerphile paskaidrojumu.
No otras puses, LZ77 ir salīdzinoši vienkāršs un par to mēs runāsim. Tā mērķis ir noņemt dublētus vārdus un aizstāt tos ar mazāku „atslēgu”, kas pārstāv vārdu.
Ņemiet šo īso tekstu, piemēram:
LZ77 algoritms aplūkotu šo tekstu, saprotot, ka tas atkārto „howtogeek” trīs reizes un maina to uz šo:
Tad, kad tas vēlas izlasīt tekstu atpakaļ, tas aizstātu katru (h) gadījumu ar “howtogeek”, lai atgrieztos pie sākotnējās frāzes.
Mēs saucam par kompresiju kā šo „bezzudumu” - ievadītie dati ir tādi paši kā dati, ko jūs saņemat. Nekas nav zaudēts.
Patiesībā LZ77 neizmanto taustiņu sarakstu, bet aizstāj otro un trešo notikumu ar saiti atpakaļ atmiņā:
Tātad, tagad, kad tā nonāk (h), tā atskatīsies uz „howtogeek” un lasīs to.
Ja jūs interesē sīkāks skaidrojums, šis video no Computerphile ir diezgan noderīgs.
Tagad tas ir ideāls piemērs. Patiesībā lielākā daļa tekstu tiek saspiesti ar atslēgām, kas ir tik mazas kā tikai dažas rakstzīmes. Piemēram, vārds “the” tiktu saspiests pat tad, ja tas parādās tādos vārdos kā “tur”, „viņu” un “tad”. Ar atkārtotu tekstu jūs varat iegūt dažus crazy saspiešanas koeficientus. Paņemiet šo teksta failu ar vārdu „howtogeek” 100 reizes. Sākotnējais teksta fails ir trīs kilobaiti. Saspiežot, tas aizņem tikai 158 baitus. Tas ir gandrīz 95% saspiešana.
Tagad, protams, tas ir diezgan ekstrēms piemērs, jo mēs tikko atkārtojām to pašu vārdu. Kopumā praksē jūs, iespējams, saņemsiet aptuveni 30-40% kompresijas, izmantojot kompresijas formātu, piemēram, ZIP, failā, kas lielākoties ir teksts.
Šis LZ77 algoritms attiecas uz visiem binārajiem datiem, starp citu, nevis tikai tekstu, lai gan teksts parasti ir vieglāk saspiests, ņemot vērā to, cik daudz atkārtoto vārdu lieto lielākā daļa valodu. Piemēram, ķīniešu valoda varētu būt nedaudz grūtāk saspiesta, nekā, piemēram, angļu valodā.
Kā darbojas attēls un video saspiešana?
Video un audio kompresija darbojas ļoti atšķirīgi. Atšķirībā no teksta, kurā var būt bezzudumu saspiešana, un dati nav pazaudēti, ar attēliem, kas tiek saukti par “Zaudējumu saspiešanu”, kur jūs zaudējat dažus datus. Jo vairāk jūs saspiežat, jo vairāk datu zaudēsiet.
Tas noved pie tiem briesmīgajiem JPEG, kurus cilvēki ir augšupielādējuši, koplietojuši un attēlojuši vairākas reizes. Katru reizi, kad attēls tiek saspiests, tas zaudē dažus datus.
Lūk, piemērs. Šis ir ekrānuzņēmums, ko es uzlika, kas vispār nav saspiesta.
Tad es paņēmu šo ekrānuzņēmumu un vairākas reizes pabeidzu to, izmantojot Photoshop, katru reizi eksportējot to kā zemas kvalitātes JPEG. Lūk, rezultāts.
Izskatās diezgan slikti, labi?
Nu, tas ir tikai sliktākais scenārijs, kas katru reizi eksportē ar 0% JPEG kvalitāti. Salīdzinājumam, šeit ir 50% kvalitatīvs JPEG, kas gandrīz neatšķiras no avota PNG attēla, ja vien jūs to nesasprādzējat un tuvāk apskatāt.
Šī attēla PNG lielums bija 200 KB, bet šis 50% kvalitātes JPEG ir tikai 28 KB.
Tātad, kā tas ietaupa tik daudz vietas? Nu, JPEG algoritms ir inženierzinātnes iezīme. Lielākā daļa attēlu saglabā numuru sarakstu, katrs numurs attēlo vienu pikseļu.
JPEG to nedara. Tā vietā tā saglabā attēlus, izmantojot kaut ko, ko sauc par diskrētu kosīna pārveidojumu, kas ir sinuso viļņu kolekcija, kas pievienota dažādās intensitātēs. Tas izmanto 64 dažādus vienādojumus, bet lielākā daļa no tiem netiek izmantoti. Tas ir tas, ko Photoshop un citu attēlu lietotņu JPEG kvalitātes slīdnis izvēlas, cik vienādojumu izmantot. Pēc tam lietotnes izmanto Huffman kodējumu, lai vēl vairāk samazinātu faila lielumu.
Tas dod JPEG neparasti augstu saspiešanas koeficientu, kas var samazināt failu, kas būtu vairāki megabaiti, līdz pāris kilobaitiem, atkarībā no kvalitātes. Protams, ja jūs to lietojat pārāk daudz, jūs beidzat ar šo:
Šis attēls ir briesmīgs. Bet nelieliem JPEG saspiešanas apjomiem var būt ievērojama ietekme uz faila lielumu, un tas padara JPEG ļoti noderīgu attēlu kompresijai tīmekļa vietnēs. Lielākā daļa attēlu, kurus redzat tiešsaistē, tiek saspiesti, lai saglabātu lejupielādes laikus, īpaši mobilajiem lietotājiem, kuriem ir slikti datu savienojumi. Faktiski visi attēli, kas atrodas uz How-To Geek, ir saspiesti, lai lapas ielādētu ātrāk, un jūs, iespējams, nekad neesat ievērojuši.
Video kompresija
Video darbojas nedaudz atšķirīgi no attēliem. Jūs domājat, ka viņi vienkārši saspiestu katru video kadru, izmantojot JPEG, un viņi to noteikti dara, bet video metode ir labāka.
Mēs izmantojam kaut ko, ko sauc par “interfeisa kompresiju”, kas aprēķina izmaiņas starp katru rāmi un saglabā tikai tās. Tā, piemēram, ja jums ir salīdzinoši vēl kadrs, kas aizņem vairākas sekundes video, daudz vietas tiek saglabāta, jo saspiešanas algoritmam nav jāglabā visas lietas, kas nemainās. Interframe kompresija ir galvenais iemesls, kāpēc mums ir digitālā televīzija un tīmekļa video. Bez tam videoklipi būtu simtiem gigabaitu, kas ir vairāk nekā vidējais cietā diska izmērs 2005. gadā, kad YouTube sāka darboties.
Turklāt, tā kā interfeisa saspiešana vislabāk darbojas galvenokārt ar stacionāro video, tas ir iemesls, kāpēc konfeti iznīcina video kvalitāti.
Piezīme: GIF to nedara, tāpēc animēti GIF bieži ir ļoti īsi un mazi, taču tiem joprojām ir diezgan liels faila izmērs.
Vēl viena lieta, kas jāpatur prātā par video, ir tās bitu pārraides ātrums - datu apjoms, kas ir atļauts katrā sekundē. Ja, piemēram, jūsu bitu pārraides ātrums ir 200 kb / s, video izskatīsies diezgan slikti. Kvalitāte palielinās, pieaugot bitu pārraides ātrumam, bet pēc pāris megabaitiem sekundē jūs saņemat samazinošu peļņu.
Tas ir palielināts rāmis, kas ņemts no medūzu video. Kreisajā pusē atrodas 3Mb / s, un labajā pusē - 100Mb / s.
Failu lieluma palielinājums par 30x, bet nav daudz augstāks kvalitātes līmenis. Parasti YouTube videoklipi ir atkarīgi no jūsu savienojuma apmēram 2–10 MB / s, jo, iespējams, nekas vairāk netiks pamanīts.
Šī demonstrācija darbojas labāk, izmantojot faktisko videoklipu, tādēļ, ja vēlaties to pārbaudīt pats, varat lejupielādēt tos pašus bitu pārraides testēšanas videoklipus, ko izmanto šeit.
Audio kompresija
Audio saspiešana darbojas ļoti līdzīgi teksta un attēlu saspiešanai. Ja JPEG noņem detaļu no attēla, ko jūs neredzēsiet, skaņas kompresija notiek tāpat. Iespējams, ka nav nepieciešams dzirdēt ģitāras izķeršanos uz virknes, ja faktiskā ģitāra ir daudz, daudz skaļāka.
MP3 izmanto arī bitu pārraides ātrumu, sākot no 48 un 96 kbps (zema līmeņa) līdz 128 un 240 kbps (diezgan labs) līdz 320kbps (augstas klases audio), un jūs, iespējams, dzirdēsiet tikai atšķirību ar ārkārtīgi labām austiņām ( un ausis).
Pastāv arī bezzudumu kompresijas kodeki audio-galvenajam, kas ir FLAC, kas izmanto LZ77 kodējumu, lai nodrošinātu pilnīgi bezzudumu audio. Daži cilvēki zvēr FLAC perfektu skaņas kvalitāti, bet ar MP3 izplatību, šķiet, ka lielākā daļa cilvēku nevar pateikt vai neatceras atšķirību.