Словник

Що таке піксельний формат?

Піксельний формат визначає, як відео або зображення розміщує колірні дані кожного пікселя. Дізнайтеся, що означають значення на кшталт yuv420p для вашого файлу.

pixel-format

Формат пікселя визначає розташування кожного пікселя в сирих даних зображення для зображення або відео. Він повідомляє програмі, які колірні компоненти має зображення і скільки бітів вони використовують.

У звітах про відео це поле часто позначається як pix_fmt зі значенням на кшталт yuv420p. Таке значення показує колірну модель, субдискретизацію хромінанси і глибину кольору. Колірний простір зберігається в окремому полі.

Які файли містять його

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

Значення повідомляють і зображення. FFmpeg задає yuvj420p для JPEG із субдискретизацією 4:2:0 та rgb24 для 8-бітного RGB PNG.

Аудіофайл із обкладинкою також може містити формат пікселя. 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: planar (планарний). Кожен компонент має окрему площину. У packed-форматі компоненти зберігаються разом в одному масиві.
  • 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 для завантажень.

Мета ключі