读取视频指定帧的方式

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

相关推荐
LNTON羚通4 小时前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
小屁孩大帅-杨一凡8 小时前
Python-flet实现个人视频播放器
开发语言·python·音视频
EasyCVR11 小时前
私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
大数据·网络·音视频·h.265
天空中的野鸟11 小时前
Android音频采集
android·音视频
计算机毕设孵化场12 小时前
计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)
java·spring boot·计算机外设·音视频·课程设计·高校网上缴费综合务系统视频·计算机毕设ppt
简鹿办公19 小时前
如何提取某站 MV 视频中的音乐为 MP3 音频
音视频·简鹿视频格式转换器·视频提取mp3音频
yufengxinpian19 小时前
集成了高性能ARM Cortex-M0+处理器的一款SimpleLink 2.4 GHz无线模块-RF-BM-2340B1
单片机·嵌入式硬件·音视频·智能硬件
runing_an_min21 小时前
ffmpeg视频滤镜:替换部分帧-freezeframes
ffmpeg·音视频·freezeframes
runing_an_min1 天前
ffmpeg视频滤镜:提取缩略图-framestep
ffmpeg·音视频·framestep
小曲曲1 天前
接口上传视频和oss直传视频到阿里云组件
javascript·阿里云·音视频