OpenCV VideoWriter write()函数在C ++中的MAC OS上失败

时间:2015-03-18 08:18:47

标签: macos opencv video ffmpeg

我是新手。我正在开发OpenCV。我正在尝试使用OpenCV读取和写入视频文件。我的代码是:

VideoCapture inputVideo("input.avi");

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

    // Setup output video
    VideoWriter output_cap("output.avi",
                               inputVideo.get(CV_CAP_PROP_FOURCC),
                               inputVideo.get(CV_CAP_PROP_FPS),
                               cv::Size(inputVideo.get(CV_CAP_PROP_FRAME_WIDTH), inputVideo.get(CV_CAP_PROP_FRAME_HEIGHT)),1);

    Mat frame;

    output_cap.open("/private/var/root/Desktop/output.avi",
                    inputVideo.get(CV_CAP_PROP_FOURCC),
                    inputVideo.get(CV_CAP_PROP_FPS),
                    cv::Size(inputVideo.get(CV_CAP_PROP_FRAME_WIDTH), inputVideo.get(CV_CAP_PROP_FRAME_HEIGHT)),1);
    while (true)
    {
        if (!inputVideo.read(frame))
            break;

        imshow("title",frame);

        waitKey(100);
        output_cap.write(frame);
    }

现在我的问题是:当我尝试使用 output_cap.write(frame)编写帧时,我只获得8kb文件作为输出视频文件。但用于查看框架的 imshow(&#34;标题&#34;,框架)功能可正常工作并按顺序查看所有框架。你能告诉我我做错了吗?

3 个答案:

答案 0 :(得分:4)

我使用其他四位代码解决了它:8BPS和SVQ3。

我有类似的问题。当我尝试使用mac的网络摄像头录制视频时

  

imshow(&#34;标题&#34;,帧)

查看框架的功能很好。但是当我尝试使用

编写帧时
  

output_cap.write(帧)

我的输出视频文件只有8kb(正好是414Bytes)。

我尝试了很多方法,但没有工作。最后安装ffmpeg,但仍然无法正常工作。

但我看到&#34; QuickTime视频&#34;当我在终端输入ffmpeg -codecs时。然后我去fourcc.org并查找&#34; Quicktime&#34;。我得到了:8BPS,AVRN,RPZA,SV10,SVQ3和ZYGO。

我尝试了所有这些,只有两个作品:8BPS和SVQ3。

我的代码是:

var upperBound = 14;
for(var i=0;i<upperBound;i++){
    console.log("*".repeat(i));
}

答案 1 :(得分:1)

mac os x没有videoWriter。您可以将它们保存为jpeg,然后使用ffmpeg将它们拼接起来。

答案 2 :(得分:0)

如果您使用brew安装了OpenCV,请尝试使用brew install opencv --with-ffpmeg重新安装。