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

警告:OPENCV_FFMPEG_READ_ATTEMPTS (current value is 4096)

错误:

[ WARN:0@38.425] global cap_ffmpeg_impl.hpp:1599 grabFrame packet read max attempts exceeded, if your video have multiple streams (video, audio) try to increase attempt limit by setting environment variable OPENCV_FFMPEG_READ_ATTEMPTS (current value is 4096)
在这里插入图片描述

环境:

运行代码到#A处时报警告。

# 创建一个VideoCapture对象
cap = cv2.VideoCapture('path_to_video.mp4')# 检查是否成功打开视频文件
if not cap.isOpened():print("Error: Could not open video.")exit()# 获取视频的帧率和分辨率
fps = cap.get(cv2.CAP_PROP_FPS)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 创建一个VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output_video.avi', fourcc, fps, (width, height), isColor=False)# 逐帧读取视频
while cap.isOpened():ret, frame = cap.read()if not ret:break# 将当前帧转换为灰度图像gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 对灰度图像进行高斯模糊处理blurred_frame = cv2.GaussianBlur(gray_frame, (15, 15), 0)# 写入处理后的帧out.write(blurred_frame)# 显示处理后的帧cv2.imshow('Processed Frame', blurred_frame)# 按'q'键退出循环if cv2.waitKey(25) & 0xFF == ord('q'):break
#A 执行到此处报警告错误!!!
# 释放VideoCapture和VideoWriter对象
cap.release()
out.release()
cv2.destroyAllWindows()

原因:

这个警告的核心是:OpenCV 的 FFmpeg 模块在读取视频数据包时,尝试了太多次都失败了。
多流视频文件:你的视频文件很可能不仅包含一个视频流,还包含其他流(最常见的是音频流,也可能有字幕流等)。OpenCV 是一个计算机视觉库,它主要关心视频流。当它尝试读取一帧视频时,它会遍历文件中的数据包,寻找属于视频流的数据包。

“脏”数据包:在遍历过程中,它会遇到很多不属于视频流的数据包(比如音频包)。OpenCV 会跳过这些包,继续寻找下一个,直到找到视频包或达到最大尝试次数。

尝试次数上限:为了防止在损坏的文件或纯音频文件中陷入无限循环,OpenCV 设置了一个最大尝试次数(默认为 4096 次)。如果你的视频文件中,在两个视频数据包之间夹着非常非常多的音频数据包(超过了 4096 个),OpenCV 就会放弃寻找,抛出这个警告。

简单来说: OpenCV 想从一堆数据包里捡出视频包,但连续捡了4096个都是音频包,它觉得“这不对劲”,于是发出警告,但通常会继续尝试处理下一个数据块。

解决方法:

1.检查opencv是否正确安装。

pkg-config --modversion opencv4

正常的会输出version。
2.如提示没安装,则执行下列代码安装,Macos使用brew安装命令,其他系统自行搜索安装命令。

brew install opencv

如果很慢,换成国内源(阿里,清华,中科大…),或者执行科学上网方法。

如果方法一无效,或者你想从根本上解决问题,可以重新编码你的视频文件,移除不需要的音频流(或者其他非视频流)。这样 OpenCV 读取时就只会遇到视频数据包,不会再触发这个限制。

使用强大的 FFmpeg 工具(OpenCV 底层也是用它)可以轻松完成:

# 这个命令会移除音频流(-an),并将视频流直接流拷贝(-c:v copy,不重新编码,速度极快)
ffmpeg -i input_video.mp4 -an -c:v copy output_video_no_audio.mp4
-i input_video.mp4: 指定输入文件。

-an: 禁用音频录制(即移除音频流)。
-c:v copy: 设置视频编码器为 “copy”,意思是直接复制流,不进行重新编码,速度快且无损。
output_video_no_audio.mp4: 输出文件名。

处理后的 output_video_no_audio.mp4 文件再交给 OpenCV 处理,这个警告就绝对不会出现了。
再去执行就不报警告了。
在这里插入图片描述

http://www.xdnf.cn/news/19416.html

相关文章:

  • flume接收处理器:构建高可用与高性能的数据链路
  • AR-LSAT 推理任务全解析:从逻辑推理到类比推理的挑战
  • Fabarta个人专属智能体赋能媒体:从过载信息到深度可控的创作体系
  • Claude AI 因编写勒索软件和开展勒索活动而被滥用
  • java基础1
  • DevExpress WinForms中文教程:Data Grid - 过滤编辑器
  • 【机器学习学习笔记】pandas基础
  • matlab-神经网络的语音识别
  • SHELL命令pr
  • 【C++】 Vector容器操作全解析
  • OpenHarmony智能语音框架深度拆解:从VAD到唤醒词打造你的AI语音智能体
  • 第8篇c++Expression: (L“Buffer is too small“ 0
  • 20.30 QLoRA微调终极指南:Hugging Face参数优化实战,24GB显存直降50%性能不减
  • 【JavaScript】async/await 与 Fetch 传参,PUT,PATCH,文件上传,批量删除等前端案例
  • 二、Git基础命令速查表
  • Goframe 框架下HTTP反向代理并支持MCP所需的SSE协议的实现
  • leetcode算法刷题的第二十三天
  • Windows Qt5.15.17源码使用VS2019编译安装
  • Linux自动化构建工具-make/Makefile
  • C#/.NET/.NET Core技术前沿周刊 | 第 52 期(2025年8.25-8.31)
  • 【论文精读】基于YOLOv3算法的高速公路火灾检测
  • Jenkins 自动构建Vue 项目的一个大坑
  • 计算机毕设选题:基于Python+Django的健康饮食管理系统设计【源码+文档+调试】
  • 【LeetCode 155】—最小栈 - 详解与实现
  • Apache Commons ConvertUtils
  • 电科金仓 KFS 场景化实践路径解析:从行业场景落地看技术价值转化
  • Redis面试重点-2
  • std::thread详解
  • JDK14安装步骤及下载(附小白详细教程)
  • 在Unity中,让子物体不随父物体移动或转动的方法!