繁体   English   中英

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

[英]How to process video files with python OpenCV faster than file frame rate?

我有视频文件,我试图一次处理一帧。 我尝试使用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

输出:每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

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

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

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

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

我还没有尝试过,但我认为它可以用于保存在机器上的有限长度的视频文件(即不是实时网络摄像头)。 只有可预见的缺点,算法“可能”跳过帧,如果它没有足够快地处理,但它可能只是不读取下一帧。 我认为一般来说,VideoCapture读取速度比FPS慢,但读取速度不快。 不要引用我,但它是我认为我注意到的东西。

使用VideoCapture :: set()将FPS更改为比计算机上的文件更快的速度。 CV_CAP_PROP_FPS是您要更改的内容。

使用VideoCapture :: get()函数验证fps是否已正确设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM