Как применить соответствующее цветовое пространство и гамма-функцию к моему командному файлу ffmpeg?

Вопрос или проблема

У меня есть последовательность изображений sRGB, которую я хочу конвертировать в .mp4. При этой конвертации я хочу сохранить все значения sRGB и гамма из оригинальной последовательности изображений. Например, я хочу, чтобы мои значения красного цвета (255,0,0) в моих png-файлах сохранялись в видео. Это означает, что я хочу конвертировать, используя цветовое пространство RGB, и гамма-кодировку как sRGB для функции переноса.

В настоящее время я использую эту команду ffmpeg, которая дает мне точную гамму, но неточные значения RGB. Любая помощь была бы замечательной!

ffmpeg -r 60 -i input_%05d.png -c:v libx264 -pix_fmt yuv420p -colorspace rgb -color_trc iec61966-2-1 -y output.mp4 

Вот кадр с правильными цветами sRGB
enter image description here

Вот кадр после использования команды ffmpeg. Если воспользоваться инструментом для выбора цвета, можно заметить, что значения RGB изменились.
enter image description here

Я собираюсь “переработать” мой следующий ответ:

Я рекомендую вам конвертировать видео в BT.709 и отметить видео как BT.709:

  • Конвертируйте видео в BT.709 с использованием фильтра scale:
    scale=out_color_matrix=bt709:out_range=tv

  • Отметьте видео как BT.709 с “телевизионным диапазоном” (ограниченный диапазон) с помощью фильтра bsf:
    -bsf:v h264_metadata=video_full_range_flag=0:colour_primaries=1:transfer_characteristics=1:matrix_coefficients=1


Команда:

ffmpeg -r 60 -i input_%05d.png -vf scale=out_color_matrix=bt709:out_range=tv -c:v libx264 -pix_fmt yuv420p -bsf:v h264_metadata=video_full_range_flag=0:colour_primaries=1:transfer_characteristics=1:matrix_coefficients=1 -y output.mp4

Примечание:
В случае, если PNG-файл изображения содержит встроенный профиль ICC, приведенное выше решение может не сработать.

Ответ или решение

Теория

При конвертации изображений из последовательности PNG в видеоформат .mp4 необходимо особое внимание уделить выбору цветового пространства и функции гамма-коррекции. Это особенно актуально, если требуется сохранить оригинальные sRGB значения, такие как ( \text{Red} (255,0,0) ). Стандартный формат видео yuv420p не сохраняет точные RGB значения, так как он использует сжатие цветности и ограниченный динамический диапазон.

Цветовое пространство sRGB и соответствующая гамма-коррекция (IEC 61966-2-1) используются для представления и передачи цветовых данных в цифровых мультимедиа. При неверной настройке этих параметров возможно искажение цветов после конвертации.

Пример

В текущей команде ffmpeg, хотя и была указана sRGB гамма (iec61966-2-1), не был задан корректный способ преобразования цветового пространства из RGB в yuv420p, что может привести к неверному отображению цветов в итоговом видео.

ffmpeg -r 60 -i input_%05d.png -c:v libx264 -pix_fmt yuv420p -colorspace rgb -color_trc iec61966-2-1 -y output.mp4 

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

Применение

Чтобы корректно сохранить sRGB данные и гамму при преобразовании в формат .mp4, необходимо правильно учитывать цветовые преобразования и требования форматов видео. Использование фильтра scale для преобразования в цветовое пространство BT.709 помогает обеспечить совместимость с большинством приложений и медиа-плееров.

Правильная команда ffmpeg для этой задачи будет выглядеть так:

ffmpeg -r 60 -i input_%05d.png -vf scale=out_color_matrix=bt709:out_range=tv -c:v libx264 -pix_fmt yuv420p -bsf:v h264_metadata=video_full_range_flag=0:colour_primaries=1:transfer_characteristics=1:matrix_coefficients=1 -y output.mp4

Объяснение:

  1. Фильтр Scale: Используется для преобразования изображения в цветовое пространство BT.709. Параметр out_color_matrix=bt709 преобразует цвета, а out_range=tv задает ограниченный диапазон для уменьшения искажений в диапазоне.

  2. Фильтр Bitstream (bsf): Параметры h264_metadata настраивают метаданные видео, указывая на использование BT.709 как цветового пространства с ограниченным динамическим диапазоном (video_full_range_flag=0).

  3. Функция гаммы и цветовые характеристики: Указывается цветовая передача (transfer_characteristics=1), чтобы правильно трактовать гамму BT.709, что также сохранит близкие к оригиналу sRGB значения.

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

Оцените материал
Добавить комментарий

Капча загружается...