使用 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() 方法,我們將影片時長從秒轉換為小時:分鐘:秒的格式。