使用 OpenCV 计算视频文件中的帧数?

Cod*_*mon 5 python opencv

我正在尝试计算视频文件(“foo.h264”)中的总帧数。

>>> import numpy as nm
>>> import cv2
>>> cap = cv2.VideoCapture('foo.h264')
>>> cap.get(CV_CAP_PROP_FRAME_COUNT)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'CV_CAP_PROP_FRAME_COUNT' is not defined
>>> cap.get(5)
25.0
>>> cap.get(7)
-192153584101141.0
Run Code Online (Sandbox Code Playgroud)

所以我认为get(5)给出帧速率并get(7)给出帧总数。显然get(7)上述情况是不正确的。因此,为了验证我尝试在文件中查找这些值.avi

>>> cap = cv2.VideoCapture('foo.avi')
>>> cap.get(5)
29.97002997002997
>>> cap.get(7)
256379.0
Run Code Online (Sandbox Code Playgroud)

我可以通过乘以视频的持续时间来计算总帧数FPS,但我不确定给出的 FPS 是否.h264正确。为什么它给出的总帧数为负数?这是一个错误吗?
PS:这个视频文件是我.h264用树莓派摄像头录制的( )。

小智 5

另一个解决方案是使用imageio,它适用于某些视频。

import imageio
filename="person15_walking_d1_uncomp.avi"
vid = imageio.get_reader(filename,  'ffmpeg')
# number of frames in video
num_frames=vid._meta['nframes']
Run Code Online (Sandbox Code Playgroud)


opt*_*ist 1

事实证明 OpenCV 不支持 h.264 格式(链接)。但是, Python OpenCV 文档中有关视频捕获的文档提到了 get 命令的整数参数。因此,您正确地使用 5 和 7 而不是 'CV_CAP_PROP_FRAME_COUNT'。您可以尝试将树莓派上的捕获格式更改为avi。