Как устроено видео?

Начинаем цикл статей о видео, в котором наш СЕО Николай просто и понятно объясняет, что такое цифровое видео и как оно устроено.
Аналоговое и цифровое видео
Видео может быть аналоговым и цифровым.
Вся информация из реального мира вокруг нас — аналоговая. Волны в океане, звуки, облака, плывущие по небу. Это непрерывный поток данных, который не разбит на части и может быть изображён в виде волн. Люди воспринимают именно такую аналоговую информацию из окружающего мира.
Старые видеокамеры, записывавшие на магнитные кассеты, использовали аналоговый способ хранения информации. Бобинные магнитофоны и кассеты работали по тому же принципу: магнитная лента проходила через магнитные головки устройства, что позволяло воспроизводить звук и видео. Виниловые пластинки — тоже аналоговые носители.
Воспроизводились такие записи строго в том порядке, в котором они были записаны. Дальнейшее редактирование стало сильно затруднено, как и передача таких записей в интернете.
С повсеместным распространением компьютеров практически всё видео хранится в цифровом формате — в виде нулей и единиц. Когда вы снимаете видео на телефон, оно преобразуется из аналогового сигнала в цифровой и сохраняется в памяти устройства. При воспроизведении происходит обратное преобразование — из цифрового сигнала в аналоговый. Благодаря этому видео можно передавать по сети, хранить на жёстком диске, редактировать и сжимать.
Из чего состоит цифровое видео
Видео состоит из последовательности картинок или кадров, которые быстро сменяют друг друга и создают ощущение движения на экране.
Пример того, как делают видео.
Частота кадров (framerate)
Кадры на экране сменяются с определённой скоростью. Количество таких смен в секунду называют частотой кадров или фреймрейтом. Отсюда и появился знакомый геймерам термин FPS. Стандарт для телевидения — 24 кадра в секунду, а в кинотеатрах IMAX — 50 кадров в секунду.
Чем выше количество кадров в секунду, тем больше деталей видно при быстром движении объектов на видео.
Разница между 15, 30 и 60 кадрами в секунду.
Пиксель (pixel)
Все дисплеи на телевизорах, планшетах, телефонах и других устройствах состоят из маленьких светящихся элементов — пикселей. Допустим, каждый пиксель может отображать один цвет (на практике разные производители реализуют это по-разному).
Для того, чтобы отобразить изображение на дисплее, каждый пиксель на экране должен светиться определённым цветом.
Благодаря устройству экранов, в цифровом видео каждый кадр состоит из цветных точек — пикселей.

Количество таких точек по горизонтали и вертикали называют разрешением изображения. Записывают разрешение в формате 1024×768. Первая цифра — количество пикселей по горизонтали, вторая — по вертикали.
Разрешение всех кадров в видео одинаковое — это и называется разрешением видео.
Давайте рассмотрим один пиксель подробнее. На экране он выглядит как светящаяся точка определённого цвета, а в видеофайле хранится в виде цифровых данных — чисел. По этим числам устройство понимает, каким цветом должен загореться пиксель на экране.
Цветовые пространства
Существуют разные способы представления цвета точки в цифровом формате, и эти способы называются цветовыми пространствами или color spaces.
Цветовое пространство устроено так, что любой цвет можно представить точкой с определёнными координатами в этом пространстве.
К примеру, цветовое пространство RGB (Red Green Blue) — это трёхмерное пространство, в котором каждый цвет задаётся тремя координатами: одна отвечает за красный, другая — за зелёный, третья — за синий.

Любой цвет в этом пространстве задаётся комбинацией красного, зелёного и синего цветов.
Вот пример изображения, разбитого на составляющие цвета по каналам RGB:

Существует множество цветовых пространств, и они различаются количеством цветов, которые можно в них закодировать, и объёмом памяти, необходимым для хранения данных о цвете одного пикселя.
Самые популярные цветовые пространства — это RGB (используется в компьютерной графике), YCbCr (используется в видео) и CMYK (используется в полиграфии)
CMYK работает примерно так же, как RGB, только базовых цветов уже четыре: голубой, пурпурный, жёлтый и чёрный (Cyan, Magenta, Yellow, Key или Black).
RGB и CMYK пространства не очень эффективны, так как хранят избыточную информацию.
Для видео используется более эффективное цветовое пространство, учитывающее особенности человеческого зрения.
Органы зрения человека хуже различают цвета, чем яркость предметов.

В левой части изображения цвета квадратов A и B на самом деле одинаковы. Нам кажется, что они разные. Мозг заставляет нас больше обращать внимание на яркость, чем на цвет. С правой стороны между обозначенными квадратами есть перемычка того же цвета — поэтому мы (то есть наш мозг) легко понимаем, что там действительно один и тот же цвет.
Используя эту особенность зрения, можно разделить изображение на яркость и цвет. При сжатии можно убрать половину или даже четверть цветовой информации (например, оставить яркость с высоким разрешением, а цвет — с низким). Человек разницы не заметит, а объём данных сильно сократится.
О том, как именно работает сжатие цвета, поговорим в следующей статье).
Наиболее известным пространством, которое работает таким образом, является YCbCr и его варианты: YUV и YIQ.
Вот пример изображения, разложенного на составляющие в YCbCr. Где Y' — компонента яркости, а CB и CR — синие и красные цветоразностные компоненты.

Именно YCbCr используется при кодировании цветов в видео. Во-первых, это цветовое пространство позволяет эффективно сжимать цветовую информацию, а во-вторых, оно отлично подходит для чёрно-белых видео — например, с камер видеонаблюдения, — потому что данные о цвете (CB и CR) можно просто игнорировать.
Глубина цвета (Bit Depth)
Глубина цвета показывает, сколько бит памяти выделяется на один пиксель — чем больше бит, тем больше цветов можно закодировать и тем больше места занимает каждый пиксель. Чем больше цветов, тем лучше качество изображения.
Долгое время для видео стандартной глубиной цвета была 8 бит (Standard Dynamic Range или SDR видео). Сейчас всё чаще применяют 10 или 12 бит (High Dynamic Range или HDR видео).

При этом важно помнить, что в разных цветовых пространствах при одинаковом количестве бит на пиксель можно закодировать разное число цветов.
Битрейт (bitrate)
Битрейт — это количество бит, которое занимает одна секунда видео в памяти. Чтобы рассчитать битрейт несжатого видео, нужно умножить количество пикселей в кадре на глубину цвета и на частоту кадров в секунду:
1024 пикселей × 768 пикселей × 10 бит × 24 кадра в секунду = 188743680 бит в секунду
Это 23592960 байт, 23040 мегабайт или 22,5 гигабайта в секунду
Т. е. видео продолжительностью 5 минут займёт в памяти 6750 гигабайт или 6,59 терабайт.
Это подводит нас к тому, зачем нужны и почему появились способы сжатия видео. Без сжатия такие объёмы данных невозможно хранить и передавать по сети. Ролики на YouTube загружались бы очень долго.
