簡體   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