使用OpenCV Python获取视频时长

使用OpenCV Python获取视频时长

OpenCV是一个开源的Python计算机视觉库。它提供了许多函数来执行各种图像和视频处理操作。该库使用Numpy模块将所有视频帧和图像表示为ndarray类型。我们需要安装numpy库,并确保在我们的Python解释器中也安装了numpy模块。

在本文中,我们将看到使用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_COUNTCAP_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()方法,将视频时长从秒转换为时:分:秒的形式。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程