Создание видео из визуализированных кадров OpenGL

Я ищу способ создать видео из ряда кадров, которые я визуализировал с помощью OpenGL и передал в оперативную память в виде массива int, используя функцию glGetTexImage. можно ли добиться этого непосредственно в оперативной памяти (видео ~ 10 секунд) или мне нужно сохранять каждый кадр на жесткий диск и потом кодировать видео?

я нашел этот образец http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/api-example_8c-source.html в другом вопросе SO, но является ли это лучшим способом сделать это?


person MrMuh    schedule 03.05.2012    source источник


Ответы (2)


сегодня мне подсказали использовать этот пример http://git.videolan.org/?p=ffmpeg.git;a=blob;f=doc/examples/decoding_encoding.c;h=cb63294b142f007cf78436c5d81c08a49f3124be;hb=HEAD посмотреть, как можно добиться h264. проблема, когда вы хотите кодировать кадры, отображаемые opengl, заключается в том, что они находятся в RGB (A), а большинство кодеков требуют YUV. для преобразования вы можете использовать swscale (ffmpeg) — пример того, как его использовать, можно найти здесь http://web.me.com/dhoerl/Home/Tech_Blog/Entries/2009/1/22_Revised_avcodec_sample.c.html

как заявил ananthonline, прямое кодирование кадров требует больших ресурсов процессора, но вы также можете записывать свои кадры с помощью ffmpeg в формате rawvideo, который поддерживает формат пикселей rgb24, и конвертировать его в автономном режиме с помощью команд cmd ffmpeg.

person MrMuh    schedule 10.05.2012
comment
Поздравляю с исправлением! Когда вы сможете, обязательно пометьте свой ответ как «принятый», чтобы другие могли учиться на вашем решении. Ура~ - person Andrew Kozak; 10.05.2012

Если вам нужен кроссплатформенный способ сделать это, вам, вероятно, придется использовать ffmpeg/libavcodec, но в Windows вы можете просто написать AVI, используя ресурсы здесь.

person Ani    schedule 03.05.2012
comment
ссылка звучит многообещающе, но я забыл запрос на кодировку h264, поэтому я думаю, что ffmpeg - лучший способ добиться этого или? - person MrMuh; 06.05.2012
comment
Я не верю, что вы можете напрямую сделать h.264, если вы не используете DirectShow/Media Foundation, поэтому ваши альтернативы — визуализировать как AVI, а затем выполнить автономное преобразование, вызвав инструмент командной строки, или захватить напрямую в H. 264 путем взаимодействия с libavcodec. Помните, что кодирование в H.264 сильно загружает ЦП и может вызвать сбои при рендеринге, если у вас нет мощного ЦП и/или легкого кода рендеринга. - person Ani; 07.05.2012