项目有个不合理要求,能够在chrome浏览器打开播放,但是cv2根本不支持H264,由于版权原因,官方不支持h264格式所以当你使用诸如XVID,MJPG等虽然不影响使用和正常播放,但是就是无法在浏览器里面直接打开观看。查遍全网资料,发现Can you support "H264" codec? · Issue #299 · opencv/opencv-python · GitHub

这个全网精华,但是里面尝试了下都不行,因此我得出结论要解决这个问题,只有2条路可行。

第一条:源码编译

这种方法耗时费力,中途错误百出,走的十分艰难,不推荐

第二条:保存后用ffmpeg在格式转换一下

这种方法简单,但是效率上可能就不行了,大家可以尝试ffmpy3这个库或者直接用subprocess调用转换。

目前其他方法暂时测试不行,我的测试环境都是在

ubuntu18.04下面,windows上暂时没有测试过。如果有其他好办法可以分享在评论中,大家一起探讨一下。

更新:20220602

最终找到方法:

首先安装scikit-video

pip install scikit-video

然后代码如下:

import skvideo.iooutputfile = "/tmp/video.mp4"
writer = skvideo.io.FFmpegWriter(outputfile, outputdict={'-vcodec': 'libx264'})
for frame in frames:writer.writeFrame(frame)
writer.close()

frame就是opencv-python  cap.Capture捕获的nd.array类型,就是cv2.imread读取数据类型,例子如下:

import skvideo.io
import cv2outputfile = "/home/fut/video.mp4"cap = cv2.VideoCapture('/home/fut/Videos/4391603481b6056f248a5fb106953796.mp4')
# 获取视频帧速率 FPS
frame_fps = int(cap.get(cv2.CAP_PROP_FPS))
# 获取视频帧宽度和高度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print("video fps={},width={},height={}".format(frame_fps, frame_width, frame_height))
out = skvideo.io.FFmpegWriter(outputfile,inputdict={'-r': str(frame_fps), '-s':'{}x{}'.format(frame_width,frame_height)}, outputdict={'-r': str(frame_fps), '-vcodec': 'libx264'})
count = 0
while cap.isOpened():ret, frame = cap.read()if not ret:print("read over or error!")breakout.writeFrame(frame)cv2.imshow("result", frame)if cv2.waitKey(2) & 0xFF == ord('q'):  # 按q退出break
out.close()
cap.release()
cv2.destroyAllWindows()

[opencv][原创]关于opencv-python的cv2保存视频不支持H264格式问题探讨相关推荐

  1. Python:matplotlib pyplot库函数 savefig所支持的格式以及图片插入word保存后模糊的完美解决方法

    Python:matplotlib pyplot库函数 savefig所支持的格式以及图片插入word保存后模糊的完美解决方法 202012月更新 savefig支持的格式 图片插入word,保存后不 ...

  2. opencv基本操作二(读取视频流与保存视频、读取摄像头并保存视频)

    opencv基本操作二 要点 代码 例程一 例程二 要点 opencv常用读视频函数 cv2.VideoCapture .cv2.VideoCapture.get 等,可以参考这里 opencv常用写 ...

  3. opencv的VideoWriter类及参数用于保存视频

    VideoWriter 说明 参数 例子 例一:修改视频的分辨率 例二:在视频的指定区域画圆 例三:对彩色图像的每个通道单独进行处理 错误的情况 1.图片的分辨率大小 2.路径 说明 要使用OpenC ...

  4. python 将数据保存为excel的xls格式

    #引入xlwt模块(提前pip下载好) import xlwt #使用workbook方法,创建一个新的工作簿 book = xlwt.Workbook(encoding='utf-8',style_ ...

  5. python视频操作——python实现读取和保存视频

    python读取和保存视频 内容来自博客+博客~ 读取视频 用cv2库的好处是返回的就是arrary,不用转换,但这种方法是从头读到尾 利用cv2库读取视频,代码实现如下: import cv2cap ...

  6. python opencv按照一定间隔保存视频帧

    python opencv按照一定间隔保存视频帧 文章目录: 一.获取视频流的相关参数 二.设置间隔保存视频帧 想实现opencv读取视频帧,按照一定的时间间隔然后保存图片下来,因为所有的帧都保存下来 ...

  7. opencv python 中cv2.putText()函数的用法

    opencv python 中cv2.putText()函数的用法 文章目录: 一.快速使用 二.官方文档 三.使用举例 虽然用啦很多次,还是决定记录一下 一.快速使用 cv2.putText(ima ...

  8. python模块cv2人脸识别_Python基于Opencv来快速实现人脸识别过程详解(完整版)

    前言 随着人工智能的日益火热,计算机视觉领域发展迅速,尤其在人脸识别或物体检测方向更为广泛,今天就为大家带来最基础的人脸识别基础,从一个个函数开始走进这个奥妙的世界. 首先看一下本实验需要的数据集,为 ...

  9. python使用cv2库、下载opencv库

    cv2库在opencv库内,因此需要下载opencv-python 1.打开windows命令行: win+R cmd 2.更新pip版本(不一定要): python -m pip install - ...

最新文章

  1. html5 graphics with svg css3,HTML5 GRAPHICS WITH SVG AND CSS3
  2. mfc连接ubuntu mysql数据库_Ubuntu 16.04 Linux系统下使用C++连接mysql数据库
  3. Search Engine —— Regular Expression(Spider)
  4. Redis之内存分析
  5. 第二冲刺阶段绩效评估
  6. C++类所占大小的问题
  7. Bailian4075 矩阵旋转【矩阵】
  8. iOS常用第三方类库 Xcode插件
  9. 在WPF中集成OpenTK
  10. HDU-ACM-2018(母牛的故事)
  11. mysql时间日期函数
  12. 完成该操作所需的数据还不可使用_面试官:如何保障数据库和redis缓存的一致性...
  13. 用友ERP-NC系统 NCFindWeb接口文件读取
  14. 小黑计算机一级题库,小黑课堂计算机一级题库
  15. C#路径中使用斜杠/和反斜杠\的区别
  16. 在线考试防止切屏功能
  17. 工业自动化控制-组态王2
  18. VUE获取节日(中国节+国际节)
  19. java设置post超时时间_HttpClient 如何设置超时时间
  20. 美团外卖用户差评情况分析

热门文章

  1. 列车调度系统属于计算机应用中的,2020年12月网络教育​统考《计算机应用基础》基础知识试题及答案1...
  2. 安全测试工具之Hping3
  3. 电商项目开发一般流程
  4. mysql workbench导入mdb_如何将MDB(Access)文件转换为MySQL(或纯SQL文件)?
  5. 高等数学(第七版)同济大学 习题9-3 个人解答
  6. ATI F/T Gamma sensor( 力和力矩传感器 ) 开箱测评 + 使用说明
  7. [EOS源码分析]4.EOS源码调试
  8. 取下zyduino uno上面的ATMEGA328芯片
  9. oracle数据库中用sql拼接字符串和转成clob存储在数据库中
  10. 开源的在线答题小程序分享