当前位置: 首页 > news >正文

利用ffmpeg cv2取h265码流视频(转换图片灰屏问题解决)

利用海康威视相机拍出来的视频是H265格式的,相比于常规的H264编码,压缩率更高,但因此如果直接用正常取流方法读取,会出现无法读取的情况

1. 如图h265码流取出图片为灰屏

 2 、解决灰屏问题

import subprocess
import cv2# 将h265流转换opencv可编译格式返回
def get_frame_from_rtsp(rtsp_url):# ( linux,windwos)  docker容器内部使用  两者兼容  当环境为linux时将传输协议改为tcp,否则转换失败 ( '-rtsp_transport', 'tcp')command = ['ffmpeg',#  rtsp_transport 参数,通过设定这个参数值为 tcp ,使得ffmpeg强制使用tcp协议传输RTSP流(RTSP流模式使用UDP方式传输)。'-rtsp_transport', 'tcp',# 设置探测大小,指定用于探测输入流的大小。在这里,150M 表示 150 兆字节的探测大小。'-analyzeduration', '150M','-probesize', '150M',# 指定输入文件(RTSP 流)的 URL。'-i', rtsp_url,'-vf', 'fps=1,scale=1920:1080',  # 设置帧率和图像大小# 指定输出格式为图像流。在这里,将输出格式设置为图像流,以便后续通过管道读取。'-f', 'image2pipe',# 设置像素格式为 BGR24。在这里,将像素格式设置为 24 位 BGR 格式,即每个像素占据 3 字节。'-pix_fmt', 'bgr24',# 设置视频编解码器为原始视频。 如果设置为264需要额外增添参数   '-vcodec', 'libx264''-vcodec', 'rawvideo', '-']process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)# 从 ffmpeg 进程中读取一帧数据raw_frame = process.stdout.read(1920 * 1080 * 3)if not raw_frame:return None# 将帧数据转换为 numpy 数组frame = np.frombuffer(raw_frame, dtype=np.uint8).reshape((1080, 1920, 3))return frameframe = get_frame_from_rtsp(path)if frame is not None:# FILE_SAVE_PATH保存路径地址  img_path = os.path.join(FILE_SAVE_PATH,'2023')cv2.imwrite(img_path, frame)  # 存储为图像
elseprint('无法获取到图像')

3、转换完成h265码流图片 

相关文章:

  • 亚马逊云科技-如何缩容/减小您的AWS EC2根卷大小-简明教程
  • git 分支管理命令及说明
  • 【C语言】6-6 数组循环右移 分数 20
  • 技术分享-Jenkins
  • C++ opencv RGB三通道提升亮度
  • Linux 一键部署TeamCity
  • 我的创作纪念日2048
  • c# 使用OpenCV
  • 【K8s】1# 使用kuboard-spray安装K8s集群
  • Java代码审计Mybatis注入文件上传下载读取(非常详细!!)
  • FFmpeg实现rtp推流
  • 黑豹程序员-安装docker-ce
  • 使用 Taro 开发鸿蒙原生应用 —— 探秘适配鸿蒙 ArkTS 的工作原理
  • linux搭建gitlab
  • 漫谈UNIX、Linux、UNIX-Like
  • 【comparator, comparable】小总结
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 2017前端实习生面试总结
  • Asm.js的简单介绍
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • happypack两次报错的问题
  • Java反射-动态类加载和重新加载
  • js如何打印object对象
  • Netty 4.1 源代码学习:线程模型
  • PHP的类修饰符与访问修饰符
  • Python中eval与exec的使用及区别
  • Selenium实战教程系列(二)---元素定位
  • 高程读书笔记 第六章 面向对象程序设计
  • 将回调地狱按在地上摩擦的Promise
  • 目录与文件属性:编写ls
  • 驱动程序原理
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 异步
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #数学建模# 线性规划问题的Matlab求解
  • #微信小程序(布局、渲染层基础知识)
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Python第六天)文件处理
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (四)图像的%2线性拉伸
  • (五)网络优化与超参数选择--九五小庞
  • (译)计算距离、方位和更多经纬度之间的点
  • (转) ns2/nam与nam实现相关的文件
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • ***详解账号泄露:全球约1亿用户已泄露
  • ..回顾17,展望18
  • .NET 回调、接口回调、 委托
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET应用架构设计:原则、模式与实践 目录预览