в

Откуда появляются артефакты на видео

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

У градиентов появляются противные полоски с градацией цветов. А частицы заметно ухудшают качество видео. Если вы выкладывали в инстаграм падающий снег, то представляете о чём я говорю.

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

Откуда появляются артефакты на тёмном фоне:

Если вкратце. У тёмных градиентов не хватает оттенков, чтобы сделать плавный переход между цветами.

В обычном 8-битном диапазоне у зелёного цвета 256 оттенков. Убираем все яркие оттенки, и, для тёмно-зелёного градиента, остаётся около шестидесяти. Растягиваем 60 оттенков на 1920 пикселей и видим лесенку, где каждый оттенок занимает огроменную полоску в 32 пикселя. Конечно, такое будет заметно.

Но мало того, что цветов не хватает, так ещё и при рендере мы сжимаем видео, что делает артефакты заметнее.

Самый простой способ скрыть эти полоски — накинуть сверху шум. Шум чуть-чуть размоет границы и таким образом уменьшит бэндинг. Но если это не поможет, то в настройках композиции можно повысить битность до 16, чтобы у зелёного цвета было не 256 оттенков, а 65 536.

Почему конфетти и снег портят качество видео:

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

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

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

Похоже, что лёгкого способа это побороть нет. Единственное, что помогает — повышенный битрейт.

И ещё на тему сжатия:

Как устроено сжатие с потерями

Как устроено сжатие с потерями

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

Часто сжатия без потерь недостаточно. Сегодня поговорим о сжатии с потерями.

Чем отличается от сжатия без потерь

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

Можно представить, что мы говорим с человеком по телефону. Его голос немного искажён, может прерываться или немного сбоить. Но если мы смогли понять собеседника, то нам достаточно такого качества. При этом мы можем не расслышать какие-то нюансы, не ощутить всю глубину баса или не оценить все оттенки интонаций, но это нам и неважно. Разговор по телефону — это пример передачи информации с использованием сжатия с потерями.

Сжатие фотографий

Есть алгоритм сжатия для фотографий, который используют для изображений типа JPEG. В этом алгоритме изображение разделяется на один слой яркости и два слоя цвета (если упрощённо, то картинка разделяется, на чёрно-белый слой и на слой с красками).

Barns grand tetons YCbCr separation scaled

Эти слои нарезаются на квадраты 8 × 8 пикселей и кодируются с помощью особой математики. Её смысл в том, чтобы понять: есть ли в этом квадрате 8 × 8 что-то важное. Если оно есть, то оно кодируется и данные сохраняются. Если квадрат более-менее однородный, то он записывается как однородный, данных мало.

Экономия данных происходит как раз за счёт этой математики: например, если в квадрат 8 × 8 попал кусочек ясного неба, то там достаточно сказать «весь кусок такого-то синего цвета», и тогда нужно хранить немножко данных. А если на квадрат пришёлся какой-то угол или деталь, то данных нужно сохранить больше.

А если у вас картинка нарезана отдельно на яркость и отдельно на цвет, вы экономите ещё больше данных: в слое с яркостью у вас будут все контрастные детали, а в цветовых слоях — плавные цветовые переливы. Плавные переливы легче закодировать, это будет незаметно для глаза.

Сжатие JPEG идеально подходит для фотографий, где размер деталей намного больше, чем размер пикселей.

Возьмём странное изображение винограда на ржавой трубе. Найдите различия между двумя картинками:

image2 1
Слева — оригинал, справа изображение сжато в 20 раз. Визуально разницу заметить трудно.

Теперь сожмём оригинал в 415 раз: было 10 мегабайт, стало 24 килобайта. При этом мы всё равно понимаем, что на фотографии — виноград с плодами на ржавой трубе. Наш мозг сглаживает эти неровности и узнаёт картинку.

image1 1
Справа уже видны пиксели и размытость — это побочные явления сильного сжатия.

Хуже всего JPEG подходит для сжатия изображений, в которых есть мелкие детали, острые края и резкие контрасты. Особенно — если изображения мелкие. Тогда алгоритмы JPEG создают слишком много артефактов. Дизайнеры говорят, что картинку зашакалило (от слова «шакал»):

685px Asterisk with jpg artefacts

Сжатие звука

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

Например, человеческое ухо в среднем воспринимает звуки частотой от 20 герц до 20 килогерц. 20 Гц — это супергрудной бас, а 20 КГц — это супертонкий писк. Чтобы закодировать волну с максимальной частотой 20 КГц, на каждую секунду вам нужно 40 тысяч чисел размером 2 байта. Получается, что секунда несжатого звука будет занимать 80 килобайт.

Но содержательная часть человеческого голоса (та, в которой зашита вся информация) заканчивается на 4000 герцах. Если отрезать у голоса всё, что выше 4000 герц, вы запросто различите смысл слов и поймёте интонацию. Пропадёт лишь некоторая «воздушность» звука. Если нет цели сделать суперкрутой звук, то алгоритмам нет смысла кодировать диапазон 4—20 КГц.

Тогда из звука отсекается лишняя информация и кодируется только диапазон до 4 КГц. Для этого кодирования достаточно 16 килобайт в секунду. Это уже экономия в 5 раз!

Самая важная часть голоса вообще болтается в районе 1000–2000 герц. Если отрезать у голоса всё от 2 до 20 КГц, то нам хватит 8 КБ в секунду, а это экономия в 10 раз по сравнению с несжатым файлом.

Сравните три варианта аудио: сначала несжатый вариант, потом сжатый в 6 раз, наконец — в 160 раз:

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

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

Сжатие видео

Чтобы сжать видео, используют комбинацию сжатия картинок и звука. И есть один дополнительный момент: сжатие только изменяющихся частей кадра. Как это работает:

  1. В одной секунде видео 25 кадров
  2. Если за секунду в кадре ничего особо не произошло, то это будут 25 примерно одинаковых картинок
  3. Алгоритму нет смысла кодировать каждую картинку с нуля. Он возьмёт одну картинку как отправную точку, во всех следующих закодирует только изменения по сравнению с предыдущим кадром
  4. В зависимости от того, насколько мы хотим качественную картинку на выходе, мы можем задавать степень чувствительности алгоритма: от «кодируй, только если в кадр залетит ракета» до «реагируй на мельчайшие изменения в кадре». Чем более чуткий кодировщик, тем больше весит файл.

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

Стримы и потоковое видео

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

Размеры кадров в таких видео часто измеряются в «строках» — это те самые числа возле буквы p:

  • 144p — кадр состоит из 144 строк, то есть его высота — 144 пикселя
  • 480p — кадр высотой 480 пикселей
  • 1080p — кадр высотой 1080 пикселей

Соответственно, чем выше кадр, тем он шире; тем больше размер изображения; тем больше деталей в него влезает.

image4
image3 1

И что нам с этим делать

Да ничего особо. Радоваться, что в наше время можно смотреть потоковое видео в прямом эфире с телефона в разрешении 1080p через сотовую вышку, пользуясь роскошным сжатием и широкополосным доступом в интернет.

Автор: motion_pasta

qoWbgXRS preview

Кисти – Christmas Doodle Garland

5 kljuchevyh tendencii uxui dizaina na 2022 god

5 ключевых тенденций UX/UI дизайна на 2022 год