1

我正在尝试在 Mandriva Linux 2009.1 下使用 openCV 保存视频文件。不幸的是 cvCreateVideoWriter 总是返回 null 尽管我可以看到和修改 mpeg 文件,换句话说 cvCaptureFromCam、cvCaptureFromAvi、cvRetrieveFrame 正在工作。

我尝试了本教程和此编解码器页面中所有可能的编解码器。我还尝试将 0 用于未压缩的 avi,将 -1 用于fourcc 参数中的选择框,但没有弹出任何选择,也没有任何反应。我还将 isColor 修改为 0。

我在工作目录中也有写权限。

这是相关的代码片段:

    CvVideoWriter *writer = 0;
    int isColor = 1;
    int fps = 25;
    int frameW = 640;
    int frameH = 480;


    if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))
        capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 );
    else if( argc == 2 ) {
        printf("argc == 2 :%s:\n", argv[1] );
        capture = cvCaptureFromFile( argv[1] );
    }

    cvInitSystem(argc,argv);

 writer = cvCreateVideoWriter("out.avi",CV_FOURCC('I','Y','U','V'),fps,cvSize(frameW,frameH),isColor);

可能是什么问题呢?

4

2 回答 2

1

这将取决于您的 OpenCV 库是如何配置的。特别是我认为HAVE_FFMPEG必须定义才能处理“IYUV”FOURCC 值。你的库是用HAVE_FFMPEG定义的吗?

默认 writer 对象(在fourcc 为零时创建,或者fourcc 值未被可用的处理程序之一处理)每帧创建一个图像文件。在这种情况下,文件名需要类似于“file%04d.foo”或“file0001.foo”,否则编写器创建失败。您可以尝试为文件名参数传递类似“test0001.png”的内容作为实验,以验证默认图像编写器是否已成功创建(这不会直接帮助,但可能是确认您的fourcc值不是由可用的作家识别。)

根据文档,当fourcc等于-1时打开选择对话框的选项是Windows特定的。

于 2009-05-24T14:53:23.983 回答
1

我阅读了您的帖子、Lance 的回复和您对它的评论,然后终于为自己找到了解决方法,并决定为每个在这个问题上苦苦挣扎的人添加一些注释。

首先要检查的是 CMake 是否使用 FFmpeg 构建了 OpenCV。我快速而可怕的方法就是cmake使用标志和参数运行,就像你在安装过程中编写的那样。在输出的最后会有关于将安装哪些组件的日志。如果您的参数复制了实际安装期间使用的参数,您将获得有关安装内容的信息。

接下来,您可能想要检查 linux 系统上编解码器的可用编码器和解码器。我通过使用ffmpeg -codecs.

第三个注释是为 设置的可靠和原始参数cvCreateVideoWriter

“a0000.png”,0,fps,大小,0

fps这里是分别包含 fps和sizeframe_size 字段值的变量。你会得到很多图片——Lance Richardson 和 rics 已经注意到了。

最后,对于使用 FFmpeg 构建 OpenCV 并安装 XVID 编码器的系统,我将这些参数插入cvCreateVideoWriter

"/home/me/openCVOut/a.avi", CV_FOURCC('X','V','I','D'), fps, 大小

最后得到我想要的。

希望我的回答有点用!

于 2012-06-29T11:28:32.373 回答