0%

Python - OpenCV - 截取视频某个时间点的一帧

0. 起因

最近在做一个短视频类的小程序,需要从用户上传的视频中截取封面图。因为有些用户喜欢用“名不副实”的封面来吸引人点进去,所以拟截取视频播放1秒时的一帧图片作为封面。

1. 安装OpenCV

1
pip install opencv-python

2. 代码实现:截取1秒时的一帧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import cv2

video_path = "/home/richard/oss_tmp/a.mp4"
cover_path = "/home/richard/oss_tmp/a_cover.jpg"

try:
vc = cv2.VideoCapture(video_path) # 读取视频
video_width = int(vc.get(cv2.CAP_PROP_FRAME_WIDTH)) # 视频宽度
video_height = int(vc.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 视频高度
vc.set(cv2.CAP_PROP_POS_MSEC, 1000) # 设置读取位置,1000毫秒
rval, frame = vc.read() # 读取当前帧,rval用于判断读取是否成功
if rval:
cv2.imwrite(cover_path, frame) # 将当前帧作为图片保存到 cover_path
else:
print("读取失败")
except Exception as e:
print(f"获取视频封面图失败: {e}")