Я пытаюсь получить мой взгляд из моего приложения (используя OpenGL) для записи в файл. Это, как я получаю OpenGL кадр:Выход видео ffmpeg ненасыщен
glBindTexture(GL_TEXTURE_2D, renderTexture->getTextureData()->glId);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
Это прекрасно работает и имеет правильные цвета. (Я проверил это, показывая пиксели в один файл изображения).
Теперь, поскольку я хочу это в видео, я использую ffmpeg для кодирования. Это моя команда:
ffmpeg -r 24 -pix_fmt rgba -s 1280x720 -f rawvideo -y -i - -vf vflip -vcodec mpeg1video -q:v 4 -bufsize 500KB -maxrate 5000KB
Это также «работает», но мое видео очень ненасыщенный по сравнению с фактическим входом он получает от OpenGL. Как я могу это решить? (если возможно, могу ли я сделать это, только изменив что-то в команде?)
Вы должны использовать glReadPixels вместо перехода через glGetTexImage. Две причины: glGetTexImage не поддерживается OpenGL-ES и glReadPixels даже работает без необходимости проходить FBO, если вы хотите получить содержимое своего главного окна. – datenwolf
@datenwolf благодарит за информацию. Я попробую это, но я не подозреваю, что это изменит результат работы ffmpeg – Dries
Действительно, это не касается вашей проблемы, поэтому это комментарий. – datenwolf