我的目标是将电影的帧与手机陀螺仪/加速度计的设备方向数据同步。Android 提供带有正确时间戳的方向数据。至于视频,它的帧速率只在一般情况下知道。实验表明,加速度计测量的方向变化与场景中的变化不匹配。有时它走得更快,有时它在同一视频中走得更慢。
有没有办法找出两个连续帧之间经过了多少时间?
我将自己回答这个问题。
首先,是的,fps 或帧速率可能不是恒定的。以下是 Android 开发人员指南中的引述:"注意:在某些具有自动帧速率的设备上,这会设置最大帧速率,而不是恒定帧速率。
http://developer.android.com/reference/android/media/MediaRecorder.html#setVideoFrameRate%28int%29
其次,OpenCV VideoCapture 类中有一个函数 get(CV_CAP_PROP_POS_MSEC),它允许读取当前帧时间位置:
VideoCapture capture("test.mp4");
double curFrameTime;
double prevFrameTime = 0;
double dt;
while (capture.grab())
{
curFrameTime = capture.get(CV_CAP_PROP_POS_MSEC); //Current frame position
dt = curFrameTime - prevFrameTime; //Time difference
prevFrameTime = curFrameTime; //Previous frame position
}
capture.release();
如果有更好的建议,我会很高兴看到它。