我正在寻找一种方法,用我用OpenGL渲染的一行帧创建视频,并使用glGetTexImage函数转换为ram作为int数组。是否可以直接在ram(~10秒视频)中实现这一点,或者我是否必须将每个帧保存到硬盘并对视频进行编码?
我在另一个SO问题中找到了这个样本http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/api-example_8c-source.html,但这仍然是最好的方法吗?
答案 0 :(得分:3)
今天我得到了一个使用这个例子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
asanthonline表示帧的直接编码非常密集,但你也可以用ffmpeg编写你的帧作为rawvideo格式,它支持rgb24像素格式,并使用ffmpeg的cmd命令离线转换。
答案 1 :(得分:0)
如果你想要一种跨平台的方式,你可能不得不使用ffmpeg / libavcodec,但在Windows上,你可以使用资源here编写AVI。