Я пытаюсь преобразовать несжатый 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, либо приводят меня к тому этапу, на котором я уже нахожусь.