Како функционише компресија датотека?
Софтверски инжењери су увек развијали нове начине за уношење великог броја података у мали простор. Било је истина када су наши хард дискови били малени, а појављивање интернета га је само учинило критичнијим. Компресија датотека игра велику улогу у повезивању нас, дозвољавајући нам да шаљемо мање података низ линију тако да можемо брже преузимати и уклопити више веза на заузете мреже.
Дакле, како функционише?
Да бисте одговорили на то питање, требало би да објасните неке веома компликоване математике, свакако више него што можемо да покријемо у овом чланку, али не морате тачно да разумете како то функционише математички да бисте разумели основе..
Најпопуларније библиотеке за компримовање текста ослањају се на два алгоритма компресије, користећи оба истовремено да би се постигли веома високи омјери компресије. Ова два алгоритма су "ЛЗ77" и "Хуффманово кодирање". Хуффманово кодирање је прилично компликовано, и нећемо улазити у детаље о томе овдје. Првенствено, користи неку фенси математику да додели краће бинарни кодови на појединачна слова, смањујући величине датотека у процесу. Ако желите да сазнате више о томе, погледајте овај чланак о томе како ради код, или овај објашњивач од стране Цомпутерпхиле-а.
ЛЗ77 је, с друге стране, релативно једноставан и о томе ћемо говорити овдје. Он покушава да уклони дупле речи и замени их мањим „кључем“ који представља реч.
Узмите овај кратки текст, на пример:
Алгоритам ЛЗ77 би погледао овај текст, схватио да три пута понавља "ховтогеек" и мијења га у ово:
Затим, када жели да прочита текст назад, замениће сваки примерак (х) са "ховтогеек", враћајући нас на оригиналну фразу.
Ми зовемо компресију као што је ова "без губитака" - подаци које унесете су исти као и подаци које извадите. Ништа није изгубљено.
У стварности, ЛЗ77 не користи листу кључева, већ замењује другу и трећу појаву линком у меморији:
Дакле, сада, када дође до (х), он ће се осврнути на “ховтогеек” и прочитати то уместо тога.
Ако сте заинтересовани за детаљније објашњење, овај видео из Цомпутерфила је веома користан.
Ово је идеализовани пример. У стварности, већина текста је сажета кључевима од само неколико знакова. На пример, реч “тхе” би била компримована чак и када би се појавила у речима као што су “тамо”, “њихова” и “онда”. Са поновљеним текстом, можете добити неке луде компресије. Узмите овај текстуални фајл са речи ховтогеек 100 пута. Оригинална текстуална датотека је величине три килобајта. Када се компримује, заузима само 158 бајтова. То је скоро 95% компресија.
Очигледно, то је прилично екстреман пример, пошто смо исту реч понављали изнова и изнова. У општој пракси, вероватно ћете добити око 30-40% компресије користећи формат компресије као што је ЗИП на датотеци која је углавном текстуална.
Овај ЛЗ77 алгоритам се примењује на све бинарне податке, успут, а не само на текст, мада је текст генерално лакши за компримовање због тога колико је поновљених речи које већина језика користи. Језик попут кинеског можда је мало теже компримирати од енглеског, на примјер.
Како функционише компресија слике и видеа?
Видео и аудио компресија ради веома различито. За разлику од текста у којем можете имати компресију без губитака, а подаци се не губе, са сликама имамо оно што се назива "Лосси Цомпрессион" гдје губите неке податке. И што више компримирате, више ћете изгубити податке.
То је оно што доводи до оних ЈПЕГ-ова који изгледају ужасно, људи су учитали, дијелили и снимали сцреенсхотове више пута. Сваки пут када се слика компримира, она губи неке податке.
Ево примера. Ово је снимак који сам узео и који уопште није компримован.
Затим сам снимио тај снимак екрана и покренуо га кроз Пхотосхоп више пута, сваки пут га извозивши као ЈПЕГ ниске квалитете. Ево резултата.
Изгледа прилично лоше, тачно?
Па, ово је само најгори сценарио, сваки пут се извози са 0% ЈПЕГ квалитета. За поређење, ево 50% квалитетног ЈПЕГ-а, који се готово не може разликовати од изворне ПНГ слике осим ако га не разнесете и погледате изблиза.
ПНГ за ову слику је величине 200 КБ, али овај ЈПЕГ од 50% квалитета је само 28 КБ.
Како штеди толико простора? Па, ЈПЕГ алгоритам је подвиг инжењеринга. Већина слика складишти листу бројева, при чему сваки број представља један пиксел.
ЈПЕГ не ради ништа од овога. Уместо тога, она складишти слике користећи нешто што се назива Дисцрете Цосине Трансформ, што је скуп синусних таласа који се сабирају у различитим интензитетима. Користи 64 различите једнаџбе, али већина њих се не користи. То је оно што квалитетни клизач за ЈПЕГ у Пхотосхопу и другим апликацијама за слике ради - изабере колико једнаџби треба користити. Апликације затим користе Хуффман кодирање да би још више смањиле величину датотеке.
Ово даје ЈПЕГ-овима невероватно висок степен компресије, што може смањити датотеку која ће бити вишеструких мегабајта до неколико килобајта, у зависности од квалитета. Наравно, ако га користите превише, завршите са овим:
Та слика је ужасна. Међутим, мале количине ЈПЕГ компресије могу имати значајан утицај на величину датотеке, а то чини ЈПЕГ врло корисним за компресију слика на веб-локацијама. Већина слика које видите на мрежи се компримују да бисте уштедели на времену преузимања, посебно за мобилне кориснике са слабим везама за пренос података. У ствари, све слике на Хов-То Геек-у су компресоване да би учитавање страница било брже, а вероватно никада нисте приметили.
Видео Цомпрессион
Видео ради мало другачије од слика. Помислили бисте да би они само компримовали сваки кадар видео записа користећи ЈПЕГ, и сигурно би то урадили, али постоји боља метода за видео.
Користимо нешто што се назива “интерфраме компресија”, која израчунава промене између сваког оквира и чува их само. Тако, на пример, ако имате релативно мали снимак који траје неколико секунди у видео запису, пуно простора се чува зато што алгоритам компресије не мора да складишти све ствари у сцени које се не мењају. Интерфраме компресија је главни разлог што уопште имамо дигитални ТВ и веб видео. Без тога, видео снимци би били стотине гигабајта, што је више од просечне величине чврстог диска 2005. године када је ИоуТубе покренут.
Такође, пошто је интерфраме компресија најбоља са углавном стационарним видеом, то је разлог зашто конфети уништавају видео квалитет.
Напомена: ГИФ то не ради, због чега су анимирани ГИФ-ови често врло кратки и мали, али и даље имају прилично велику величину датотеке.
Још једна ствар коју треба имати на уму када је у питању видео је њен битрате - количина података дозвољена у свакој секунди. Ако је ваш битрате 200 кб / с, на пример, ваш видео ће изгледати прилично лоше. Квалитета расте како се битрате повећава, али након неколико мегабајта у секунди добијате све мањи принос.
Ово је зумирани кадар снимљен са видеа медузе. Она на левој страни је 3Мб / с, а она са десне стране је 100Мб / с.
Повећање величине датотеке од 30к, али не и повећање квалитета. Уопштено говорећи, ИоуТубе видео снимци се крећу око 2-10Мб / с, зависно од ваше везе, јер ништа више не би било приметно.
Овај демо ради боље са стварним видеозаписом, тако да ако желите да га сами проверите, можете да преузмете исте тестове за битрате који се користе овде.
Аудио Цомпрессион
Компресија звука ради веома слично као код компресије текста и слика. Тамо где ЈПЕГ уклања детаље са слике коју нећете видети, аудио компресија чини исто за звукове. Можда нећете морати да чујете шкрипу гитаре на жици ако је гитара много, много гласнија.
МП3 такође користи битрате, од ниског краја од 48 и 96 кбпс (доњи крај) до 128 и 240кбпс (прилично добар) до 320кбпс (хигх-енд аудио), и вероватно ћете само чути разлику са изузетно добрим слушалицама ( и уши).
Ту су и кодеци за компресију без губитака за аудио - главни је ФЛАЦ-који користи ЛЗ77 кодирање да испоручи потпуно аудио без губитака. Неки људи се куну савршеним квалитетом звука ФЛАЦ-а, али са преваленцијом МП3, чини се да већина људи не зна или не смета разлици.