【问题标题】:Custom avi/MP4 file writer自定义 avi/MP4 文件编写器
【发布时间】:2010-10-21 20:44:11
【问题描述】:

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

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

我可以添加一个自定义标题,但即使我的应用程序以外的任何东西都无法读取实际的视频数据,使用 AVI 文件至少会给我一个相对标准的标题来存储所有相机参数,这也意味着分辨率,长度等会显示在资源管理器中。

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

编辑:也许 MP4 会更好我有很多关于相机配置的元数据,这些元数据不在 AVI 标准中

【问题讨论】:

  • 为什么要将 AVI 标头写入相机字节流?字节流可能不是任何可解码的视频格式。我建议暂时编写自定义标题并稍后重新处理流以使其成为 AVI。
  • 我自己的标题需要存储宽度/高度/fps/颜色 - 与 avi 完全相同。如果我使用 avi,那么 Windows 资源管理器至少可以显示这些内容 - 为什么要发明另一种文件格式?

标签: c++ windows video-capture


【解决方案1】:

好吧,在确定了适合您的流的“合理”AVI 标头之后(例如,如果您使用自定义编解码器fourcc,则可能没有应用程序能够用它做有用的事情——那么为什么还要使用 AVI 呢?) 您可以在文件的开头编写一个预构建的 RIFF-AVI 标头。弄清楚这些值并不难。

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

【讨论】:

  • 不知道 2Gb AVI 的限制,我在
  • 您还可以使用您自己的类型编写自定义 riff 块以获得额外的标题。对于 MP4 / QT,除了数据流之外,您还必须将每个帧的文件位置表写入页眉(可以是页脚)。哦,我忘记了 RIFF 块必须填充为 2 字节对齐。
【解决方案2】:

Martin,既然您精通 OpenCV,难道不能直接使用 cvCreateVideoWriter() 创建一个未压缩的 .avi 吗?

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

关于foucc 参数,文档指出:

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

【讨论】:

  • opencv2.2 视频编写器仅适用于 24 位彩色图像。我刚刚提交了一堆补丁以允许读取/写入 8/16 位灰度fourcc="Y800","Y160" 但即使使用 ffmpeg 也很慢。但它现在确实支持 openDML 格式,因此 >2Gb。我现在正在研究如何调用 ffmpeg 来处理标题部分并自己进行流式传输。
  • @karlphilip - 刚刚收到来自 opencv 的电子邮件,他们已经包含了补丁,因此它现在可以读取/写入未压缩的 8 位数据。
【解决方案3】:

听起来你真的可以从使用 opencv 中受益,它可能会很好地为你处理很多这样的事情。看看它是否适合您的需求:http://opencv.willowgarage.com/documentation/cpp/reading_and_writing_images_and_video.html#videocapture

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • Opencv 使用 vfw 来访问摄像头和文件——它非常适合从网络摄像头读取 VGA 图像并写入未压缩的 AVI——但它无法以 60fps 的速度读取 4K 摄像头!
    猜你喜欢
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    相关资源
    最近更新 更多