自定义avi / MP4文件编写器

时间:2010-10-21 20:44:12

标签: c++ windows video-capture

我正在Windows下用相机写一些视频文件 我需要数据不变 - 而不是MP4的'未压缩'即。没有YUV,没有颜色插值 - 只是原始相机传感器字节流。

目前我正在将此文件直接写入磁盘并稍后重新读取以重新编码为可用视频。但是由于没有标题,我必须分别跟踪图像大小,帧速率,色彩平衡等。

我可以添加一个自定义标题,但即使实际视频数据不是我的应用程序以外的任何其他内容,使用AVI文件至少会给我一个相对标准的标题来存储所有相机参数,也意味着分辨率,长度等会出现在资源管理器中。

是否有一种简单的方法可以生成AVI页眉/页脚而无需通过directshow或vfw发送所有数据?数据以> 250MB / s的速度进入,我不会丢失任何帧,因此我没有时间做更多的工作,只能将每个帧转储到磁盘上。

编辑:也许MP4会更好我有很多关于不符合AVI标准的相机配置的元数据

4 个答案:

答案 0 :(得分:1)

好吧,在弄清楚你的流的'合理'AVI标题后(例如,如果你使用自定义编解码器fourcc,没有应用程序可能会用它来做有用的事情 - 所以为什么要打扰AVI?) 你可以在文件的开头写一个预建的RIFF-AVI标题。找出价值并不难。

然后每个帧必须包含在自己的RIFF块中(4字节类型:“00db”+ 4字节长度+您的数据)。 事实上,你必须修复标题中的num_frames和一些长度字段。对于文件> 2GB,请不要忘记标题的OpenDML扩展名。

答案 1 :(得分:1)

Martin,既然您精通 OpenCV ,那么您是否只能使用cvCreateVideoWriter()来创建未压缩的.avi

CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1)

关于foucc param,文档说明:

  

在Win32下,如果在使用avi文件名时传递0,它将创建一个视频编写器,用于创建未压缩的avi文件。

答案 2 :(得分:0)

听起来你真的可以从使用opencv中受益,它可能很适合你。看看它是否符合您的需求:http://opencv.willowgarage.com/documentation/cpp/reading_and_writing_images_and_video.html#videocapture

答案 3 :(得分:0)

您可以使用OpenCV来读写avi文件 见http://opencv.willowgarage.com/documentation/cpp/reading_and_writing_images_and_video.html

请注意,OpenCV也可用于从相机中抓取图像。

相关问题