opencv写入视频的速度是否低于实际设置速度?;
我想用opencv写一个视频文件。当我将帧速率设置为20时,写入每帧的时间应为50毫秒,但当我获得写入每帧的时间时,每3到4帧就有一帧,这花费了很多时间,大约63毫秒。这导致我使用opencv写入的视频时长比实际录制时长更短。 我的代码如下opencv写入视频的速度是否低于实际设置速度?;,opencv,video-capture,Opencv,Video Capture,我想用opencv写一个视频文件。当我将帧速率设置为20时,写入每帧的时间应为50毫秒,但当我获得写入每帧的时间时,每3到4帧就有一帧,这花费了很多时间,大约63毫秒。这导致我使用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(&qu
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();
Mat框架;
视频捕获上限(0,上限显示);
第三套(3640);
第2组(4480);
封盖套件(CV、封盖、道具、FPS,20);
VideoWriter视频(“test.avi”,CV_FOURCC('X','V','I','D'),20,尺寸(640480));
时钟开始,结束;
while(cap.isOpened()){
开始=时钟();
cap>>框架;
如果(frame.empty())中断;
视频您正在从照相机获取帧
你确实要求20 fps,但它可能无法精确地做到这一点
它也可能会决定给你更少的帧,因为它必须曝光更长的时间,因为光线补偿较低(如果启用的话)
你的一些假设完全无效。我希望我能设法向你指出
如果你“录制一段5分钟的视频”,你已经对你是如何做到这一点保密了,所以我们不能依赖你的说法
如果还有问题,您需要提供更多信息,例如在什么时间段内的精确帧数,以及在从相机读取时不必写入文件就可以证明这一点。视频编码是昂贵的。告诉您写入20 fps,您只需告诉您必须如何解释视频,这并不能告诉您需要如何解释视频关于你的系统编码/写入帧的速度。使用更快的PC,使用缓冲+线程和/或如果你已经有硬件编码器(例如许多intel CPU),使用允许硬件加速编码/写入的VideoWriter后端(你必须用谷歌搜索)…我会试试看,谢谢你的回复。事实上,我在图片的每一帧上都写下了我的本地时间。我刚刚重新录制了一段606s的视频,但获得的视频只有11758帧,也就是588s。我用这段代码来获取时间timebt;ftime(&t);tm*ltm=localtime(&t.time);time\u str=to\u string(1900+ltm->tm\u year)+“”+to\u string(1+ltm->tm-mon)+“+to-string(ltm->tm-mday)+”+“+to-string(ltm->tm-hour)++”:“+\to-string(ltm->tm-min)++”:“+to-string(ltm->tm-sec)+”+\to-string(t.millitm);
并使用此代码编写每帧的时间,putText(帧、时间、点(100、80)、字体(1、标量(255、0、0、0)、2)
谢谢您的回复