Python openCV最大视频持续时间

2024-06-30 08:47:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用openCV(用2.4和3测试)和python2.7阅读AVI视频时遇到了一些问题。视频的持续时间约为20分钟。在

在一定数量的帧之后,我得到一个空帧和一个假标志,表示该帧无法读取。我读取帧的方式是使用“CAP_PROP_POS_FRAMES”或“CAP_PROP_POS_MSEC”设置帧编号。 但是,当我用任何其他播放器(VLC、Windows Media player)打开视频时,它可以播放整个持续时间。在

如上所述,opencv2.4.11和3.0.0-rc1都会出现问题。在

我运行了一个测试,在那里我读取帧直到发生上述情况,都使用时间和帧编号设置帧。结果如下。在

密码在这里

pathname = "C:\\videos"

# get all videofiles
videofiles = [file for file in os.listdir(os.path.join(pathname)) if file.endswith(".avi")]

nofalse = 0
v = 0
for vf in videofiles[1:]:
    v += 1

    # Test using frame number for seeking to frame
    # Open video file
    cap = cv2.VideoCapture(os.path.join(pathname, vf))
    totalnoframes = cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT)
    frange = np.arange(0, totalnoframes, 100)
    for f in frange:
        cap.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, f)
        ret, frame = cap.read()
        if ret is False:
            break
    # close video file
    cap.release()

    # Test using time for seeking to frame
    # Open video file
    cap = cv2.VideoCapture(os.path.join(pathname, vf))
    totalnoframes = cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT)
    totaldurationMS = 1000*totalnoframes/cap.get(cv2.cv.CV_CAP_PROP_FPS)
    trange = np.linspace(0, totaldurationMS, totalnoframes)[::100]
    for t in trange:
        cap.set(cv2.cv.CV_CAP_PROP_POS_MSEC, t)
        ret, frame = cap.read()
        if ret is False:
            break
    cap.release()

    # print results
    vf = "Video %1.0f" % v
    print "%s:\t%1.0f\t%1.2f\t%1.0f\t%1.2f" % (vf, t, t/np.float(totaldurationMS), f, f/np.float(totalnoframes))

结果就在这里。 第一个数字列是最后一个以毫秒为单位的可读帧,第二个列显示使用时间读取的总帧的速率,第三个列是数字中的最后一个读取帧,以及读取帧的速率。在

似乎最高帧数限制在14000帧左右,并且没有总帧数较少的视频在读取帧时显示相同的限制。在

有人知道为什么会这样吗?我花了好几天的时间想弄明白这一点,运气不好。非常感谢任何帮助!在

谢谢你!在

视频1:940046 0.69 14100 0.69

视频2:980045 0.68 14700 0.68

视频3:973372 0.59 14600 0.59

视频4:940047 0.70 14100 0.70

视频5:953370 0.54 14300 0.54

视频6:940063 0.95 14100 0.95

视频7:506733 0.99 7600.99

视频8:1040047 0.70 15600 0.70

视频9:806733 1.00 12100 1.00

视频10:940056 0.85 14100 0.85

视频11:620066 0.99 9300 0.99

视频12:880066 0.99 13200 0.99

视频13:953371 0.56 14300 0.56

视频14:1026727 0.90 15400 0.90


Tags: posforget视频cv2framecvfile