编写未压缩的AVI视频

3

有没有简单小巧的库或C++代码示例可以编写未压缩的AVI视频文件?
我找到的每个资源都使用Windows视频,而我需要它具有可移植性。

我尝试查看AVI容器文档,但看起来非常繁琐。

3个回答

0

总是有OpenCV这个跨平台且相对容易将数据推送进去的选择。

或者 - 您始终可以将视频数据传输到另一个可执行文件中。

例如,在Unix中,您可以执行以下操作:

在您的程序中:

char myimage[640*480*4];
// read data into myimage
fputs(myimage,1,640*480*4,stdout);

在运行您的程序的脚本中:

./myprogram | \
mencoder /dev/stdin -demuxer rawvideo -rawvideo w=640:h=480:fps=30:format=rgba \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=9000000 \
-oac copy -o output.avi

(请注意,这确实压缩了视频 - 未压缩只需更改mencoder命令行即可)

我相信您也可以以这种方式使用ffmpeg或x264。您还可以从程序内部启动编码器,并写入管道(使整个过程就像使用库一样简单)-并且这应该适用于Windows、Linux或Mac(对mencoder命令行进行微小修改)。

显然,除了分发mencoder可执行文件之外,没有任何许可问题,因为您不链接到任何代码或编译任何内容。

虽然不完全符合您的要求,但它具有一个优点,即自动使用第二个处理器进行编码。


0

我自己没有做过,但我建议使用libavformat,它是ffmpeg的一部分(LGPLv2.1/GPLv2+)。


0
如果你想要一个超级简单的方法,那么将 BMP 文件作为一个编号序列写入磁盘,然后通过 system() 或类似的方式调用 ffmpeg
ffmpeg -i picture_%04d.bmp -r 15 -vcodec rawvideo -y output.avi

注意:参数-r表示您希望最终电影的帧速率。
您可以通过调用ffmpeg基于的libavformat/libavcodec库来实现相同的结果,但这可能不符合您所需的“小巧”和“简单”的要求。

从性能方面来看,这会导致巨大的损失,因为需要读/写文件。在典型的应用程序中,文件I/O超过了任何算法处理的成本。 - Dmitri Nesteruk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接