Вопрос или проблема
У меня есть последовательность изображений 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
Вот кадр после использования команды ffmpeg. Если воспользоваться инструментом для выбора цвета, можно заметить, что значения RGB изменились.
Я собираюсь “переработать” мой следующий ответ:
Я рекомендую вам конвертировать видео в 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
Объяснение:
-
Фильтр Scale: Используется для преобразования изображения в цветовое пространство BT.709. Параметр
out_color_matrix=bt709
преобразует цвета, аout_range=tv
задает ограниченный диапазон для уменьшения искажений в диапазоне. -
Фильтр Bitstream (bsf): Параметры
h264_metadata
настраивают метаданные видео, указывая на использование BT.709 как цветового пространства с ограниченным динамическим диапазоном (video_full_range_flag=0). -
Функция гаммы и цветовые характеристики: Указывается цветовая передача (transfer_characteristics=1), чтобы правильно трактовать гамму BT.709, что также сохранит близкие к оригиналу sRGB значения.
Проведя эти изменения, можно значительно повысить вероятность того, что итоговое видео будет максимально точно передавать цвета исходных sRGB изображений.