我正在寻找一种方法来从我用 OpenGL 渲染并使用 glGetTexImage 函数作为 int 数组传输到 ram 的一行帧创建视频。是否可以直接在 ram(约 10 秒视频)中实现这一点,还是我必须将每一帧保存到硬盘并在之后对视频进行编码?
我在另一个 SO 问题中找到了这个示例http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/api-example_8c-source.html但这仍然是最好的方法吗?
我正在寻找一种方法来从我用 OpenGL 渲染并使用 glGetTexImage 函数作为 int 数组传输到 ram 的一行帧创建视频。是否可以直接在 ram(约 10 秒视频)中实现这一点,还是我必须将每一帧保存到硬盘并在之后对视频进行编码?
我在另一个 SO 问题中找到了这个示例http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/api-example_8c-source.html但这仍然是最好的方法吗?
今天我得到了使用这个例子的提示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 所说,帧的直接编码非常占用 cpu,但您也可以使用 ffmpeg 将帧编写为支持 rgb24 像素格式的 rawvideo 格式,并使用 ffmpeg 的 cmd 命令将其离线转换。
如果您想要一种跨平台的方式,您可能必须使用 ffmpeg/libavcodec,但在 Windows 上,您可以使用此处的资源非常简单地编写 AVI 。