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

news/2025/2/15 23:25:37/

利用海康威视相机拍出来的视频是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码流图片 


http://www.ppmy.cn/news/1277885.html

相关文章

【自学笔记】Python测试框架pytest

文章目录 📖 介绍 📖🏡 环境 🏡📒 使用方法 📒📝 安装📝 编写测试函数⚓️ 相关链接 ⚓️📖 介绍 📖 pytest 是一个广泛使用的 Python 测试框架,它提供了简单、灵活和可扩展的测试功能。通过 pytest,您可以轻松地创建和运行单元测试、集成测试和功能测试…

leetCode算法—13. 罗马数字转整数

13. 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII &#…

c# 使用OpenCV

C#和OpenCV的结合主要通过一个名为OpenCVSharp的库实现。OpenCVSharp是一个C#包装器,它提供了对OpenCV(一个开源的计算机视觉和机器学习库)功能的访问。 安装OpenCVSharp NuGet包: 在Visual Studio中,右键点击你的项目…

基于ssm房屋租赁平台的设计与开发论文

摘 要 目前对于在外的人员来说租赁房屋是最基本的问题。对于房屋的租赁可以选择直接找房东、找专业的房屋租赁公司和自己在网上找房屋。自己找房东的问题在于需要时间,而且对于需要提前租赁房屋的需要多次跑到小区,找中介租赁房屋的问题在于费用问题&am…

流量卡寄出后又不想要了,这种情况该怎么退货呢?

买的东西又不想要了,该怎么办呢?有些朋友私信小编,趁自己在网上申请的流量卡又不想要了,但是快递却在运输中这种该怎么办呢? ​  对于运输中的快递,我们可以这么操作: 快递已经在路上&#x…

数字滤波器的设计

一般滤波器可以分为经典滤波器和数字滤波器。 经典滤波器:假定输入信号中的有用成分和希望去除的成分各自占有不同的频带。如果信号和噪声的频谱相互重迭,经典滤波器无能为力。比如 FIR 和 IIR 滤波器等。  现代滤波器:从含有噪声的时间序…

vi和vim的区别

目录 一、前言 二、vi/vim 的介绍 三、Vi/Vim 常见指令 四、vi和vim的区别 一、前言 写这篇文章的目的,是为了告诉大家我们如果要在终端下对文本进行编辑和修改可以使用vim编辑器。 Ubuntu 自带了 VI 编辑器,但是 VI 编辑器对于习惯了 Windows 下进…

R语言【cli】——通过cli_abort用 cli 格式的内容显示错误、警告或信息,内部调用cli_bullets和inline-makeup

cli_abort(message,...,call .envir,.envir parent.frame(),.frame .envir ) 先从那些不需要下大力气理解的参数入手: 参数【.envir】:进行万能表达式编译的环境。 参数【.frame】:抛出上下文。默认用于参数【.trace_bottom】&#xff…