在“OpenCV”中,“警告:无法创建空的电影文件容器”是什么意思?

时间:2012-06-18 16:23:03

标签: c++ opencv compiler-errors codec

我正在关注OpenCV书的教程,以下代码不起作用:

#include <iostream>
#include <opencv/cv.h>
#include <opencv/highgui.h>
using namespace std;

int main() {
    string arg1 = "new.mov";
    string arg2 = "mov.mov";
    CvCapture* capture = 0;
    capture = cvCreateFileCapture(arg1.c_str());
    if(!capture){
        return -1;
    }
    IplImage *bgr_frame=cvQueryFrame(capture);
    double fps = cvGetCaptureProperty (
            capture,
            CV_CAP_PROP_FPS
    );
    CvSize size = cvSize(
            (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH),
            (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH)
    );
    CvVideoWriter* writer = cvCreateVideoWriter(
        arg2.c_str(),
        CV_FOURCC('N', 'T', 'S', 'C'),
        fps,
        size
    );
    IplImage* logpolar_frame = cvCreateImage(
            size,
            IPL_DEPTH_8U,
            3
    );
    while((bgr_frame=cvQueryFrame(capture)) != NULL){
        cvLogPolar(
                bgr_frame, logpolar_frame,
                cvPoint2D32f(bgr_frame->width/2, bgr_frame->height/2),
                40,
                CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS
                );
                cvWriteFrame(writer, logpolar_frame);
    }
    cvReleaseVideoWriter(&writer);
    cvReleaseImage(&logpolar_frame);
    cvReleaseCapture(&capture);
    return 0;
}

当我运行代码时,它不会给我一个错误 - 而是程序输出到控制台:

WARNING: Could not create empty movie file container.

接下来是100行左右:

Didn't successfully update movie file.

这个错误(或其所谓的错误)意味着什么以及造成它的原因是什么?

我不知道这是否有帮助,但它曾经给我一个关于编解码器的错误(在本书中是MJPG)所以我将CV_FOURCC('M', 'J', 'P', 'G')更改为CV_FOURCC('N', 'T', 'S', 'C')

3 个答案:

答案 0 :(得分:2)

NTSC不是有效的编解码器fourcc,因此没有创建视频编写器

答案 1 :(得分:2)

尝试将CV_FOURCC('N', 'T', 'S', 'C')更改为CV_FOURCC('D', 'I', 'V', 'X')。这是manual给你的。

可能的编解码器:

CV_FOURCC('P','I','M','1')    = MPEG-1 codec
CV_FOURCC('M','J','P','G')    = motion-jpeg codec (does not work well)
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec

答案 2 :(得分:1)

寻找同样消息的解决方案。在我的情况下,我使用Mac / OSX,我DID使用CV_FOURCC('M','J','P','G')。当输出文件以“.mp4”结尾并使用“.avi”时,它失败了。