【发布时间】:2021-04-25 09:48:55
【问题描述】:
我想用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 48 46 47 62 48 44 47 49 63 47 46 47 64,当我录制5分钟的视频时,实际视频只有大约 4 分 45 秒。 谢谢你的帮助。
【问题讨论】:
-
视频编码很昂贵。通过告诉写入 20 fps,您只是告诉了必须如何解释视频,它并没有说明您的系统可以多快编码/写入帧。获得更快的 PC 并使用缓冲 + 线程和/或如果您已经有硬件编码器(例如许多英特尔 CPU),请使用允许硬件加速编码/写入的 VideoWriter 后端(您必须谷歌搜索)..
-
我试试,谢谢你的回复
标签: opencv video-capture