使用 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+ 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告