如何使用python OpenCV处理视频文件的速度比文件帧速率快?

Juh*_*älä 7 python opencv video-processing

我有视频文件,我试图一次处理一帧.我尝试使用VideoCapture类进行以下类型的代码阅读.问题是如果以25帧/秒的速度录制视频文件,则读取速度相同.如何像我的电脑一样快速地获取帧可以解码它们?

我计划处理视频流,然后将其存储到文件中.

import cv2
import sys
import time

cap = cv2.VideoCapture(sys.argv[1])
start = time.time()

counter = 0
while True:
    counter += 1;
    image = cap.read()[1]
    if counter %25 == 0:
        print "time", time.time() - start
Run Code Online (Sandbox Code Playgroud)

输出:每25帧打印一次时间戳.注意时间戳在每一行上几乎完全改变1秒=>程序处理大约每秒25帧.这与视频文件是25帧/秒.

time 1.25219297409
time 2.25236606598
time 3.25211691856
time 4.25237703323
time 5.25236296654
time 6.25234603882
time 7.252161026
time 8.25258207321
time 9.25195503235
time 10.2523479462
Run Code Online (Sandbox Code Playgroud)

可能VideoCapture是这种工作的错误API,但是使用什么呢?

使用Linux,Fedora 20,opencv-python 2.4.7和python 2.7.5.

jon*_*new 8

cv::VideoCapture >> image如果在没有 ffmpeg支持的情况下编译opencv,我可以重现您描述的行为(即锁定到录制视频的帧速率).如果我使用 ffmpeg支持编译opencv ,我可以像我的计算机允许的那样快速地从文件中读取图像.我认为在没有ffmpeg的情况下,opencv使用gstreamer并且基本上将视频文件视为播放电影.

如果您使用的是Linux,此链接会显示您必须安装哪些软件包才能获得对opencv的ffmpeg支持.