读取视频指定帧的方式

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

相关推荐
Android系统攻城狮23 分钟前
Android16音频之写数据AudioTrack.write:用法实例(一百二十七)
音视频·android16·音频进阶
八月的雨季 最後的冰吻39 分钟前
FFmepg-- 30-ffplay源码解析-read_thread 的引用计数
ffmpeg·音视频
EasyCVR1 小时前
视频融合平台EasyCVR:构建智慧货运汽车安全监控与管理新体系
大数据·汽车·音视频
BruceWooCoder2 小时前
从零打造云端AI视频生成服务:基于CogVideoX和MCP协议的完整实践
人工智能·音视频
ManFresh2 小时前
多通道音频采集与编码处理系统技术报告——从硬件选型到语音算法实现与应用优化
音视频
500842 小时前
鸿蒙 Flutter 插件二次开发:基于开源插件(如 flutter_downloader)适配鸿蒙【实战指南】
flutter·华为·electron·开源·音视频·开源鸿蒙
赖small强2 小时前
【音视频开发】图像处理单元 (IPU) 深度技术解析指南
图像处理·音视频·isp·ipu
vfvfb18 小时前
合并音频 声音合并 多个音频wav合并成一个
音视频·音频合并
AI巨人20 小时前
“PR插件:轻松减少50%素材寻找时间,内置丰富素材,提升视频制作效率
人工智能·音视频·语音识别
Likeadust21 小时前
视频推流平台EasyDSS无人机推流直播技术赋能城市可视化管理
音视频·无人机