读取视频指定帧的方式

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

相关推荐
纳祥科技18 小时前
NX3302,3进1出HDMI/DVI视频切换器芯片,兼容LT8631UX
单片机·嵌入式硬件·音视频
EasyGBS19 小时前
EasyGBS算法算力平台在智慧安防视频监控中的应用实践
音视频
Black蜡笔小新20 小时前
视频汇聚平台EasyCVR构筑智慧边防的全场景可视化监控体系
音视频
Black蜡笔小新20 小时前
视频融合平台EasyCVR的核心技术原理与应用实践解析
音视频
小小前端--可笑可笑21 小时前
【Three.js + MediaPipe】视频粒子特效:实时运动检测与人物分割技术详解
开发语言·前端·javascript·音视频·粒子特效
hoiii18721 小时前
使用C#实现文本转语音(TTS)及多音频合并
c#·音视频·语音识别
ViiTor_AI1 天前
2026 西班牙语音频转英文实战:AI 转录 + 翻译 + 配音完整流程
人工智能·音视频
西***63471 天前
打破部署桎梏!编码器两大核心架构(NVR/PoE)深度解析
服务器·音视频·视频编解码
5Gcamera1 天前
边缘计算视频分析智能AI盒子使用说明
人工智能·音视频·边缘计算
线束线缆组件品替网1 天前
IO Audio Technologies 音频线缆抗干扰与带宽设计要点
网络·人工智能·汽车·电脑·音视频·材料工程