OpenCV-Python:获取视频帧率的问题
我用我的笔记本电脑摄像头录了一段短视频。我的笔记本是Acer Aspire 4755G。我想用OpenCV Python来检查这个视频的帧率(fps)。但是我得到的结果是“1000”。这不是应该在30左右吗?下面是我的代码。
顺便说一下,我在尝试直接从摄像头获取帧率时遇到了一些错误。
import numpy as np
import cv2
cap = cv2.VideoCapture('test.avi')
print cap.get(5)
while(cap.isOpened()):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(150) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我在Cheese软件中打开了视频(我用的是Ubuntu 12.04),在属性里查看,显示的帧率是:每秒25帧。此外,我尝试把cap.get(5)换成cap.get(7),想获取视频文件中的总帧数。结果返回了16891。视频只有16秒长,这样算下来大约是100帧每秒。这是OpenCV的bug吗?还是我的代码有什么问题?我用的是OpenCV 2.4.9,应该是目前最新的版本。任何帮助都非常感谢。
1 个回答
1
这要看你的AVI文件是什么情况——帧率是在文件的头部定义的(可以查看这里)。我刚刚在一个我手头的视频上试了你的代码,结果显示是59.9400599401(这个视频是从一个60帧每秒的GoPro拍的)。当我用十六进制编辑器打开它时,确实在第20到52位找到了16683,换算成微秒就是1/59.9...。
很可能你创建的AVI文件没有正确设置这个属性。
你可以做的一件事是用avconv转换文件,把它变成一个帧率已知的格式。如果你是在Windows上,我相信有相关的工具,但我现在想不起来具体是哪一个。