OpenCV Python:获取视频帧速率的问题

OpenCV Python:获取视频帧速率的问题,python,opencv,video,frame-rate,Python,Opencv,Video,Frame Rate,我用我的笔记本电脑摄像机录制了一段短片。我的笔记本电脑是Acer Aspire 4755G。 我想使用OpenCV Python检查视频的fps。但我得到的结果是“1000”。是不是应该在30岁左右?下面是我的代码 另外,我在尝试直接从网络摄像头获取fps时出错 import numpy as np import cv2 cap = cv2.VideoCapture('test.avi') print cap.get(5) while(cap.isOpened()): ret, fr

我用我的笔记本电脑摄像机录制了一段短片。我的笔记本电脑是Acer Aspire 4755G。 我想使用OpenCV Python检查视频的fps。但我得到的结果是“1000”。是不是应该在30岁左右?下面是我的代码

另外,我在尝试直接从网络摄像头获取fps时出错

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中打开了视频(我正在使用Ubuntu12.04),并在属性下进行了检查。它说帧速率:每秒25帧。另外,我尝试用cap.get(7)替换cap.get(5),以便获得视频文件中总帧数的信息。它返回16891。这段视频只有16秒长,因此大约每秒100帧。它是OpenCV中的一个bug吗?还是我的代码有问题?我使用的是OpenCV 2.4.9,我想这是目前最新的。任何帮助都将不胜感激。

这取决于您的AVI文件——帧速率在标题()中定义。我刚刚在一个视频上试用了你的代码,它给了我59.9400599401(它来自一个每秒60帧的GoPro)。当我在十六进制编辑器中打开它时,确实有足够的位20-52给出16683,或1/59.9。。。以微秒为单位

您创建/使用的AVI可能没有正确设置该属性


您可以做的一件事是使用已知的帧速率对某个对象执行操作。如果你在windows上,我肯定有一个实用程序,但我现在还不知道。

你可以尝试
cv2.VideoCapture.set(CV\u CAP\u PROP\u FPS,)
cv2.VideoCapture.get(CV\u CAP\u PROP\u FPS)
来设置和获取视频的FPS。请参阅@Vipul我尝试了您提到的代码,但它给出了一个错误,即AttributeError:“内置函数”或“方法”对象没有属性“get”。我还尝试了打印cap.get(cv2.cv.cv_cap_PROP_FPS),但在Opencv 3.4.12中得到了相同的结果,即1000cv2.VideoCapture.get(cv2.cap_PROP_FPS)。视频文件是使用Ubuntu 12.04中的奶酪制作的。默认文件扩展名是.webm,但我在保存时将其更改为.avi。这可能是原因吗?我录制了另一个视频(这次使用OpenCV本身),并使用上述程序检查了它的帧率。这一次它显示了20fps(我用图腾电影播放器验证了这一点)。另外,如何检查标头中的位?我安装了Bless Hex Editor并打开了avi文件,但无法识别位。我只是尝试在Cheese中保存/重命名为.avi,它似乎只是更改了名称,而不是实际的文件类型。如果在十六进制编辑器中打开它,则标题会有所不同(webm标题看起来像),avconv会确认它是webm(
avconv-i file.avi
)。要检查实际AVI中的标头,它是从第20位开始的32位无符号整数。但总的来说,你的问题的答案是,你没有AVI文件,所以标题的帧率数字不在那里。谢谢你的回答。我怎么知道比特20在哪里?我在十六进制编辑器中只看到很多数字。