Как я могу сгенерировать правильный цвет h264/MP4 из последовательности DPX с помощью ffmpeg?

Мы конвертируем последовательность файлов DPX в MP4. Когда художник использует Adobe Media Encoder CC для создания видео, цвета соответствуют исходному DPX. Когда мы используем ffmpeg, видео имеет красноватый оттенок. Используемая команда:

ffmpeg -y -start_number 0101 -i \\path\to\filename.%04d.dpx -pix_fmt yuv420p sample.mp4

Как мы можем создать видео, которое соответствует цвету исходных файлов DPX?


Проверка файлов ffprobeвыявила следующие отличия (правильный файл/неправильный файл):

  • major_brand: mp42 / isom
  • минор_версия: 0/512
  • совместимые_бренды: mp42mp41 / isomiso2avc1mp41
  • энкодер: не указан / Lavf57.34.102
  • Видео: h264 (основное) / h264 (высокое)
  • Видео: yuv420p(tv,bt709) / yuv420p
  • Видео: 1920 x 1080 / 1920 x 1080 [1 : 1 : 1 6 : 9 ]
  • handler_name: Обработчик псевдонимов данных / VideoHandler

Ссылки зонда: dpx , правильный , неправильный

Ответы (2)

Я проверил yuv420p(tv, bt709)часть кодировки и обнаружил, что это относится к Rec. Цветовое пространство 709 для HDTV. В ffmpeg цветовое пространство определяется фильтром цветовой матрицы . Однако вы должны преобразовать из некоторого цветового пространства. Согласно беседе из списка рассылки ffmpeg , цветовое пространство по умолчанию считается следующим bt601:

ISTR, что если вы даете ffmpeg RGB, он предполагает весь свой диапазон, а также по умолчанию конвертирует с использованием матриц 601. Хотя в нем определено несколько цветовых пространств, доступ к которым можно получить в библиотеках с помощью API, сам ffmpeg их не использует (хотя у меня есть ноющее чувство, что это тоже может быть не совсем так).

Итак, последняя сработавшая команда ffmpeg была:

ffmpeg -y -start_number 0101 -i \\path\to\filename.%04d.dpx
-vf colormatrix=bt601:bt709 -pix_fmt yuv420p sample.mp4

Теперь цвет правильный, но заметной разницы в выводе ffprobe или MediaInfo нет. (Другими словами, цветовое пространство файла, сгенерированного ffmpeg, не отображается в выходных данных.)

Добавить -colorspace 1, чтобы пометить вывод.
@Мульвия здорово! есть ли опция "отметить все"? (я не смог найти)

Недавние исправления для ffmpeg исправили эту проблему https://github.com/FFmpeg/FFmpeg/search?q=dpx&type=commits.

Теперь он считывает диапазон, основные цвета, матрицу и передачу. Не говоря уже о тайм-коде SMPTE и альтернативной частоте кадров.

Есть еще баг, что пишет линейный перенос на все файлы.