解决Python OpenCV 读取视频抽帧出现error while decoding的问题

  • 1. 问题
  • 2. 解决
  • 3. 源代码
  • 参考

1. 问题

读取H264视频,抽帧视频并保存,报错如下;

[aac @ 00000220b9a07fc0] Input buffer exhausted before END element found
[h264 @ 00000220b9cd0500] error while decoding MB 20 45, bytestream -14

2. 解决

溯本求源:https://stackoverflow.com/questions/49233433/opencv-read-errorh264-0x8f915e0-error-while-decoding-mb-53-20-bytestream

发现问题原因是:它与时间有关,当在连续的capture.read()之间执行比较耗时的操作时会出现该错误。

解决:增加一个线程处理捕获到的视频帧就好~~~

3. 源代码

import os
import queue
import threadingimport cv2q = queue.Queue()
save_path = ''def get_frame_from_video(video_name, interval):"""Args:video_name:输入视频名字interval: 保存图片的帧率间隔Returns:"""# 开始读视频video_capture = cv2.VideoCapture(video_name)i = 0while True:success, frame = video_capture.read()# 检测是否到了视频尾部if not success or frame is None:print('video is all read')breaki += 1if i % interval == 0:q.put(frame)def Display(arr):print("Start Displaying")j = int(arr)while True:if q.empty() != True:frame = q.get()# 保存图片j += 1save_name = save_path + str(j) + '.jpg'cv2.imwrite(save_name, frame)print('image of %s is saved' % save_name)# cv2.imshow(save_name, frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakif __name__ == '__main__':video_name = 'F:\\v01.H264'j = 0save_path = video_name.split('.H264')[0] + "\\"print(save_path)interval = 125# 保存图片的路径is_exists = os.path.exists(save_path)if not is_exists:os.makedirs(save_path)print('path of %s is build' % save_path)p2 = threading.Thread(target=Display,args=[j])p2.start()get_frame_from_video(video_name, interval)

参考

  • https://stackoverflow.com/questions/49233433/opencv-read-errorh264-0x8f915e0-error-while-decoding-mb-53-20-bytestream
  • https://blog.csdn.net/darkeyers/article/details/84865363

解决Python OpenCV 读取视频并抽帧出现error while decoding的问题相关推荐

  1. python opencv读取视频没声音_python + opencv: 解决不能读取视频的问题

    博主一开始使用python2.7和Opencv2.4.10来获取摄像头图像,程序如下: cap = cv2.VideoCapture(0) ret, frame = cap.read() 使用这个程序 ...

  2. OpenCV读取视频时丢帧的问题

    OpenCV读取视频时会自动丢掉重复帧,导致读取到的帧数和视频里的实际总帧数不一致,比如说你用视频标注工具打开视频看到视频总共有855帧,可是使用OpenCV的VideoCapture类的read() ...

  3. python+opencv选出视频中一帧再利用鼠标回调实现图像上画矩形框

    最近因为要实现模板匹配,需要在视频中选中一个目标,然后框出(即作为模板),对其利用模板匹配的方法进行检测.于是需要首先选出视频中的一帧,但是在利用摄像头读视频的过程中我唯一能想到的方法就是: 1.在视 ...

  4. python opencv 读取视频保存视频片段和图片

    video4.avi为保存的视频名字 # -*- coding: utf-8 -*- """ Spyder EditorThis is a temporary scrip ...

  5. python+opencv读取视频并设置可调整窗口大小

    import cv2cap = cv2.VideoCapture('data/1.mp4') while cap.isOpened():ret, frame = cap.read()# 调整窗口大小c ...

  6. python用OpenCV读取视频帧数、高度宽度等

    python用OpenCV读取视频帧数.高度宽度等 import cv2 import time# 2655 def get_each_frame(video_path):# 读取视频文件videoC ...

  7. 使用OpenCV和Python高效计算视频的总帧数

    使用OpenCV和Python高效计算视频的总帧数 1. 效果图 2. 源码 参考 这篇博客将介绍两种使用OpenCV和Python计算视频文件中帧数的方法. 超级快,它依靠OpenCV的视频属性功能 ...

  8. python视频批量抽帧脚本更新

    原来的脚本代码:https://blog.csdn.net/JZJZ73/article/details/108851403 因项目工程需要,对原来的python视频批量抽帧脚本进行了更新,更新特点如 ...

  9. python视频抽帧 后 前端javascript如何显示_python通过ffmgep从视频中抽帧的方法

    如下所示: ffmpeg中文文档:http://linux.51yip.com/search/ffmpeg ffmpeg -i test_baofeng.wmv -y -f image2 -ss 00 ...

最新文章

  1. qemu模拟armlinux执行目标文件系统的可执行文件
  2. 软考-信息系统项目管理师-组织级项目管理
  3. 卡尔曼滤波器推导与解析 - 案例与图片
  4. mysql数据类型优化
  5. 21张GIF动图让你秒懂数学原理
  6. Jira filter subscribe issues
  7. 判断网页是否为微信内置浏览器打开?
  8. html流星雨代码_HTML制作流星雨特效
  9. 什么是云计算时代?学云计算能做什么呢
  10. java流 视频_java如何对视频文件处理?包括拉流推流视频截取等?
  11. vivo7.0系统怎么无root激活XPOSED框架的教程
  12. 深入理解Java虚拟机-垃圾收集算法
  13. 个推里群推php教程,GitHub - lyx2297999137/yii2-igetui: yii2个推
  14. 提升10%!如何将机器学习模型准确率从80%提高到90%以上
  15. Springcloud使用全局捕获异常管理接口异常
  16. 圆柱体积怎么算立方公式_四个计算圆柱的体积常用公式(附例题)
  17. 深度学习FPGA实现基础知识17(图像处理卷积运算 矩阵卷积)
  18. Java操作Excel三种方式POI、Hutool、EasyExcel
  19. React 使用Markdown 更改样式
  20. 如何使用网易邮箱大师登录网易企业邮箱?

热门文章

  1. 2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)
  2. 你哪来这么多事(二):学生信息查找
  3. android studio so文件的添加
  4. 如何禁止浏览器自动填充
  5. offsetof使用小结
  6. RabbitMQ使用及与spring boot整合
  7. IntelliJ IDEA下自动生成Hibernate映射文件以及实体类
  8. 2022-2028年中国硝化棉行业市场研究及前瞻分析报告
  9. Go 学习笔记(21)— 标准库 os 操作文件(新建、打开、写入、读取、删除、关闭文件)
  10. Python学习笔记第五周