一、通过opencv
python
import random
import cv2
VideoPath = ''
vc = cv2.VideoCapture(VideoPath ) #读入视频文件
#获取视频文件总帧数,并产生在总帧数范围内的随机数
NumFrames = int(vc.get(cv2.CAP_PROP_FRAME_COUNT)) #获取视频的总帧数
n = random.randint(1,NumFrames) #生成1~总帧数范围内的一个随机整数
#按照随机数提取图像,并将图像存放到原视频存放路径,名字以视频文件名命名,后缀为'.jpg'格式
vc.set(cv2.CAP_PROP_POS_FRAMES, n) # 截取指定帧数
rval,frame = vc.read() # 分帧读取视频
cv2.imencode('.jpg',frame )[1].tofile('cv_img.jpg')
二、通过decord
python
import random
from decord import VideoReader, cpu
vr = VideoReader(video_path, ctx=cpu(0))
## 获取视频总帧数
NumFrames = vr._num_frame
n = random.randint(1,NumFrames)#生成1~总帧数范围内的一个随机整数
## 转成numpyg格式。读取的视频帧是RGB格式
frame = vr[index].asnumpy()
frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
save_path = os.path.join("img_decord.jpg")
cv2.imwrite(save_path, frame)
三、速度对比
速度为读取一帧图像耗时
方式 | 速度 |
---|---|
opencv | 0.8s |
decord | 0.2s |