使用跳帧解码解决视频流或高帧视频处理缓慢过程

简介: 使用跳帧解码解决视频流或高帧视频处理缓慢过程

前言


  相信大家在使用cv2读取视频流的过程中一定遇到过读取缓慢的问题(或者在处理高帧视频时变的缓慢),为了研究如何解决这一问题研究了下opencv文档,今天为大家带来一个小notes,能优化 卡顿和花屏&灰屏。




分析原因


  由于opencv是默认为自带的ffmpeg进行解码播放视频,在使用单独的使用ffmpeg进行播放视频时发现与opencv的差异:


  1. opencv进行连接后播放的视频画面是从cv2读取视频流时进行播放的


  1. ffmpeg在碰到视频流连接不顺畅会跳到实时状态的画面,不会进行读取缓冲区的画面


  查阅opencv文档中发现ret, frame = cap.read()中的read函数是包含了两大步骤:从缓冲区拿出数据 + 对数据进行解码


  当我们无法解决视频流自身的问题的时候,可以从读取视频流这里做文章。细分从缓冲区拿数据和解码这两个过程,显而易见的是解码的过程较为耗费时间。 针对这一问题我们可以在保证不影响性能的前提下牺牲部分帧加速视频处理过程,采用cap.grab() 和  cap.retrieve() 分别进行跳帧和解码替代cap.read()



解决


  例如视频的帧率是30,在不影响对下游任务的影响的前提下,我们可以进行跳帧处理。每处理一帧后跳过下一帧,对下下帧进行读取解码工作


import cv2
cap = cv2.VideoCapture(0)
idx = 0
freq = 2
while True:
    idx += 1
    ret = cap.grab()
    if not ret:
        break
    if idx % freq == 1:
        ret, frame = cap.retrieve()
        if frame is None:  
            break
        cv2.imshow("video", frame)
        c = cv2.waitKey(1) & 0xff
        if c == 27:
            cap.release()
            break
cap.release()




相关文章
|
8天前
|
存储 算法 C++
深入理解ffmpeg视频播放以及音视频同步:时间基与样本处理
深入理解ffmpeg视频播放以及音视频同步:时间基与样本处理
99 1
|
8天前
Audacity 软件对音频降噪的工作原理
Audacity 软件对音频降噪的工作原理
9 0
|
8天前
|
存储 编解码 API
【视频花屏问题】解码天书:深入理解视频流花屏现象及其解决方案
【视频花屏问题】解码天书:深入理解视频流花屏现象及其解决方案
115 5
|
8天前
|
编解码 API 数据处理
【摄像头数据处理】摄像头数据处理:使用FFmpeg合并、编码和封装视频流
【摄像头数据处理】摄像头数据处理:使用FFmpeg合并、编码和封装视频流
67 0
|
8天前
|
存储 编解码 缓存
【ffmpeg 移动视频流位置】深入理解FFmpeg:精细探讨seek操作和编解码上下文
【ffmpeg 移动视频流位置】深入理解FFmpeg:精细探讨seek操作和编解码上下文
71 0
|
8月前
|
机器学习/深度学习 传感器 算法
【视频处理】通过调用图像来重建新影片及计算颜色通道的平均灰度值,并检测帧与前一帧之间的差异(Matlab代码实现)
【视频处理】通过调用图像来重建新影片及计算颜色通道的平均灰度值,并检测帧与前一帧之间的差异(Matlab代码实现)
|
9月前
|
存储 编解码
ffmpeg CBR精准码流控制三个步骤
ffmpeg CBR精准码流控制三个步骤
308 0
|
存储 SQL 关系型数据库
多进程截取海康相机视频帧存储
多进程截取海康相机视频帧存储
245 0
|
存储 SQL 数据库
从海康摄像机上读取RTSP视频流并存储当前帧到本地
从海康摄像机上读取RTSP视频流并存储当前帧到本地
2171 0

热门文章

最新文章