Tātad, kā tas darbojas?
Lai atbildētu uz šo jautājumu, būtu jāatspoguļo daži ļoti sarežģīti matemātikā, noteikti vairāk nekā mēs varam aptvert šajā rakstā, bet jums nav nepieciešams precīzi saprast, kā tas darbojas matemātiski, lai saprastu pamatus.
Populārākās teksta saspiešanas bibliotēkas balstās uz diviem kompresijas algoritmiem, vienlaicīgi izmantojot abus vienlaikus, lai sasniegtu ļoti lielus kompresijas koeficientus. Šie divi algoritmi ir "LZ77" un "Huffman kodēšana". Huffmana kodēšana ir diezgan sarežģīta, un mēs šeit neuzskatīsim detalizētu informāciju par šo. Pirmkārt, tam ir nepieciešams iztēloties matemātiku, lai piešķirtu īsākubinārie kodi uz atsevišķām vēstulēm, samazinot failu izmērus procesā. Ja vēlaties uzzināt vairāk par to, izlasiet šo rakstu par to, kā darbojas kods, vai arī šo izskaidrošanas programmu, izmantojot Computerphile.
No otras puses, LZ77 ir salīdzinoši vienkāršs un par to mēs šeit runāsim. Tās mērķis ir noņemt dublētus vārdus un aizstāt tos ar mazāku "taustiņu", kas ir vārds.
Piemēram, ņemiet šo īsu teksta daļu:
Mēs saucam par kompresiju, piemēram, šo "bezzudumu" - ievadītie dati ir tādi paši kā dati, kurus jūs saņemat. Nekas nav zaudēts.
Patiesībā LZ77 neizmanto atslēgu sarakstu, bet tā vietā aizstāj otro un trešo notikumu ar saiti atpakaļ atmiņā:
Ja jūs interesē detalizēts skaidrojums, šis video no Computerphile ir diezgan noderīgs.
Tagad tas ir idealizēts piemērs. Patiesībā lielākā daļa tekstu tiek saspiesti ar tik maziem taustiņiem kā tikai dažas rakstzīmes. Piemēram, vārds "the" tiks saspiests pat tad, ja tas parādīsies tādos vārdos kā "tur", "viņu" un "tad". Ar atkārtotu tekstu jūs varat iegūt kādu traksko kompresijas pakāpi. Paņemiet šo teksta failu ar vārdu "howtogeek", kas tiek atkārtots 100 reizes. Sākotnējais teksta fails ir trīs kilobaitu lieluma. Tomēr, saspiests, tas aizņem tikai 158 baiti. Tas ir gandrīz 95% saspiešanas.
Šis LZ77 algoritms, protams, attiecas uz visiem bināriem datiem, nevis tikai uz tekstu, lai arī teksts parasti ir vieglāk saspiests, jo daudzos atkārtotajos vārdos visbiežāk lietotās valodas tiek lietotas. Piemēram, tāda valoda kā ķīniešu var būt nedaudz grūtāk saspiest nekā angļu.
Kā darbojas attēls un video kompresija?
Tas noved pie tiem šausmīgi izskatīgajiem JPEG failiem, kurus lietotāji ir augšupielādējuši, kopīgojuši un vairākkārtēji izmantojuši ekrānšāviņi. Katru reizi, kad attēls tiek saspiests, tas zaudē dažus datus.
Šeit ir piemērs. Šis ir ekrānuzņēmums, kuru es paņēmu, kas vispār nav saspiests.
Nu, tas ir tikai vissliktākais scenārijs, katru reizi eksportējot JPEG kvalitātē 0%. Salīdzinājumam, šeit ir 50% kvalitātes JPEG, kas gandrīz nav atšķirama no avota PNG attēla, ja vien jūs to neuzspiežat un nedaudz izskatīsieties.
Tātad, kā tas ietaupa tik daudz vietas? Nu, JPEG algoritms ir inženierijas feat. Lielākajā daļā attēlu tiek saglabāts ciparu saraksts, un katram skaitlim ir viens pikselis.
JPEG to nedara. Tā vietā tas saglabā attēlus, izmantojot kaut ko sauc par "Diskrēto kosinātisko transformāciju", kas ir sinuso viļņu kolekcija, kas apvienoti dažādās intensitātēs. Tas izmanto 64 dažādus vienādojumus, taču lielākā daļa no tām netiek izmantotas. Tas ir tas, ka JPEG kvalitātes slīdni Photoshop un citās attēlu programmās dara - izvēlēties, cik vienādojumu izmantot. Pēc tam lietotnes izmanto Huffmana kodējumu, lai vēl vairāk samazinātu faila lielumu.
Tas nodrošina JPEG ar pārsteidzoši augstu saspiešanas koeficientu, kas var samazināt failu, kura daudzums ir mazāks par pāris kilobatiem, atkarībā no kvalitātes. Protams, ja jūs to izmantojat pārāk daudz, jūs galu galā saņemsit šo:
Video kompresija
Mēs izmantojam kaut ko sauc par "interframe compression", kas aprēķina izmaiņas starp katru rāmi un tikai tos saglabā. Tātad, piemēram, ja videoklipā ir relatīvi nekustīgs attēls, kas videoklipā aizņem vairākas sekundes, daudz vietas tiek saglabātas, jo kompresijas algoritmam nav jāuzglabā visas lietas, kas nemainās. Interframe saspiešana ir galvenais iemesls, kādēļ mums ir digitālā televīzija un tīmekļa videoklips. Bez tā videoklipiem būtu simtiem gigabaitu, kas ir vairāk nekā vidējais cietā diska lielums 2005. gadā, kad YouTube uzsāka.
Tā kā interframe saspiešana vislabāk darbojas ar lielākoties stacionāru videoklipu, tieši tāpēc konfeti satricina video kvalitāti.
Piezīme: GIF to nedara, tādēļ animētie GIF bieži ir ļoti īsi un mazi, taču tiem joprojām ir diezgan liels faila lielums.
Vēl viena lieta, kas jāpatur prātā par videoklipu, ir tās bitu pārraides ātrums - katras sekundes laikā atļautais datu apjoms. Piemēram, ja jūsu datu pārraides ātrums ir 200 kb / s, jūsu videoklips izskatīsies diezgan slikti. Kvalitāte palielinās, jo bitu pārraides ātrums palielinās, bet pēc pāris megabaitiem sekundē jums samazinās peļņa.
Tas ir tuvināts kadrs, kas ņemts no medūzas video. Kreisajā pusē atrodas 3Mb / s, bet labajā pusē ir 100Mb / s.
Šis demo darbojas labāk ar faktisko videoklipu, tādēļ, ja vēlaties to pārbaudīt pats, varat lejupielādēt tos pašus bitrate testus, kas tiek izmantoti šeit.
Audio kompresija
MP3 arī izmanto bitu pārraides ātrumu, sākot no 48 un 96 kbps zemā gala (zemā gala) līdz 128 un 240 kb / s (diezgan labi) līdz 320 kb / s (augstas klases audio), un jūs, iespējams, dzirdēsiet tikai atšķirību ar īpaši labām austiņām ( un ausis).
Audio formātā ir arī bezzudumu kompresijas kodeki, galvenais - FLAC, kas izmanto LZ77 kodējumu, lai nodrošinātu pilnīgi bezzudumu audio. Daži cilvēki zvēru ar FLAC perfekto skaņas kvalitāti, bet ar MP3 izplatību, šķiet, ka lielākā daļa cilvēku vai nu nespēj pateikt vai nepamanīs atšķirību.