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

更新於: 2023年5月31日

6K+ 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告