Формат пикселей описывает расположение каждого пикселя в необработанных данных изображения или видео. Он сообщает программе, какие цветовые компоненты есть у изображения и сколько бит они используют.
В отчётах по видео это поле часто обозначается как 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, но с полным диапазоном, который использует JPEGrgb24: 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 для загрузок.