Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

OpenCV 3.1 VideoCapture ffmpeg

Hello every one. I'm using opencv 3.1

std::string filename = "1440x1072.avi";
capture.open(filename, CAP_FFMPEG);

//internally it invoke follow code
//opencv code
bool VideoCapture::open(const String& filename, int apiPreference)
{
    if (isOpened()) release();
    icap = IVideoCapture_create(filename);
    if (!icap.empty())
        return true;

    cap.reset(cvCreateFileCaptureWithPreference(filename.c_str(), apiPreference)); // !! <- and only here opencv start working with apiPreference!
    return isOpened();
}    
//opencv code

so how to using apiPreference correctly? In my case, i get cap = IVideoCapture_create(filename) not empty and cvCreateFileCaptureWithPreference never invoke. Does it bug?

Just in case, I open "ProcessExplorer" app and check what kind of dll was started with my application. There no any ffmpeg dll in list.

Then I rename video file with non english words (some russians symbols) and after that string cap = IVideoCapture_create(filename) make empty, and program go to execute cvCreateFileCaptureWithPreference. I open "ProcessExplorer" and see now application using opencv_ffmpeg310_64.dll

Also the video file has some kind of interlines capture, and after capture.read(mat) procedure, the height ot the output mat is half of original video frame (536 instead of 1072). When opencv_ffmpeg310_64.dll using I get original frame

OpenCV 3.1 VideoCapture ffmpeg

Hello every one. I'm using opencv 3.1

how can I using ffmpeg explicity?

std::string filename = "1440x1072.avi";
capture.open(filename, CAP_FFMPEG);
 

does not work...

//internally it invoke follow code
//opencv code
bool VideoCapture::open(const String& filename, int apiPreference)
{
    if (isOpened()) release();
    icap = IVideoCapture_create(filename);
    if (!icap.empty())
        return true;

    cap.reset(cvCreateFileCaptureWithPreference(filename.c_str(), apiPreference)); // !! <- and only here opencv start working with apiPreference!
    return isOpened();
}    
//opencv code

so how to using apiPreference correctly? In my case, i get cap = IVideoCapture_create(filename) not empty and cvCreateFileCaptureWithPreference never invoke. Does it bug?

Just in case, I open "ProcessExplorer" app and check what kind of dll was started with my application. There no any ffmpeg dll in list.

Then I rename video file with non english words (some russians symbols) and after that string cap = IVideoCapture_create(filename) make empty, and program go to execute cvCreateFileCaptureWithPreference. I open "ProcessExplorer" and see now application using opencv_ffmpeg310_64.dll

Also the video file has some kind of interlines capture, and after capture.read(mat) procedure, the height ot the output mat is half of original video frame (536 instead of 1072). When opencv_ffmpeg310_64.dll using I get original frame