加载Opencv的视频编写器录制的视频"Could not demultiplex stream"

"Could not demultiplex stream" in loading Video recorded by Opencv's VideoWriter

本文关键字:的视频 Could not demultiplex stream Opencv 加载      更新时间:2023-10-16

我的程序是

int main(){
    cout << "Start the process" << endl;
    cv::VideoCapture vcap("rtsp://root:pass@192.168.0.90/axis-media/media.amp?camera=1");
    cout << "Camera connection done!" << endl;
    cv::Mat image, small;
    //Output video
    cv::Size S = cv::Size((int) vcap.get(CV_CAP_PROP_FRAME_WIDTH), (int) vcap.get(CV_CAP_PROP_FRAME_HEIGHT));
    int ex = static_cast<int>(vcap.get(CV_CAP_PROP_FOURCC));
    int fps = vcap.get(CV_CAP_PROP_FPS);
    cout << "fps " << fps << " ex " << ex << endl;
    cv::VideoWriter outputVideo;
    outputVideo.open("TEST.avi", ex/*CV_FOURCC('X', '2', '6', '4')*/, vcap.get(CV_CAP_PROP_FPS), S, true);
    if(!outputVideo.isOpened()){
        cout << "Could not open the output video for write" << endl;
        return -1;
    }
    for(;;){
        if(!vcap.read(image)){
            std::cout << "No frame" << std::endl;
            cv::waitKey(0);
        }
        cv::resize(image, small, image.size()/2, 0, 0 , cv::INTER_LINEAR);
        cv::imshow("Display", small);
        cv::waitKey(1);
        outputVideo.write(small);
        if(getkey() == 'n')
            break;
    }
    cout << "Camera release" << endl;
    outputVideo.release();
    vcap.release();
    image.release();
    small.release();
    return 0;
}

int ex = static_cast<int>(vcap.get(CV_CAP_PROP_FOURCC)); ex在这里。

我可以记录test.avi,但不能由CV :: VideoCapture VCAP读取(" test.avi");或Ubuntu中的VLC播放器或视频。错误是"Could not demultiplex stream"

如果我更改为

outputVideo.open("TEST.avi", CV_FOURCC('X', '2', '6', '4'), vcap.get(CV_CAP_PROP_FPS), S, true);
outputVideo.open("TEST.avi", CV_FOURCC('P','I','M','1'), vcap.get(CV_CAP_PROP_FPS), S, true);
outputVideo.open("TEST.avi", CV_FOURCC('M', 'P', '4', '2'), vcap.get(CV_CAP_PROP_FPS), S, true);
etc.

都有相同的问题。

如果我设置

outputVideo.open("TEST.avi", CV_FOURCC('i', 'Y', 'U', 'V'), vcap.get(CV_CAP_PROP_FPS), S, true);

我有错误作为Opencv: FFMPEG iYUV is not supported with codec id 14

outputVideo.open("TEST.avi", CV_FOURCC('M', 'J', 'P', 'G'), vcap.get(CV_CAP_PROP_FPS), S, true);

OpenCV Error: Assertion failed (img.cols == width && img.rows == height && chann
els == 3) in write, file /home/Softwares/opencv/opencv/modules/videoio/src/
cap_mjpeg_encoder.cpp, line 829
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/Softwares/opencv/opencv/modules/videoio/src/cap_mjpeg_enco
der.cpp:829: error: (-215) img.cols == width && img.rows == height && channels =
= 3 in function write

可能是什么问题?那是我的ffmpeg有问题吗?

获取大小。就我而言,我这样做了。

`size = images[0].shape[:2]`

尝试播放记录时给出了错误。

`out = cv2.VideoWriter(record_path,fourcc, 15, size)`

我尝试了这个,它是工作的。

`out = cv2.VideoWriter(record_path,fourcc, 15, (size[1],size[0]))`

如果您在使用cv2.imshow显示框架之前从文件中读取视频并调整大小。确保保留"尺寸等于调整大小框架的尺寸。