Выполняет ли фильтр LAV преобразование YUV в RGB?

Я хотел бы улучшить декодирование видеопотока H.264 с помощью MPC-HC, используя видеодекодер LAV. Поток, который я буду воспроизводить, всегда имеет формат yuvj444p (Planar YCbCr 4:4:4 на уровне TV [0-255]), закодированный с помощью x264.

Я использую MPC-HC версии 1.7.10 и видеодекодер LAV 0.68.1. У меня есть nVidia Quadro K5200, и я знаю, как написать шейдер GLSL для запуска преобразования YUV в RGB.

Мне интересно, может ли кто-нибудь здесь подсказать, стоит ли делать такую ​​​​работу и, возможно, с чего начать.

  • Должен ли я настраивать EVR (Enhanced Video Renderer - Custom Presenter)?

  • Должен ли я просто написать внутренний шейдер?

  • ...


person RawBean    schedule 18.07.2016    source источник
comment
Вы имеете в виду RGB конкретно или выходной формат RGBA также отвечает на ваш вопрос?   -  person Rotem    schedule 22.07.2016
comment
Вы как будто спрашиваете, стоит ли заниматься такой работой. Вы имеете в виду, стоит ли использовать шейдер вместо программного преобразования yuv-rgb? (Ответ — да.) Или что-то еще?   -  person Ronald S. Bultje    schedule 22.07.2016
comment
@RonaldS.Bultje В качестве первого шага мне было интересно, кто сделал преобразование YUV в RGB, поэтому я спросил, делает ли это LAVFilters. Это был не лучший вопрос, который я когда-либо задавал. Кстати, теперь я обнаружил, что могу настроить LAVFilters для вывода как YV24 или RGB24 в опции. Но если я выведу как YV24, EVR не сможет его отобразить. Итак, я установил madVR. Но общая производительность FPS снижается ... Так что я задам новый вопрос, я думаю.   -  person RawBean    schedule 22.07.2016
comment
Если тема вас интересует, мой следующий вопрос здесь: stackoverflow.com/questions/38529041/   -  person RawBean    schedule 22.07.2016


Ответы (2)


Да, фильтр LAV Video Decoder поддерживает преобразование цвета yuvj444p в RGB32.

Чтобы доказать это, я попробовал следующий тест:

  1. Создайте несжатый файл AVI в цветовом формате RGB (используя MATLAB).
  2. Преобразуйте файл AVI в сжатый x264 файл MKV в цветовом формате yuvj444p (используя FFMPEG).
  3. Создайте граф фильтра в Graph Studio Next с фильтром LAV Video Decoder (DirectShow).
  4. Осмотрите выходной контакт фильтра декодера.
  5. Воспроизведите график и сравните выходной кадр с исходным входным кадром.

Имя входного файла AVI: RGB_INPUT.avi
Имя файла MKV: OUTPUT.mkv
Я использовал ffmpeg со следующими параметрами (в командной строке):
ffmpeg -i RGB_INPUT.avi -pix_fmt yuvj444p -vf scale=w=0:h=0:out_color_matrix=bt709 -c:v libx264 -crf 18 -x264opts colorprim=bt709:transfer=bt709:colormatrix=bt709 -an OUTPUT.mkv
Взял пример отсюда: http://forum.doom9.org/showthread.php?p=1671195

График фильтра:
введите здесь описание изображения

Проверка выходного контакта видеодекодера LAV показывает, что формат выходного цвета — RGB32 (подтип носителя: MEDIASUBTYPE_RGB32):
введите здесь описание изображения

Сравнение несжатого входного кадра с декодированным выходным кадром:

Исходный кадр (несжатое изображение):
введите здесь описание изображения

Выходные данные средства визуализации видео (снимок экрана):
введите здесь описание изображения

Изображение абсолютной разницы (в масштабе 10):
введите здесь описание изображения

Вывод: LAV Video Decoder правильно конвертирует yuvj444 в RGB32.

person Rotem    schedule 22.07.2016
comment
Отличный ответ. Большое спасибо @Rotem. Могу я задать вам еще один дополнительный вопрос? Как вы думаете, можно ли попросить LAV Video Decoder не делать преобразование YUV -> RGB, и тогда я буду запускать его благодаря шейдеру на GPU? Я хочу уменьшить общее время рендеринга. - person RawBean; 22.07.2016

Выходной формат LAV Video Decoder настраивается:
введите здесь описание изображения

Я не знаю, можете ли вы уменьшить общее время рендеринга.

person Rotem    schedule 22.07.2016
comment
Хорошо, спасибо. На самом деле теперь, когда я открыл для себя Graph Studio Nex, я играю с ним. Если я настрою LAV Video Decoder на вывод только YUV 4:4:4, он больше не будет приниматься EVR, но будет принят MadVR. Теперь мне интересно, сможет ли MadVR выполнить преобразование YUV->RGB с шейдером GL или нет. Спасибо еще раз. - person RawBean; 22.07.2016