簡體   English   中英

如何使用OpenCV Python更改現有視頻的幀速率FPS

[英]How to change frame rate FPS of an existing video using openCV python

我正在嘗試使用python中的openCV庫更改幀率,即現有視頻的FPS。 以下是我嘗試執行的代碼。 即使在使用cv2.CAP_PROP_FPS設置了FPS屬性之后,在cv2.imshow()方法中視頻的播放速度也不快。 即使在設置了FPS屬性之后,getter也會返回較早的FPS值。 那么,如何將FPS值設置得更高,並使視頻播放更快?

使用的版本: python = 3.7.4和opencv-python-4.1.0.25

import cv2

video = cv2.VideoCapture("yourVideoPath.mp4");
video.set(cv2.CAP_PROP_FPS, int(60))

if __name__ == '__main__':
    print("Frame rate : {0}".format(video.get(cv2.CAP_PROP_FPS)))
    while video.isOpened():
        ret1, frame2 = video.read()
        cv2.imshow("Changed", frame2)

        if cv2.waitKey(10) & 0xFF == ord('q'):  # press q to quit
            break

video.release()
cv2.destroyAllWindows()

如果只想在顯示的窗口中播放視頻,則限制因素不是視頻的fps,而是代碼waitKey(10)等待的時間,該代碼使程序在每幀之間等待10毫秒。

VideoCapture類的read()方法僅返回下一幀,而沒有等待或幀速率的概念。 阻止此代碼盡快運行的唯一方法是waitKey(10)節,這是決定速度的主要因素。 要更改通過imshow()方法看到的幀速率,您需要編輯等待的時間。 這可能是主要因素,但不是唯一因素,因為讀取一幀確實需要時間。

如果您實際上是在嘗試更改現有文件的播放速率並將其保存到該文件中,那么我不確定OpenCV是否真正支持此播放速率,並且我想這取決於您使用的后端-OpenCV實現VideoCapture類使用不同的第三方后端。.根據VideoCapture.set()的文檔,我將調查video.set(cv2.CAP_PROP_FPS, int(60))的返回值,因為該文檔建議如果以下情況將返回true這改變了一些東西。

作為替代方案,您可以研究使用類似FFMPEG的工具, 該工具相對容易地支持此功能 如果您想堅持使用OpenCV,根據我的經驗,您可以使用VideoWriter類來做到這一點。 在這種方法中,您將使用VideoCapture類逐幀讀取視頻,然后使用VideoWriter以所需的幀速率保存它。 我懷疑FFMPEG可能會滿足您的需求!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM