gpt4 book ai didi

c++ - 在 opencv 中录制视频仅 30 秒

转载 作者:太空狗 更新时间:2023-10-29 23:36:21 27 4
gpt4 key购买 nike

如何在opencv中只录制30秒的视频。我使用了下面的代码,但它只录制了 24 秒的视频?什么问题?

#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/contrib/contrib.hpp"
#include <stdio.h>
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <stdlib.h>
#include <time.h>

using namespace cv;
using namespace std;

int ex = 1734701162;

int main( int argc, const char** argv )
{

VideoCapture cap(0);
int i_fps = 15;
time_t start = time(0);

string OutputVideoPath = "output.mov";
VideoWriter outputVideo(OutputVideoPath, ex, i_fps, Size(640,480), true);


if(!cap.isOpened()) {
cout << "Not opened" << endl; // check if we succeeded
return -1;
}

while ( 1 ) {

Mat frame;
cap >> frame;
outputVideo << frame;
if ( difftime( time(0), start) == 30) break;

}

outputVideo.release();
cap.release();


return 0;
}

最佳答案

这里有两件事:

  1. 您正在查看挂钟时间。 difftime 返回一个 double 值,因此您不太可能得到恰好 30 作为结果。改成这样:
    if ( difftime( time(0), start) >= 30) 中断;

  2. 您为 VideoWriter 指定了 15fps,但您测量的时间是播放(和写入)视频所花费的时间。 (这完全是任意的)

如果您的输入视频是以不同于 15fps 的帧率录制的,您必须通过丢弃或复制帧来自行处理该比率。

如果达到 30 * 15,您最好计算帧数并停止。

关于c++ - 在 opencv 中录制视频仅 30 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16693897/

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