首页 > 解决方案 > 使用opencv区分损坏的帧和视频结尾

问题描述

我正在尝试在 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 之间。使用更大的阈值,我可以确定视频是否已经结束,或者我只是在读取帧时遇到了一些问题,但它似乎很容易出错。

因此,出现了几个问题:

我在 Ubuntu 16.04 中使用 openCV 3.4.1 和 python 3.5.2,如果这有什么不同的话。

标签: pythonopencv

解决方案


推荐阅读