Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Incorrect Duration from VideoWriter

I'm using a VideoWriter object to record from a camera into an AVI file. When I open that AVI file up in VLC, it displays the full length of the video and plays the whole thing. However, Windows and ffprobe only report the video to be ~8 seconds. Furthermore, when I try to use a VideoCapture object to scan the video back in with OpenCV, it stops at the 8 second mark and won't go any further. I'm not sure why some sources report the video to be much shorter than it is. Here's the basic code:

cv::VideoWriter writer;
cv::Mat imageBayer, imageBGR;
int fps = 40;
int width = 1920;
int height = 1080;

writer.open("C:/Users/jsmith/Desktop/file.avi", cv::VideoWriter::fourcc('I', 'Y', 'U', 'V'), fps, cv::Size(width, height), true);
if (!writer.isOpened()) {
    std::cerr << "Unable to open video writer." << std::endl;
    return -1;
}

std::chrono::high_resolution_clock::time_point wakeTime = std::chrono::high_resolution_clock::now();
while (1) {
    std::this_thread::sleep_until(wakeTime);
    cam >> imageBayer;
    cv::cvtColor(imageBayer, imageBGR, cv::COLOR_BayerRG2BGR);
    writer << imageBGR;
    wakeTime = wakeTime + std::chrono::microseconds(1000000 / fps);
}

Any help would be appreciated, I can't figure out what's going on. I'm using OpenCV 3.1.

Incorrect Duration from VideoWriter

I'm using a VideoWriter object to record from a camera into an AVI file. When I open that AVI file up in VLC, it displays the full length of the video and plays the whole thing. However, Windows and ffprobe only report the video to be ~8 seconds. Furthermore, when I try to use a VideoCapture object to scan the video back in with OpenCV, it stops at the 8 second mark and won't go any further. I'm not sure why some sources report the video to be much shorter than it is. Here's the basic code:

cv::VideoWriter writer;
cv::Mat imageBayer, imageBGR;
int fps = 40;
int width = 1920;
int height = 1080;

writer.open("C:/Users/jsmith/Desktop/file.avi", cv::VideoWriter::fourcc('I', 'Y', 'U', 'V'), fps, cv::Size(width, height), true);
if (!writer.isOpened()) {
    std::cerr << "Unable to open video writer." << std::endl;
    return -1;
}

std::chrono::high_resolution_clock::time_point wakeTime = std::chrono::high_resolution_clock::now();
while (1) {
    std::this_thread::sleep_until(wakeTime);
    cam >> imageBayer;
    cv::cvtColor(imageBayer, imageBGR, cv::COLOR_BayerRG2BGR);
    writer << imageBGR;
    wakeTime = wakeTime + std::chrono::microseconds(1000000 / fps);
}

Any help would be appreciated, I can't figure out what's going on. I'm using OpenCV 3.1.

Edit: Upon more testing, I think it's because I was terminating the program with Ctrl+C and not letting the deconstructor get called.