If-Koubou

Kā darbojas failu saspiešana?

Kā darbojas failu saspiešana? (Kā)

Programmatūras inženieri vienmēr ir izstrādājuši jaunus veidus, kā daudzus datus ievietot nelielā telpā. Tas bija taisnība, kad mūsu cietais disks bija niecīgs, un interneta parādīšanās tikko padarīja to kritisku. Failu kompresijai ir liela nozīme, savienojot mūs, ļaujot mums sūtīt mazāk datu pa līniju, lai mēs varētu saņemt ātrākas lejupielādes un piemērotākus savienojumus uz aizņemtiem tīkliem.

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:

LZ77 algoritms apskatīs šo tekstu, sapratīs, ka tas trīs reizes atkārtojas "howtogeek" un mainīs to uz šo:

Tad, kad tā vēlas nolasīt tekstu atpakaļ, tas aizstātu katru gadījumu ar (h) ar "howtogeek", atvedot mūs atpakaļ uz sākotnējo frāzi.

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ņā:

Tātad tagad, kad tas nokļūst (h), tas atgriezīsies pie "howtogeek" un lasīs to vietā.

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.

Tagad acīmredzot tas ir diezgan ārkārtējs piemērs, jo mums atkal atkārtojās viens un tas pats vārds. Parasti jūs, iespējams, saņemsiet aptuveni 30-40% saspiešanas, izmantojot kompresijas formātu, piemēram, ZIP failā, kas galvenokārt ir teksts.

Š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?

Video un audio kompresija darbojas ļoti atšķirīgi. Atšķirībā no teksta, kurā var būt bezzudumu saspiešana, un netiek zaudēti dati, ar attēliem mums ir tā sauktā "Lossy Compression", kurā jūs zaudējat dažus datus. Jo vairāk jūs saspiežat, jo vairāk datu jūs zaudēsit.

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.

Tad es paņēmu šo ekrānuzņēmumu un pabeidzu to vairākkārt ar Photoshop, katru reizi eksportējot to kā zemas kvalitātes JPEG. Lūk, rezultāts.

Izskatās diezgan slikti, vai ne?

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.

Šī attēla PNG izmērs 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ž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:

Šis attēls ir briesmīgs. Tomēr maziem JPEG saspiešanas apjomiem var būt būtiska ietekme uz faila lielumu, un tas padara JPEG par ļoti noderīgu attēlu saspiešanai tīmekļa vietnēs. Lielākā daļa attēlu, ko redzat tiešsaistē, ir saspiesti, lai saglabātu lejupielādes laiku, it īpaši mobilajiem lietotājiem ar sliktiem datu savienojumiem. Faktiski visi Image-Geek attēli ir saspiesti, lai ātrāk ielādētu lapu, un jūs, iespējams, nekad pamanījuši.

Video kompresija

Videoklips nedaudz atšķiras no attēliem.Jūs domājat, ka viņi vienkārši saspiež visus video kadrus, izmantojot JPEG, un viņi noteikti dara to, taču video ir labāka metode.

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.

Faila lielums ir 30 reizes lielāks, taču kvalitāte nav ievērojami palielinājusies. Parasti YouTube videoklipi atkarībā no jūsu savienojuma ir apmēram 2-10Mb / s, jo, iespējams, tas netiks pamanīts.

Š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

Audio saspiešana darbojas ļoti līdzīgi teksta un attēlu kompresijai. Ja JPEG noņem attēlu no attēla, kuru neredzēsiet, audio sarežģītībai tas pats attiecas uz skaņām. Jums var nebūt nepieciešams dzirdēt dziesmu par ģitāras pick par string, ja faktiskā ģitāra ir daudz, daudz skaļāk.

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.