使用 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() 方法,我们将视频时长从秒转换为小时:分钟:秒的格式。