同步截屏(ffmpeg)和从网络摄像头捕获(OpenCV)

时间:2010-06-05 16:01:00

标签: java c++ opencv ffmpeg

从我以前的问题开始,我正在尝试构建一个简单的眼动仪。决定从Linux版本开始(运行Ubuntu)。

要完成此任务,应该组织屏幕录像和网络摄像头捕获,使得来自两个流的帧完全匹配,并且每个帧中的帧数完全相同。

屏幕录像fps完全取决于相机的fps,因此每次我们从网络摄像头获取图像时,我们都可以抓住屏幕框架并保持快乐。但是,用于快速截屏的所有工具(例如ffmpeg)都会返回.avi文件作为结果,并且需要已知的fps才能启动。

另一方面,像Java + Robot或ImageMagick这样的工具似乎需要大约20ms才能返回.jpg截图,这对于任务来说非常慢。但是,每次抓取网络摄像头帧后都可以请求它们并提供所需的同步。

所以子问题是:

  1. 美元相机的帧速率是否会在一次会话中发生变化?
  2. 是否有任何工具可以逐帧快速进行屏幕录像?
  3. 有没有办法让ffmpeg仅在程序启动此请求时才将新帧推送到.avi文件?
  4. 对于我的任务,我可以使用C ++或Java。

    实际上,我是一个界面设计师,而不是驱动程序员,而且这个任务似乎很低级。我将不胜感激任何建议和提示!

1 个答案:

答案 0 :(得分:1)

使用OpenCV的HighGUI中的cvGetCaptureProperty(CvCapture* capture, int property_id)功能property_id = CV_CAP_PROP_FPS来确定网络摄像头捕获的每秒帧数。

使用示例:

CvCapture *capture = 0;
double fps = 0.0;

capture = cvCaptureFromCAM( 0 );
fps = cvCaptureProperty(capture, CV_CAP_PROP_FPS);