opencv编写视频的速度是否比实际设置速度慢



我想使用opencv来编写视频文件。当我将帧速率设置为20时,写入每帧的时间应该是50ms,但当我获得写入每帧时间时,每3到4帧就有一帧。这花费了很多时间,大约63ms。这导致我用opencv写入的视频持续时间比实际录制持续时间短。我的代码如下

Mat frame;
VideoCapture cap(0, CAP_DSHOW);
cap.set(3, 640);
cap.set(4, 480);
cap.set(CV_CAP_PROP_FPS, 20);
VideoWriter video("test.avi", CV_FOURCC('X', 'V', 'I', 'D'), 20, Size(640, 480));
clock_t start, ends;
while (cap.isOpened()) {
start = clock();
cap >> frame;
if (frame.empty()) break;
video << frame;
imshow("Frame1", frame);
waitKey(1);
if (_kbhit()) {
int ch = _getch();
if (ch == 27) break;
}
ends = clock();
cout << ends - start << endl;
}
cap.release();
video.release();
destroyAllWindows();

写入每帧的时间示例为48 47 46 63 46 47 49 46 63 49 47 48 62 47 46 47 62 44 47 63 47 47 47 47 64。当我录制5分钟的视频时,实际视频只有大约4分45秒谢谢你的帮助

您正在从相机获取帧。

你确实要求它每秒20帧,但它可能无法准确做到这一点。

它也可能决定给你更少的帧,因为它必须暴露它们更长的时间,因为低光补偿(如果启用(。

你的一些假设根本无效。我希望我能把它们指给你看。

如果你";记录一个5分钟的视频";,你一直对你的做法保密,所以我们不能相信你的说法。

如果还有问题,您需要提供更多信息,例如在什么时间段内精确的帧数,以及如果这是可以证明的也可以在从相机读取时写入文件。

最新更新