gpt4 book ai didi

c++ - OpenCV VideoWriter 帧率问题

转载 作者:太空狗 更新时间:2023-10-29 19:58:51 26 4
gpt4 key购买 nike

我正在尝试将来自 1080p 网络摄像头的视频录制到文件中。我在视频中设置了一个计时器,在每次试验中,视频播放器(我使用的是 VLC)报告的时间戳与视频中的时间不同步。它总是关闭几秒钟(通常视频内计时器比玩家报告的时间快)。

如下所示,我将 C++ 程序设置为在一个线程中捕获视频,并在另一个线程中进行录制。这工作正常,因为我的 CPU 使用率约为 200%(可能达到最大值?)。我使用的是装有 OS X 10.8 @ 1.8 GHz Intel Core i7 的 Macbook Air。

我试过将帧速率更改为 15fps,这导致视频非常不稳定/缓慢。我也试过设置 CV_CAP_PROP_FRAME_WIDTH & CV_CAP_PROP_FRAME_HEIGHT到较低的分辨率,这会导致视频速度变慢。看起来 1080p @ 30fps 可以生成稳定的视频,但播放速度仍然总是比预期的快。我也试过输入 waitKey(10);record << frame; 之后但它没有影响任何东西。

关于如何使视频及时匹配有什么建议吗?

谢谢!阿卡什

#include "opencv/cv.h"
#include "opencv/highgui.h"
#include <boost/thread.hpp>

using namespace cv;

void captureFunc(Mat *frame, VideoCapture *capture){
for(;;){
// get a new frame from camera
(*capture) >> (*frame);
}
}

int main(int, char**)
{
VideoCapture capture(0); // open the default camera
if( !capture.isOpened() ) {
printf("Camera failed to open!\n");
return -1;
}

capture.set(CV_CAP_PROP_FPS,30); //set capture rate to 30fps
Mat frame;
capture >> frame; // get first frame for size

// initialize recording of video
VideoWriter record("test.avi", CV_FOURCC('D','I','V','X'), 30, frame.size(), true);
if( !record.isOpened() ) {
printf("VideoWriter failed to open!\n");
return -1;
}

boost::thread captureThread(captureFunc, &frame, &capture); //start capture thread

sleep(1); //just to make sure capture thread is ready

for(;;)
{
// add frame to recorded video
record << frame;
}

return 0;
}

最佳答案

经过一些调试我解决了我的问题;这是 VideoWriter 对帧的馈送速率挑剔的问题。

关于c++ - OpenCV VideoWriter 帧率问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com