Сжатие без потерь и с потерями

Сжатое видео, сжатое без потерь и несжатое видео — в чём между ними разница?

Сжатие данных — это огромная, но невидимая обычному пользователю сила в современном мире. На самом деле, без сжатия весь современный, цифровой мир просто невозможен. Смотрите ли вы обычный сайт, смотрите ли вы картинки на экране своего телефона или компьютера, смотрите ли вы видео, везде используется сжатие.

Сжимаются все типы данных: аудио, видео, текстовые файлы, изображения — что угодно.

Сжатие, это просто процесс уменьшения объема данных. Например, обычный текстовый файл, в сжатом виде может занимать в десять раз меньший объём. Но теперь, прежде чем прочитать такой файл, потребуется его распаковать.

С видео примерно то же самое. Берётся поток видео, и каждый отдельный кадр сжимается. В результате, каждая минута видео будет занимать меньший объем памяти.

Таким образом, чтобы показать картинку на экране телевизора, к нему не только нужно подать нужную информацию, но и на ходу распаковать её. Это было, да и продолжает быть важным фактором в повышении качества видео: телевизору нужна не только отличная матрица, но и отличный процессор.

Получение исходного видео

Итак, в простейшем случае картинка через оптику попадает на матрицу. По сути матрица, это просто огромное количество измерительных приборов. Единственная задача каждого из этих приборов, это превратить этот свет в электроэнергию. Это такой миниатюрный фотоэлемент, только ну ооочень маленький.

Фотоэлемент

Датчик и блок логики определяют, свет какой интенсивности и даёт ему значение. Например, максимальная яркость, которую выдерживает датчик, будет иметь значение в 240 единиц. А абсолютно чёрный цвет — 0 единиц. По сути, это просто показывает, сколько единиц содержится между самым светлым цветом, и самым темным цветом.

Так мы получим чёрно-белую картинку. Чтобы получить цветную картинку, то просто используется сразу три датчика: красный, зеленый, синий. Сочетая эти три цвета мы можем получить любой цвет. Например, если вы возьмете акварельные краски и смешаете синий и желтый цвет, то вы получите зеленый цвет. При показе на экране это работает чуть по другому, но принцип тот-же: сочетая три основных цвета, мы получаем любой другой цвет.

Шкала цвета

Отсюда и идёт формат RGB: red, green, blue.

Кодирование видео

Окей, но сколько нужно информации, чтобы показать один цвет? Давайте посмотрим на скриншот ниже.

Определение цвета по модели RGB

Здесь я заблурил ненужные в данный момент данные. И мы видим, что для получения полной информации о цвете, нам нужно показать, сколько у нас красного (92 единицы), зеленного (205 единиц) и синего (205 единиц). То есть у нас три числа: 92, 205, 205. Но это в «человеческом» формате. Но компьютеры этот формат не понимают, им нужны только единички и нолики. На большее они просто не способны.

Смотрите также:  Эффект Кулешова - что это такое и как его применять?

Если мы переведем эти числа в понятный компьютеру формат, то получим следующие числа: 01011100 11001101 11001101. Здесь мы видим сразу 24 числа. Это и есть объем той памяти, которая необходим, чтобы разместить в ней один пиксель. Но на самом деле, если говорить про стандарт 4K, то потребуется ещё 8 двоичных чисел. Не знаю, куда уж они там используются, но не будет погружаться слишком в дебри. Итак, чтобы получить информацию одной точки одного кадра, нам нужно 32 бита. Теперь пойдем дальше.

Несжатое видео

Если всё вроде просто, так зачем вообще весь этот огород городить? Всё это сжатие, видеокодеки, видеоформаты и прочие непонятные слова.

Давайте возьмем современны диск компьютера. Например, в 1 терабайт. Сколько в него вообще влезет кадров в современном формате 4K?

Вначале разберем разницу в байтах и в битах. Если вы не из сферы IT, то в этих понятиях люди часто путаются.

1 бит, это нолик или единичка. Выше мы видели, чтобы получить информацию про один цвет, нужно использовать 8 битов. В общем, люди подумали, и решили 8 бит назвать другой единицей — байтом. На самом деле, байты используются не только в моделях цвета, но и во многих других. Но сейчас речь именно про цвет.

Итак, у нас есть диск компьютера емкостью в 1 терабайт. Это примерно, но не точно, одна тысяча миллиардов байт. Огромное число! И этот же диск, если в битах, будет объемом в 8 тысяч миллиардов бит!!! Ну вообще, вообще))

Но увы, даже огромные числа, если к ним присмотреться внимательнее, совсем не такие большие.

Давайте возьмем современный стандарт в 4K. Этот стандарт имеет разрешение 3,840×2,160. Это даёт нам 8294400 (восемь миллионов) пикселей. А для представления каждого пикселя, напомню, нам нужно 32 бита. Итого, для показа одного кадра, нам нужно 8294499х8 и получим 66355200 (шестьдесят шесть миллионов) бит!

Теперь возьмем наименьшую частоту кадров, которую нам позволяет использовать стандарт — 24 кадра в секунду. Итого, если мы умножим 24 на 66 миллионов, то получим уже 1.592.524.800 бит. Полтора миллиарда бит. Это одна секунда. У нас диск на 8 тысяч миллиардов бит. И если мы теперь разделим это число на объем каждой секунды, то получим 5 тысяч секунд. Примерно, полтора часа видео.

Смотрите также:  Что такое слайд шоу

Сколько секунд несжатого видео вместиться на один диск

Маловато для большого диска? Это ещё слабо сказано. А ведь это не только хранить нужно, но и как-то ещё и передавать. Не буду приводить подробные расчеты, но на скорости 100 мбит, передача такого файла займет примерно 22 часа. И это при 100 мбит, что весьма неплохая скорость.

Так что же может предложить сжатие вместо этого?

Как работает сжатие

Прежде всего, есть два вида сжатия, с потерями, и без потерь.

С потерями

В начале 90-х появились первые воплощения сжатых данных. Возможно, самым известным из этих ранних форматов был MPEG-1 Audio Layer 1, выпущенный в 1993 году. Этот кодек привёл к разработке знаменитого аудиокодека MP3.

MP3, наряду с другими своими ранними аналогами, были первыми форматами файлов с потерями. По мере того, как эти форматы набирали обороты, индустрия придумала для них новый термин: «Кодек» — сокращение от Compressor/De-Compressor или Coder/Decoder.

Как это работает?

Кодеки с потерями выбрасывают значительное количество информации, содержащейся в исходном файле или входном потоке данных. Например, в примере выше мы использовали 8 бит для хранения каждой единицы информации. В этом случае, наша шкала разбивается на 256 значений. Но что если мы возьмем 7 бит, а не 8 бит? Тогда наш пиксель малость «похудеет», но при этом, наша шкала будет разбиваться уже на 128 значений. Вроде это тоже неплохо, но на практике это означает обеднение и объединение цветов. Небо уже не покажется столь детализированным, особенно, облака.

На самом деле, приёмов много, существует огромное количество различных способов избавиться от «лишнего» веса.

Кодеки с потерями значительно уменьшают размер файла по сравнению с несжатыми наборами данных. Лучшие из них разработаны с учетом ограничений человеческого восприятия. Например, у нашего глаза чувствительность по краям видимого диапазона меньше, и если там объединить несколько цветов, то сжатие будет незаметным.

Skatebiker, vector by Adam Rędzikowski, CC BY-SA 3.0, via Wikimedia Commons

Это означает, что хорошо спроектированный кодек с потерями может удалить большое количество общей информации, содержащейся в нем, прежде чем кто-либо сможет это заметить.

Но при этом, кодеки с потерями являются наихудшим из возможных форматов для архивных целей, ведь при этом значительный объем первоначальной информации пропадает. Что в некоторых случаях может быть критичным.

Смотрите также:  Что такое битрейт видео и почему его важно знать

Теперь давайте войдём в 21 век.

Сжатие без потерь

Первым кодеком без потерь был «Fully Lossless Audio Codec» или FLAC, он был выпущен в 2000 году.

Это был вход в новую эпоху. Хороший кодек без потерь обеспечивает хорошую степень сжатия, но без потерь исходных данных.

Как это работает? Давайте возьмем очень грубую аналогию, которая тем не менее, покажет базовый принцип сжатия без потерь. Предположим, у нас есть информация по одному пикселю в 3х кадрах. И при этом, в каждом из них поменялась информация по двум цветам, а один цвет остался полностью неизменным. Вот что мы получим.

Изменение цвета в трех разных пикселях

Цвет поменялся, хотя скорее всего вы этого не увидите, но посмотрите на цифры. Если бы мы использовали сжатие с потерями, то могли бы просто взять средний пиксель и умножить его на 3. Так и работают многие кодеки с сжатием.

Но кодеки без сжатия работают сложнее. У нас есть три набора цифр:

Десятичные значения в трех пикселях

Красный и зеленый нам по любому придется отдельно копировать. Но если взять синий, то мы можем просто цифру 92 умножить на 3! Вот как эти цифры будут выглядеть в битах.

Сжатые значения пикселя в двоичной системе

Мы видим, что в третьем ряду, где у нас цвет не изменился, мы сократили количество использованных цифр. И если в первом случае, для несжатого видео нам потребовалось 72 бита, то в сжатом формате мы использовали 60 бит. Это без потерь сжатия!

Конечно, на самом деле всё нааамного сложнее. Но это базовый принцип, который показывает, как можно сжать видео без потерь. Что касается настоящей документации, то она занимает многие сотни страниц и базируется на высшей математике.

Полная техническая документация на HEVC

Основным недостатком сжатия без потерь является необходимость в более мощных процессорах, поскольку при таком кодировании используются сложные математические алгоритмы.

Каждый из способов сжатия имеет свои особенности, одни сильнее сжимают, другие сжимают меньше, но зато не портят картинку, третьи требуют меньше вычислительных ресурсов, четвертые лучшую защиту от потерь (при передаче через интернет) и так далее.

С ростом общей производительности процессоров и со стремительным прогрессом в математике, вероятно, в ближайшие десятилетия мы получим ещё более мощные кодеки, которые будут ещё лучше сжимать видео без существенных потерь.

Поделиться:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх