У меня есть приложение, которое генерирует кучу jpgs, которые мне нужно превратить в веб-видео. Я пытаюсь получить мои данные RGB из JPEG в образце vpxenc. Я могу видеть основные формы из исходных jpgs в выходном видео, но все окрашено в зеленый цвет (даже пиксели, которые должны быть черными, примерно наполовину зеленые), и на каждой другой линии сканирования есть какой-то мусор.
Я пытаюсь передать им данные VPX_IMG_FMT_YV12, которые, как я предполагаю, структурированы так:
за каждый кадр
8-битные данные Y
8-битные средние значения каждого блока 2x2 В
8-битные средние значения каждого блока 2x2 U
Вот исходное изображение и скриншот выходящего видео:
Изображения
Вполне возможно, что я неправильно выполняю преобразование RGB-> YV12, но даже если я только кодирую 8-битные данные Y и устанавливаю блоки U и V в 0, видео выглядит примерно так же. Я в основном управляю своими данными RGB через это уравнение:
// (R, G, and B are 0-255)
float y = 0.299f*R + 0.587f*G + 0.114f*B;
float v = (R-y)*0.713f;
float u = (B-v)*0.565f;
.. и затем для получения фильтрованных значений 2x2 для U и V, которые я записываю в vpxenc, я просто делаю (a + b + c + d) / 4, где a, b, c, d - это U или Значения V каждого блока пикселей 2x2.
Так что мне интересно:
Есть ли более простой способ (в коде) взять данные RGB и передать их в vpx_codec_encode для получения хорошего веб-видео?
Является ли мое преобразование RGB-> YV12 где-то неправильным?
Любая помощь будет принята с благодарностью.