Python openCV最长视频时长

时间:2015-05-23 19:35:47

标签: python opencv video set frame

使用openCV(使用2.4和3测试)和Python 2.7阅读AVI视频的整个持续时间时遇到了一些麻烦。视频的持续时间约为20分钟。

在一定数量的帧之后,我得到一个空帧和一个错误标志,意味着无法读取帧。我正在读取帧的方法是使用“CAP_PROP_POS_FRAMES”或“CAP_PROP_POS_MSEC”设置帧编号。 但是,当我与任何其他播放器(VLC,Windows Media Player)打开视频时,它会在整个持续时间内正常播放。

如上所述,openCV 2.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 0.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

0 个答案:

没有答案