【问题标题】:Counting the Number of Frames in a Video file using OpenCV?使用 OpenCV 计算视频文件中的帧数?
【发布时间】:2015-04-14 03:53:14
【问题描述】:

我正在尝试计算我的视频文件 ('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

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

>>> cap = cv2.VideoCapture('foo.avi')
>>> cap.get(5)
29.97002997002997
>>> cap.get(7)
256379.0

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

【问题讨论】:

标签: python opencv


【解决方案1】:

另一种解决方案是使用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']

【讨论】:

  • 更一致的解决方案是使用meta_data = vid.get_meta_data(); num_frames = meta_data['nframes']
【解决方案2】:

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

【讨论】:

  • 是的 .h264 只是 NAL 流,不包含有关帧率的信息。现在,当我将视频包装在 .mp4 之类的容器中时,我能够计算总帧数。但是新视频的帧率为 25fps,这是错误的。但是从总帧数和持续时间我可以计算出真正的帧率。
猜你喜欢
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 2019-08-06
  • 2015-08-28
  • 1970-01-01
相关资源
最近更新 更多