读取视频指定帧的方式

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

相关推荐
A向前奔跑28 分钟前
前端实现实现视频播放的方案和面试问题
前端·音视频
TEL189246224773 小时前
IT66612:1对2 HDMI主动分配器,配备EDID RAM和嵌入式MCU
音视频·实时音视频·视频编解码
9527华安6 小时前
Artix7系列FPGA实现SDI视频解码转CameraLink,基于GTP高速收发器+OSERDES2原语架构,提供2套工程源码和技术支持
fpga开发·架构·音视频
Black蜡笔小新11 小时前
视频汇聚平台EasyCVR赋能加油站安防构建全场景视频监控体系
音视频
MediaTea11 小时前
Python 库手册:wave WAV 音频读写工具
开发语言·python·音视频
EasyDSS11 小时前
视频推流平台EasyDSS无人机推流直播技术在智慧消防场景中的应用
音视频·无人机
八月的雨季 最後的冰吻12 小时前
FFmepg-- 39-ffplay源码-ffplay 播放器中视频输出和尺寸变换
c++·音视频
ZEGO即构开发者12 小时前
uni-app 集成音视频 SDK 全攻略:30 分钟搭建跨端视频通话功能
uni-app·音视频·视频通话功能
简鹿视频14 小时前
avi如何转wmv?avi格式转换wmv格式技巧
windows·microsoft·音视频
Black蜡笔小新15 小时前
视频融合平台EasyCVR智慧农田可视化视频监控解决方案
音视频