读取视频指定帧的方式

一、通过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

四、参考链接

decord的github链接

相关推荐
runing_an_min5 小时前
ffmpeg视频滤镜:添加边框-drawbox
ffmpeg·音视频·边框·drawbox
wang_chao1187 小时前
FFMPEG+Qt 实时显示本机USB摄像头1080p画面以及同步录制mp4视频
qt·ffmpeg·音视频
EasyCVR9 小时前
宇视设备视频平台EasyCVR视频融合平台果园/鱼塘/养殖场/菜园有电没网视频监控方案
科技·音视频·视频监控·监控视频接入
ZPeng_csdn13 小时前
视频协议与封装格式
音视频
ai产品老杨13 小时前
深度学习模型量化原理
开发语言·人工智能·python·深度学习·安全·音视频
runing_an_min14 小时前
ffmpeg视频滤镜:网格-drawgrid
ffmpeg·音视频·网格·drawgrid
北京同三维影音设备20 小时前
同三维TK101控制键盘连接和使用视频说明书:控制键盘
计算机外设·音视频
爱莉希雅&&&1 天前
web前端多媒体标签设置(图片,视频,音频)以及图片热区(usemap)的设置
音视频
cuijiecheng20181 天前
音视频入门基础:AAC专题(12)——FFmpeg源码中,解码AudioSpecificConfig的实现
ffmpeg·音视频·aac
AirDroid_cn1 天前
iQOO手机怎样将屏幕投射到MacBook?可以同步音频吗?
ios·智能手机·音视频·iphone·ipad·投屏·手机投屏