我有多个录制的视频样本,当我通过我的程序运行它时,它返回FPS等。它对我的所有视频样本都很准确(见下表)但是当我运行通过我的智能手机拍摄的视频样本时,它将返回90000的FPS,这通过我的智能手机捕获的每个视频都会发生,因此它不仅仅是单个视频文件存在问题。
File Actual FPS OpenCV FPS ffmpeg FPS
action-60fps 60 59 60
action-24fps 24 24 24
phone_panning 29 90000 29
是什么导致了这个问题?
编辑:管理忘记添加我的代码...
VideoCapture capture(argv[1]);
Mat frame;
if(capture.isOpened()) {
int fps = capture.get(CV_CAP_PROP_FPS);
int width = capture.get(CV_CAP_PROP_FRAME_WIDTH);
int height = capture.get(CV_CAP_PROP_FRAME_HEIGHT);
cout << "FPS: " << fps << ", width: " << width << ", height: " << height << endl;
VideoWriter writer("output.mpg",
CV_FOURCC('P','I','M','1'), fps, cvSize(width, height), 0); // 0 means gray, 1 means color
if(writer.isOpened()) {
while(true) {
capture >> frame;
if(!frame.empty()) {
imshow("Video", frame);
}
Mat frame_gray = frame.clone();
cvtColor(frame, frame_gray, CV_RGB2GRAY);
writer << frame_gray;
int key = waitKey(25);
if((char)key == 'q') {
break;
}
}
}
}
答案 0 :(得分:0)
我在计算视频中的FPS和帧数时遇到了与opencv相同的问题。 (它为FPS返回90,000,为64秒视频返回5,758,245帧数!) 根据这个答案: OpenCV captures only a fraction of the frames from a video file 它是一个opencv问题,他们正在研究它。
另一个原因可能是文件头问题,我的是转换视频格式引起的。我通过使用原始视频格式mp4而不是avi来解决它。