Как работи компресирането на файлове?

Съдържание:

Как работи компресирането на файлове?
Как работи компресирането на файлове?

Видео: Как работи компресирането на файлове?

Видео: Как работи компресирането на файлове?
Видео: Exploring Chicago's Most Elegant Abandoned Bank - YouTube 2024, Април
Anonim
Софтуерните инженери винаги са разработили нови начини за монтиране на много данни в малко пространство. Това беше вярно, когато нашите твърди дискове бяха малки и появата на интернет току-що го направи по-критична. Компресирането на файлове играе огромна роля при свързването с нас, което ни позволява да изпращаме по-малко данни надолу по линията, така че да можем да получаваме по-бързи файлове за изтегляне и да приспособим повече връзки към натоварените мрежи.
Софтуерните инженери винаги са разработили нови начини за монтиране на много данни в малко пространство. Това беше вярно, когато нашите твърди дискове бяха малки и появата на интернет току-що го направи по-критична. Компресирането на файлове играе огромна роля при свързването с нас, което ни позволява да изпращаме по-малко данни надолу по линията, така че да можем да получаваме по-бързи файлове за изтегляне и да приспособим повече връзки към натоварените мрежи.

Как действа това?

За да отговорите на този въпрос, бихте могли да обясните някои много сложни математически задачи, със сигурност повече, отколкото можем да покрием в тази статия, но не е нужно да разбирате точно как работи математически, за да разбере основните неща.

Най-популярните библиотеки за компресиране на текст разчитат на два алгоритми за компресиране, като използват едновременно и двете, за да постигнат много високи съотношения на компресия. Тези два алгоритъма са "LZ77" и "Huffman кодиране". Кодирането на Huffman е доста сложно и няма да се вмъкваме в подробности за това тук. Първоначално той използва някои фантастични математически задачи, които дават по-кратък срокдвоични кодове към отделни букви, свиване на размерите на файловете в процеса. Ако искате да научите повече за това, разгледайте тази статия относно начина, по който работи този код или този обяснител от Computerphile.

LZ77, от друга страна, е относително проста и за какво ще говорим тук. Тя се стреми да премахне дублиращите се думи и да ги замени с по-малък "ключ", който представлява думата.

Запишете този кратък текст например:

Алгоритъмът LZ77 ще разгледа този текст, ще осъзнае, че той повтаря три пъти "howtogeek" и го променя:
Алгоритъмът LZ77 ще разгледа този текст, ще осъзнае, че той повтаря три пъти "howtogeek" и го променя:
Тогава, когато иска да прочете текста обратно, ще замести всеки случай на (h) с "howtogeek", връщайки ни обратно към първоначалната фраза.
Тогава, когато иска да прочете текста обратно, ще замести всеки случай на (h) с "howtogeek", връщайки ни обратно към първоначалната фраза.

Ние наричаме компресия като тази "без загуби" - данните, които въвеждате, са същите като данните, които излизате. Нищо не се губи.

В действителност, LZ77 не използва списък с клавиши, а замества второто и третото събитие с обратна връзка в паметта:

Така че сега, когато стигне до (з), ще погледне обратно на "howtogeek" и ще прочете това вместо това.
Така че сега, когато стигне до (з), ще погледне обратно на "howtogeek" и ще прочете това вместо това.

Ако се интересувате от по-подробно обяснение, това видео от Computerphile е доста полезно.

Сега това е идеализиран пример. В действителност, повечето текстове се компресират с клавиши, които са само няколко знака. Например, думата "на" би била компресирана дори когато се появява с думи като "там", "тях" и "след това". С повтарящ се текст можете да получите някои луди съотношения на компресия. Вземете този текстов файл с думата "howtogeek", който се повтаря 100 пъти. Оригиналният текстов файл има размер от три килобайта. Когато се компресира, тя отнема само 158 байта. Това е почти 95% компресия.

Очевидно е, че това е доста екстремен пример, тъй като току-що сме повтаряли отново същата дума. В практиката, вероятно ще получите около 30-40% компресия, като използвате компресиран формат като ZIP на файл, който е предимно текст.
Очевидно е, че това е доста екстремен пример, тъй като току-що сме повтаряли отново същата дума. В практиката, вероятно ще получите около 30-40% компресия, като използвате компресиран формат като ZIP на файл, който е предимно текст.

Този алгоритъм на LZ77 се отнася за всички двоични данни, между другото, а не само за текста, макар че текстът обикновено е по-лесен за компресиране поради колко многократни думи използват повечето езици. Език като китайски може да бъде малко по-трудно да се компресира от английски, например.

Как се работи с компресията на изображения и видеоклипове?

Видео и аудио компресиране работи много различно. За разлика от текста, където можете да имате компресия без загуби и няма загуба на данни, с изображения имаме това, което се нарича "загуба на компресия", където губите някои данни. И колкото повече компресирате, толкова повече данни губите.
Видео и аудио компресиране работи много различно. За разлика от текста, където можете да имате компресия без загуби и няма загуба на данни, с изображения имаме това, което се нарича "загуба на компресия", където губите някои данни. И колкото повече компресирате, толкова повече данни губите.

Това води до онези ужасни изглеждащи JPEG, които хората са качили, споделят и са заснети на екрана няколко пъти. Всеки път, когато изображението се компресира, то губи известни данни.

Ето един пример. Това е екранна снимка, която взех, която изобщо не е компресирана.

После взех екранната снимка и я пуснах няколко пъти в Photoshop, като всеки път я експортирах като нискокачествено JPEG. Ето резултата.
После взех екранната снимка и я пуснах няколко пъти в Photoshop, като всеки път я експортирах като нискокачествено JPEG. Ето резултата.
Изглежда доста зле, нали?
Изглежда доста зле, нали?

Е, това е само най-лошият сценарий, който експортира при 0% JPEG качество всеки път. За сравнение, тук е 50% качество на JPEG, което е почти неразличимо от изображението PNG на изход, освен ако не го взривите и погледнете отблизо.

PNG за това изображение е с размер 200 KB, но този JPEG с 50% качество е само 28 KB.
PNG за това изображение е с размер 200 KB, но този JPEG с 50% качество е само 28 KB.

И така, как спестява толкова много пространство? Ами, алгоритъмът JPEG е подвиг на инженерството. Повечето изображения съхраняват списък с номера, като всеки номер представлява един пиксел.

JPEG не прави нищо от това. Вместо това, той съхранява изображения, използвайки нещо, наречено дискретно косинус трансформация, което е колекция от синусоидални вълни, прибавени заедно при различни интензитети. Той използва 64 различни уравнения, но повечето от тях не се използват. Това е, което прави плъзгачът за качество за JPEG във Photoshop и други приложения за изображения - изберете колко уравнения да използвате. Приложенията след това използват Huffman кодиране, за да намалят размера на файла още повече.

Това дава на JPEGs невероятно високо съотношение на компресия, което може да намали файла, който ще бъде няколко мегабайта до няколко килобайта, в зависимост от качеството. Разбира се, ако го използвате прекалено много, вие завършвате с това:

Това изображение е ужасно.Но малките суми на JPEG компресията могат да имат значително влияние върху размера на файла и това прави JPEG много полезен за компресиране на изображения на уеб сайтове. Повечето снимки, които виждате онлайн, са компресирани, за да се спести време за изтегляне, особено за мобилни потребители с лоши връзки за данни. Всъщност всички изображения на "Как да" Geek са били компресирани, за да се зарежда страницата по-бързо и вероятно не сте забелязали.
Това изображение е ужасно.Но малките суми на JPEG компресията могат да имат значително влияние върху размера на файла и това прави JPEG много полезен за компресиране на изображения на уеб сайтове. Повечето снимки, които виждате онлайн, са компресирани, за да се спести време за изтегляне, особено за мобилни потребители с лоши връзки за данни. Всъщност всички изображения на "Как да" Geek са били компресирани, за да се зарежда страницата по-бързо и вероятно не сте забелязали.

Видео компресия

Видеото работи малко по-различно от изображенията. Вие бихте помислили, че те просто ще компресират всеки кадър на видео, използвайки JPEG, и те със сигурност правят това, но има по-добър метод за видео.
Видеото работи малко по-различно от изображенията. Вие бихте помислили, че те просто ще компресират всеки кадър на видео, използвайки JPEG, и те със сигурност правят това, но има по-добър метод за видео.

Използваме нещо наречено "компресия между кадрите", което изчислява промените между всеки кадър и ги съхранява само. Така например, ако имате сравнително неподвижен изстрел, който отнема няколко секунди във видеоклип, много пространство се запазва, защото алгоритъмът за компресиране няма нужда да съхранява всички неща в сцената, която не се променя. Компресията между кадрите е основната причина, поради която имаме цифрова телевизия и уеб видео изобщо. Без него видеоклиповете ще бъдат стотици гигабайта, което е повече от средния размер на твърдия диск през 2005 г., когато YouTube стартира.

Също така, тъй като компресията между кадрите работи най-добре с по-голямата част от стационарното видео, затова confetti разваля качеството на видеото.

Забележка: GIF не прави това, поради което анимираните GIF често са много къси и малки, но все пак имат доста голям размер на файла.

Друго нещо, което трябва да имате предвид за видеоклипа, е скоростта му - количеството данни, което се разрешава във всяка секунда. Ако скоростта ви е 200 kb / s, вашият видеоклип ще изглежда доста зле. Качеството се увеличава с увеличаването на битрейт, но след няколко мегабайта в секунда се намалява възвръщаемостта.

Това е увеличена рамка, взета от видео на медуза. Едната вляво е на 3Mb / s, а тази отдясно е 100Mb / s.

Image
Image

30 пъти увеличение на размера на файла, но не и много повишаване на качеството. Обикновено видеоклиповете в YouTube се движат около 2-10Mb / s в зависимост от връзката ви, тъй като нищо повече не може да бъде забелязано.

Тази демонстрация работи по-добре с актуалния видеоклип, така че ако искате да го проверите сами, можете да изтеглите същите видеоклипове за тестови данни, използвани тук.

Аудио компресия

Аудио компресирането работи много подобно на компресирането на текст и изображения. Когато JPEG премахва детайлите от изображение, което няма да видите, аудио компресията прави същото за звуците. Може да не се налага да чувате скърцането на китарата, ако реалната китара е много, много по-силна.
Аудио компресирането работи много подобно на компресирането на текст и изображения. Когато JPEG премахва детайлите от изображение, което няма да видите, аудио компресията прави същото за звуците. Може да не се налага да чувате скърцането на китарата, ако реалната китара е много, много по-силна.

MP3 също използва скорост от 48 до 96 kbps (нисък клас) до 128 и 240 kbps (доста добра) до 320 kbps (аудио от висок клас) и най-вероятно ще чуете разликата само с изключително добри слушалки и ушите).

Съществуват и безжични кодеци за компресия за аудио, като основният е FLAC, който използва кодиране LZ77, за да достави изцяло без загуба звук. Някои хора се кълнат в отличното качество на звука на FLAC, но с разпространението на MP3, изглежда, че повечето хора или не могат да кажат, или нямат нищо против.

Препоръчано: