使用 OpenCV Python 獲取影片時長
OpenCV 是一個基於 Python 的開源計算機視覺庫。它提供了許多函式來執行各種影像和影片處理操作。該庫使用 Numpy 模組將所有影片幀和影像表示為 ndarray 型別。它需要 numpy 庫,我們需要確保 numpy 模組也安裝在我們的 Python 直譯器中。
在本文中,我們將瞭解使用 Python OpenCV 模組獲取影片時長的不同方法。
OpenCV 提供了一個 **VideoCapture.get()** 方法,透過傳遞屬性識別符號標誌之一來獲取影片的指定屬性。以下是 get() 方法的語法 -
VideoCapture.get(propId)
其中 **propId** 是屬性識別符號。以下是幾個屬性識別符號的列表 -
**CAP_PROP_FRAME_COUNT**: 此標誌提供影片檔案中幀數的屬性。
**CAP_PROP_FPS**: 這將給出幀率。(FPS 代表每秒幀數)。
**CAP_PROP_POS_MSEC**: 影片檔案當前位置(以毫秒為單位)或影片捕獲時間戳。
**CAP_PROP_FRAME_WIDTH**: 這將給出影片流中幀的寬度。
**CAP_PROP_FRAME_HEIGHT**: 這將給出影片流中幀的高度。
在這裡,我們將使用 **CAP_PROP_FRAME_COUNT** 和 **CAP_PROP_FPS** 標誌來獲取影片的時長。
方法
使用 cv2.VideoCapture() 載入影片。
使用 cv2.CAP_PROP_FPS 屬性獲取每秒幀數。
並使用 cv2.CAP_PROP_FRAME_COUNT 屬性獲取總幀數。
透過將(總幀數)/(每秒幀數)計算時長(以秒為單位)。
將總時長(以秒為單位)轉換為所需的格式。
以下時長為 01:05 的輸入影片將用於使用 OpenCV Python 獲取不同格式的時長。
示例
在此示例中,我們將僅獲取影片時長(以秒為單位)。
import cv2
# create video capture object
cap = cv2.VideoCapture('Videos/One min video.mov')
# count the number of frames
fps = cap.get(cv2.CAP_PROP_FPS)
totalNoFrames = cap.get(cv2.CAP_PROP_FRAME_COUNT)
durationInSeconds = totalNoFrames // fps
print("Video Duration In Seconds:", durationInSeconds, "s")
輸出
Video Duration In Seconds: 65.0 s
示例
在此示例中,我們將找到影片時長(以分鐘和秒為單位)。
import cv2
def get_dur(filename):
video = cv2.VideoCapture(filename)
fps = video.get(cv2.CAP_PROP_FPS)
frame_count = video.get(cv2.CAP_PROP_FRAME_COUNT)
seconds = frame_count / fps
minutes = int(seconds / 60)
rem_sec = int(seconds % 60)
return f"{minutes}:{rem_sec}"
print('Video Duration In Seconds:',get_dur("Videos/One min video.mov"))
輸出
Video Duration In Seconds: 1:5
示例
這裡,我們將使用 datetime 模組計算影片時長,而不是手動將時長從秒轉換為分鐘。
import datetime
def get_dur(filename):
video = cv2.VideoCapture(filename)
fps = video.get(cv2.CAP_PROP_FPS)
frame_count = video.get(cv2.CAP_PROP_FRAME_COUNT)
seconds = frame_count // fps
video_time = datetime.timedelta(seconds=seconds)
return video_time
print('Video Duration In Seconds:',get_dur("Videos/One min video.mov"))
輸出
Video Duration In Seconds: 0:01:05
最初,我們透過減去總幀數和 fps(每秒幀數)來計算影片時長(以秒為單位)。然後,使用 timedelta() 方法,我們將影片時長從秒轉換為小時:分鐘:秒的格式。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP