Qt Video Recorder
Qt Video Recorder
我正在尝试用Qt创建一个录像机。到目前为止,我所做的是在屏幕上截取一个矩形的屏幕截图并保存。最后,我使用ffmpeg从图像中获取一个视频文件。
我将计时器的信号timeout()
连接到我的自定义插槽,该插槽获取快照并将其保存到我的tmp文件夹中。计时器的间隔为1000/30。应该是每秒30次。但是1000/30比33毫秒多一点,所以我真的不能达到30帧/秒。它有点多。
我用录音机录制了一段youtube视频,一切都很顺利,但根据间隔的不同,速度会快一点/慢一点。
所以我的问题基本上是我如何才能真正获得30/40/50/。。。fps?
-
启动捕获时启动QElapsedTimer。
-
当您完成对帧的捕获(在快照槽的末尾(时,将下一帧帧数乘以以毫秒为单位的近似帧持续时间(双精度浮点值((例如,对于30 fps,它是
~33.33333333333
,但不要写(double)1000/30
(。将此值称为next_timestamp
。 -
请致电QElapsedTimer上的
elapsed()
。将此值称为current_timestamp
。 -
调用静态函数
QTimer::singleShot()
为next_timestamp - current_timestamp
休眠。再次将插槽参数设置为快照插槽。请注意,如果睡眠时间为<=0,你落后了;你的系统跟不上这么快捕捉的负荷。
当QTimer::singleShot()
触发时,您的快照插槽将再次被调用,但会出现一些时间错误。然而,在非实时操作系统(如Windows和Unix(OS X/Linux/等((下,这种错误是不可避免的。这是因为你无法决定代码何时执行——操作系统内核会这样做。不过,平均而言,你最终将获得每秒30帧的帧速率(假设你的计算机能够跟上负载!(,因为QElapsedTimer报告的经过时间将非常准确,如果系统落后,它将更快地捕获帧,如果它领先,它将更慢地捕获帧。
- 将一些点绘制为来自video/c++的跟踪轨迹
- wxwidgets: SplashScreen with video
- Boost/OpenCV 错误:与调用 '(boost::_mfi::d m<void(cv::Mat*, cv::VideoCapture*), Recorder>)
- cvResize on a video frame
- 'QObject'是一个模棱两可的'Recorder'基础
- Android应用跟踪点:Video.calcOpticalFlow(..)方法不能正常工作
- Qt Video Recorder
- QML组件'Video'无法播放Qt资源文件中的视频文件
- 是否有适用于所有音频和视频(如 "audio/*" 和"video/*")的 MIME 类型?