Преобразование RGB в YUV422 с помощью ffmpeg, неправильные цвета

Я пытаюсь преобразовать несжатый 8-битный RGB в файл mpeg2 mxf (xdcam 422 HD 1080 50i), который является YUV422. Используя информацию из документов FFMpeg и различных веб-сайтов, я сделал следующую команду:

./ffmpeg -y -i test_lines.mov -pix_fmt yuv422p -vcodec mpeg2video -non_linear_quant 1 -flags +ildct+ilme -top 1 -dc 10 -intra_vlc 1 -qmax 2 -vtag xd5c -rc_max_vbv_use 1 -rc_min_vbv_use 1 -g 12 -b:v 50000k -minrate 50000k -maxrate 50000k -bufsize 8000k -acodec pcm_s24le -ar 48000 -bf 2 -ac 2 lines_HD.mxf

Это дало мне результат с цветами намного ярче, чем оригинал.

Итак, я попытался добавить параметры -color_range 1 -colorspace 1 -color_primaries 1 -color_trc 1, но это, похоже, ничего не дало.

После добавления colormatrix=bt601:bt709 я получил изображение намного лучше, но немного темнее, чем оригинал, и также кажется странным указывать эту опцию, потому что источник также находится в цветовом пространстве REC709, так зачем указывать его по-другому?

Затем я перегенерировал исходное изображение в кодек YUV (prores) и повторно запустил на нем FFMpeg, и цвета вышли просто отличными. Поэтому я думаю, что это должна быть проблема RGB -> YUV. У кого-нибудь есть идея, как это правильно? Я могу предоставить скриншоты различных результатов на видеоскопе, как только вернусь в офис, если кому-то интересно.

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


person user3578571    schedule 21.05.2014    source источник


Ответы (1)


Я не видел изображений, поэтому не знаю, насколько они отклоняются, но я надеюсь, вы понимаете, что переход от несжатого RGB к несжатому YUV422 необратим и с потерями. 422p подразумевает субдискретизацию компонента цветности. Также переход от несжатого к MPEG2 является дополнительным квантованием, которое приводит к потерям, даже если ваш параметр quant равен 2.

Мое предложение сначала закодировать в YUV422 y4m. Убедитесь, что вы довольны этим. Затем измените кодек вывода на mpeg2. Таким образом, ваше преобразование цвета сначала гарантируется, что оно будет точным. Затем MPEG2 добавит к этому свои собственные потери.

Старая, но актуальная ветка: https://lists.ffmpeg.org/pipermail/ffmpeg-user/2012-July/007833.html

Забыл упомянуть, что вам нужно добавить опцию colormatrix. Это верно. Вышеупомянутая ссылка должна объяснить все это, надеюсь

person av501    schedule 05.06.2014