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

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

前言


  相信大家在使用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()




相关文章
|
JavaScript Unix Linux
nvm 和 nvm-windows 介绍|学习笔记
快速学习 nvm 和 nvm-windows 介绍
nvm 和 nvm-windows 介绍|学习笔记
|
缓存 监控 计算机视觉
基于OpenCv的视频流处理方法
基于OpenCv的视频流处理方法
1813 0
|
编解码 算法 Ubuntu
Gstreamer 硬解码Rtsp流及代码实现
Gstreamer 硬解码Rtsp流及代码实现
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
4775 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
机器学习/深度学习 编解码 文字识别
【开源】轻松实现车牌检测与识别:yolov8+paddleocr【python源码+数据集】
【开源】轻松实现车牌检测与识别:yolov8+paddleocr【python源码+数据集】
|
文字识别 网络协议 开发工具
GitHub封锁?推荐5个国产的Git仓库替代平台
近日,GitHub对中国区IP的部分限制引发了广泛关注。未登录用户被拒,已登录用户功能受限,南北网络环境差异更显“内卷”。为应对这一挑战,本文推荐了多个国产Git平台:Gitee(码云)、GitCode(CSDN旗下)、CODING(腾讯系)、CodeUP(阿里云支持)及微信代码管理工具。这些平台功能全面、稳定性强,是开发者迁移项目的理想选择。通过同步代码、配置CI/CD流水线等简单步骤,可确保项目平稳过渡。此次事件提醒我们,掌握核心技能与支持国产平台同样重要!
16567 11
|
Java Python Windows
Python pip 源设置成国内源,阿里云源,清华大学源,最方便的方式,都在这里了
Python pip 源设置成国内源,阿里云源,清华大学源,最方便的方式,都在这里了
95935 1
|
API Android开发
autojs播放在线音乐的方法
用webview播放, 或者拦截跳转真实链接下载播放
1070 0
|
8月前
|
机器学习/深度学习 自然语言处理 监控
13_命名实体识别:精准提取文本中的关键信息
在当今信息爆炸的时代,人们每天需要处理海量文本数据。如何从这些非结构化文本中高效地提取关键信息,成为了自然语言处理(NLP)领域的核心挑战之一。命名实体识别(Named Entity Recognition,简称NER)技术正是解决这一问题的关键技术,它能够自动识别并分类文本中的人名、地名、组织机构名、时间、日期、金额等具有特定含义的实体。
2061 0