import os
import cv2
path='/home/nlpr4/video-data/UCF-101/GolfSwing/v_GolfSwing_g24_c06.avi'
cap=cv2.VideoCapture(path)
video_length=int(cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT))
success=True
count=0
while success:
success,image=cap.read()
if success==False:
break
count=count+1
print video_length,count
输出:
149
146
为什么两个数字不同? 怎么了?
请尝试以下代码:
在我的机器上它给了我:
CAP_PROP_FRAME_COUNT
的get()永远不应该是准确的!如果你检查了opencv的源代码。你可以找到这个:这意味着它将首先查看流头中的
nb_frames
,您可以使用ffprobe检查它。如果没有这样的字段,那么没有比直接解码视频更好的方法来获得帧号。opencv通过get_duration_sec() * get_fps() + 0.5
做了一个粗略的估计,这肯定不意味着准确性。因此,要获得正确的帧号,您必须解码并读取整个流,或者您必须要求视频生成器使用
nb_frames
字段生成正确的流头。^{} 提供来自视频头的“帧数”属性。另一个数字基本上是“我能从这个视频文件中读取多少帧?”。
如果您无法读取/解码帧,则您的代码将停止计数。最终会产生不同的数字。例如,这可能是因为损坏的帧。
此外,如果您的视频头已损坏和/或无法被OpenCV使用的底层编解码器解析,那么这些数字也可能不同。
相关问题 更多 >
编程相关推荐