警告: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) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9d109480b8494a1092b11b72afb44f9f.png) ## 环境: 运行代码到#A处时报警告。 ```python # 创建一个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是否正确安装。 ```bash pkg-config --modversion opencv4 ``` 正常的会输出version。 2.如提示没安装,则执行下列代码安装,Macos使用brew安装命令,其他系统自行搜索安装命令。 ```bash brew install opencv ``` 如果很慢,换成国内源(阿里,清华,中科大...),或者执行科学上网方法。 如果方法一无效,或者你想从根本上解决问题,可以重新编码你的视频文件,移除不需要的音频流(或者其他非视频流)。这样 OpenCV 读取时就只会遇到视频数据包,不会再触发这个限制。 使用强大的 FFmpeg 工具(OpenCV 底层也是用它)可以轻松完成: ```bash # 这个命令会移除音频流(-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 处理,这个警告就绝对不会出现了。 再去执行就不报警告了。 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e59705db748a434582ead187ae531b2b.png)

相关推荐
测试_AI_一辰1 小时前
AI测试工程笔记 05:AI评测实践(从数据集到自动评测闭环)
人工智能·笔记·功能测试·自动化·ai编程
云境筑桃源哇2 小时前
海洋ALFA:主权与创新的交响,开启AI生态新纪元
人工智能
liliangcsdn2 小时前
LLM复杂数值的提取计算场景示例
人工智能·python
小和尚同志3 小时前
OpenCodeUI 让你随时随地 AI Coding
人工智能·aigc·ai编程
AI视觉网奇3 小时前
2d 数字人解决方案-待机动作
人工智能·计算机视觉
人工智能AI酱3 小时前
【AI深究】逻辑回归(Logistic Regression)全网最详细全流程详解与案例(附大量Python代码演示)| 数学原理、案例流程、代码演示及结果解读 | 决策边界、正则化、优缺点及工程建议
人工智能·python·算法·机器学习·ai·逻辑回归·正则化
爱喝可乐的老王3 小时前
机器学习监督学习模型--逻辑回归
人工智能·机器学习·逻辑回归
Ao0000003 小时前
机器学习——逻辑回归
人工智能·机器学习·逻辑回归
智算菩萨3 小时前
【How Far Are We From AGI】3 AGI的边界扩张——数字、物理与智能三重接口的技术实现与伦理困境
论文阅读·人工智能·深度学习·ai·agi
智算菩萨3 小时前
【How Far Are We From AGI】2 大模型的“灵魂“缺口:当感知、记忆与自我意识的迷雾尚未散去
人工智能·ai·agi·感知