【发布时间】:2010-11-13 04:52:52
【问题描述】:
我正在 Linux 机器上使用 OpenCV 编写视频。我想在 Windows 机器上使用 OpenCV 阅读相同的视频。我无法使用 openCV 中提供的标准编解码器来执行此操作。
谁能建议我如何跨两个平台读/写视频?
【问题讨论】:
标签: windows linux video cross-platform opencv
我正在 Linux 机器上使用 OpenCV 编写视频。我想在 Windows 机器上使用 OpenCV 阅读相同的视频。我无法使用 openCV 中提供的标准编解码器来执行此操作。
谁能建议我如何跨两个平台读/写视频?
【问题讨论】:
标签: windows linux video cross-platform opencv
我认为问题不在于 OpenCV,我认为问题在于编解码器,正如您所提到的。我也不认为 OpenCV 附带编解码器...仔细检查您是否在 Windows 下安装了正确的编解码器。
你看过video codecs上的文档吗?
【讨论】:
OpenCV Wiki 直接解决了这个问题。请参阅http://opencv.willowgarage.com/wiki/VideoCodecs,特别是标题“兼容性列表”。
不幸的是,所有三个平台(Linux、Windows 和 OSX)都支持的唯一编解码器是“DIB”、“I420”和“IYUV”,它们都是未压缩的视频编解码器,因此文件大小非常大。
该 wiki 还列出了一些可供尝试的编解码器,它们可以在任何两个平台上工作,但不能在所有三个平台上工作。
如果您决定使用未压缩的视频文件,您可以使用VirtualDub 之类的程序在您的 Windows 机器上将它们转换为文件大小较小的文件。
编辑:仅供参考,在 Windows 上,我在 Motion-JPEG 中有 OpenCV 输出,然后我在 Directstream 复制模式下使用 VirtualDub 重新保存文件,从而更正了电影索引的错误。然后这些 M-JPEG 视频文件默认在 Mac 和 Windows 上播放。
如果我尝试将视频读入 OpenCV,我通常会先将我的视频转换为 Cinepak(使用虚拟配音、quicktime 等),然后将其输入 OpenCV。我使用 Cinepak 是因为出于某种原因,Cinepak 编码器似乎比 MJPEG 编码器更普遍。
【讨论】:
exp->Vid=cvCreateVideoWriter(MovieFileName,CV_FOURCC('M','J','P','G'), 30, cvSize(xdim ,ydim ),0); 我认为(尽管我不肯定)MJPEG 编码器默认带有 OpenCV。我一直认为是 OpenCV 的 MJPEG 实现弄乱了索引文件,这就是为什么我必须在任何其他视频播放器读取它之前使用 VirtualDub 进行第二次传递和直接流复制。