OpenCV videoWriter编解码器问题

时间:2013-11-30 12:48:48

标签: c++ opencv video

我正在尝试在Windows中的OpenCV中编写视频,并在选择编解码器时遇到各种问题。我不确定它是否在我的代码中,或者我没有必要的编解码器。代码是:

int main(int argc, char ** argv){

        VideoCapture inputVideo("LFW.mp4");
        Mat inputFrame, outputFrame;
        VideoWriter outputVideo;

        if (!inputVideo.isOpened()){
            std::cout << "!!! Input video could not be opened" << std::endl;
            return 1;
        }

        int ex = static_cast<int>(inputVideo.get(CV_CAP_PROP_FOURCC));
        const string name = "Output.mp4";
        Size size = Size((int) inputVideo.get(CV_CAP_PROP_FRAME_WIDTH), (int) inputVideo.get(CV_CAP_PROP_FRAME_HEIGHT));
        outputVideo.open(name, CV_FOURCC('M','P','4','2'), inputVideo.get(CV_CAP_PROP_FPS), size, true);

        if (!outputVideo.isOpened()){
            std::cout << "!!! Output video could not be opened" << std::endl;
            return 2;
        }

        return 0;
}

代码不断退出代码2,因此videoWriter对象对其配置不满意。

1 个答案:

答案 0 :(得分:0)

在使用VideoCapture和VideoWriter时,人们遇到编解码器问题的情况并不少见。 (另一个不太常见的问题是OpenCV在没有编码器的情况下编译(比如在编译OpenCV时使用WITH_FFMPEG=NOWITH_VFW=NO))

我会尝试以下事情剖析问题(按照涉及的麻烦程度排序:)):

  1. 尝试运行相同的程序,但将-1而不是CV_FOURCC('M','P','4','2')作为第二个参数传递给outputVideo.open()。然后,您将看到一个弹出窗口,要求您选择编解码器,然后可以看到OpenCV找到的那些。

  2. 如果这对您没有帮助 - 请使用调试器进入outputVideo.open()。由于某些预处理器宏,您可能会得到一个空函数(#ifdef。不幸的是,您必须使用调试编译的OpenCV和pdb文件才能正确执行此操作。