Словарь

Что такое формат пикселей?

Формат пикселей - это способ, которым видео или изображение задает цветовые данные каждого пикселя. Узнайте, что значат значения вроде yuv420p для вашего файла.

pixel-format

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

В отчётах по видео это поле часто обозначается как pix_fmt со значением вроде yuv420p. Такое значение показывает цветовую модель, субдискретизацию цветности и глубину цвета. Цветовое пространство указывается в отдельном поле.

Какие файлы его содержат

Программа ffprobe из FFmpeg выводит pix_fmt для каждого видеопотока. Это относится к файлам MP4, MOV, MKV и WebM.

Изображения тоже сообщают это значение. FFmpeg присваивает yuvj420p JPEG с дискретизацией 4:2:0 и rgb24 PNG в RGB с глубиной 8 бит.

Аудиофайл с обложкой тоже может содержать формат пикселей. FFmpeg рассматривает эту картинку как видеопоток.

ExifTool считывает тег PixelFormat из файлов Windows HD Photo (HDP и WDP). Он показывает значения вроде 24-bit RGB и 8-bit Gray.

Как выглядят значения

FFmpeg формирует свои названия из коротких частей. Значение yuv420p10le состоит из 5 частей:

  • yuv: цветовая модель. Y отвечает за яркость, а U и V несут цвет. U и V также называются Cb и Cr, как в YCbCr.
  • 420: дискретизация. Цвет имеет половину ширины и половину высоты данных яркости.
  • p: планарный. Каждый компонент хранится в отдельной плоскости. В упакованном формате компоненты располагаются вместе в одном массиве.
  • 10: число бит на компонент. Значение yuv420p не содержит числа и использует 8 бит.
  • le: порядок байтов, little-endian. Окончание be означает big-endian.

Типичные значения

Каждое число ниже показывает среднее количество бит на пиксель в необработанных данных изображения:

  • yuv420p: 12 бит, цвет с половинной шириной и половинной высотой
  • yuv422p: 16 бит, цвет с половинной шириной
  • yuv444p: 24 бита, цвет для каждого пикселя
  • yuvj420p: 12 бит, тот же формат, что yuv420p, но с полным диапазоном, который использует JPEG
  • rgb24: 24 бита, упакованные красный, зелёный и синий каналы
  • rgba: 32 бита, с дополнительным альфа-каналом для прозрачности
  • gray: 8 бит, только яркость
  • pal8: 8 бит, каждое значение ссылается на цвет из палитры

В полном диапазоне яркость 8-битного сигнала меняется от 0 до 255. В ограниченном диапазоне она меняется от 16 до 235. FFmpeg рекомендует отдельное поле диапазона вместо имён yuvj.

Откуда берется значение

Формат пикселей задаёт программа, кодирующая поток. В FFmpeg вы выбираете его с помощью параметра -pix_fmt.

Само имя обычно не хранится в файле. Программа чтения формирует его из сохранённых параметров.

Для H.264 FFmpeg использует глубину цвета и формат цветности в заголовке потока. Для PNG FFmpeg использует глубину цвета и тип цвета в заголовке изображения.

Почему это важно для вашего файла

Формат пикселей определяет размер необработанных данных изображения. Кадр rgb24 имеет 24 бита на пиксель, а кадр yuv420p - 12. Затем кодеки сжимают эти данные, поэтому эти числа не отражают итоговый размер файла.

Формат пикселей также определяет, сколько цветовых деталей сохранит файл. Человеческий глаз замечает гораздо больше деталей в яркости, чем в цвете, поэтому 4:2:0 даёт мало заметных потерь.

Если вы преобразуете 4:2:0 в 4:4:4, программа вычисляет недостающие выборки по соседним. Цветовые детали, удалённые при 4:2:0, уже потеряны.

Профиль H.264 - ещё одна причина проверить это значение. Профили Main и High поддерживают 8-битный цвет с дискретизацией 4:2:0.

Поток H.264 в yuv444p или yuv420p10le требует более высокого профиля. Правила Apple HLS требуют H.264 с профилем не выше High. YouTube рекомендует профиль High и 4:2:0 для загрузок.

Мета-ключи