OpenCV-VideoWriter can not write *.mp4 with C++ ?

asked 2020-02-16 21:57:05 -0500

ToanVnET gravatar image

Hi there,

My name is Toan. I have a really strange issue. In Python, I able to write video with both *.avi (MJPG) and *.mp4 (DIVX). But in C++, I can only write video with *.avi (MJPG). I tried to write *.mp4 video with many codec "DIVX", "XVID", "H264", "MP4V",...etc... but output is still empty. When compile the program has no any error. I refer some materials and articles, It's may concern about FFMPEG library and I installed OpenCV contains FFMPEG as 3rdparty. But I don't know how to fix this.

This is my code:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/videoio.hpp>
using namespace cv; using namespace std;

int main()
{
    cout << "Built with OpenCV " << CV_VERSION << endl;
    Mat image;
    Mat src;
    VideoCapture capture;
    capture.open(1 + cv::CAP_V4L2);
capture >> src;
bool isColor = (src.type() == CV_8UC3);
VideoWriter writer;
int codec = VideoWriter::fourcc('H', '2', '6', '4'); 
double fps = 10.0;     
Size sizeFrame(640,480);
string pipeline = "appsrc ! videoconvert ! avenc_h264 ! matroskamux ! filesink location=test.mp4";
writer.open("front.mp4", codec, fps, sizeFrame, isColor);
cout << "Started writing video... " << endl;
Mat xframe;
    for (int i = 0 ; i < 100 ; i ++)
{
    capture >> image;
    resize(image,xframe,sizeFrame);
    writer.write(xframe);
}
cout << "Write complete !" << endl;
capture.release();
writer.release();
return 0;
}

So what should I do now ?

Thank you so much,

Toan

edit retag flag offensive close merge delete