使用 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