在 opencv 中录制视频仅 30 秒

Posted

技术标签:

【中文标题】在 opencv 中录制视频仅 30 秒【英文标题】:Record a video in opencv only for 30 secs 【发布时间】:2013-05-22 14:04:55 【问题描述】:

如何在 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 返回一个双精度值,因此您不太可能得到 exactly 30 作为结果。改为这样:if ( difftime( time(0), start) &gt;= 30) break;

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

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

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

【讨论】:

您好,我查过了。现在我得到 30 秒的视频。但捕获在 30 秒前结束。即,exe 在 30 秒内完成运行。我不能两个都沉下去吗?我有需要做的。所以请指教。 请注意,播放与任何时钟同步。您测量的时间用于检索和编写框架。您的机器似乎需要超过 30 秒才能处理 30 秒。一段视频,就是这样。那就去计算帧数吧! 长话短说:恕我直言,对播放/写入过程进行计时的想法一开始就是个坏主意。它与录制的视频序列无关

以上是关于在 opencv 中录制视频仅 30 秒的主要内容,如果未能解决你的问题,请参考以下文章

Safari 录制的 Angular 8 中的视频加速问题

如何在 iOS 和 macOS 上的 Safari 中使用网络摄像头录制视频?

在android中使用OpenCV录制视频

在 Opencv 的 UYVY 编解码器中录制视频

Opencv/c++ - 在线程中录制实时视频,在另一个线程中处理图像?

opencv不能录制桌面的视频吗?只能录制摄像头的视频