我正在尝试使用python中的openCV读取视频文件。我使用一个简单的测试来检查是否有返回的帧:
vid = cv.VideoCapture(video_path)
ok, image = vid.read()
if not ok:
break
好吧,直到我发现一些视频在读取视频中间的某些帧时遇到一些困难为止,这似乎还不错。例如,我可以使用imageio
来阅读相同的视频,所以我猜有一种阅读方法。我使用以下方法计算了“损坏的”帧的数量:
for video_path in videos_list:
vid = cv.VideoCapture(video_path)
fr = 1
counter = 0
max_corrupted_frames = 20
while True:
ok, image = vid.read()
if not ok:
counter += 1
else:
if counter:
print('{} consecutive frames were not able to be read before frame {} in video {}'.format(
counter, fr, video_path))
counter = 0
if counter > max_corrupted_frames:
break
fr += 1
在我的情况下介于1和4之间。使用更大的阈值,我可以确定视频是否已结束,或者在读取帧时遇到一些麻烦,但是这种方法似乎容易出错。
因此,出现了几个问题:
cap.isOpened()
出于某种原因对我不起作用)?imageio
却不能?框架看起来很正常(使用imageio
提取时)。如果正在使用python 3.5.2,我正在Ubuntu 16.04中使用openCV 3.4.1,