利用OpenCV进行H264视频编码的简易方式
在Python下,利用pip安装预编译的opencv库,并实现h264格式的视频编码。
1. 安装OpenCV
$ pip install opencv-python
建议在python虚拟环境下安装,不容易产生相互影响。
2. 代码示例
读取笔记本自带摄像头,并保存为视频的最简实现。
import cv2
def main():
output_path = './output.avi'
vc = cv2.VideoCapture(0)
ret, frame = vc.read()
w = int(vc.get(cv2.CAP_PROP_FRAME_WIDTH))
h = int(vc.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = vc.get(cv2.CAP_PROP_FPS)
fourcc = cv2.VideoWriter_fourcc('H', '2', '6', '4')
# fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
# fourcc = cv2.VideoWriter_fourcc('H', 'E', 'V', 'C')
vw = cv2.VideoWriter(output_path, fourcc, fps, (w, h), True)
while ret:
vw.write(frame)
ret, frame = vc.read()
cv2.imshow('frame', frame)
if cv2.waitKey(5) & 0xFF == ord('q'):
cv2.destroyAllWindows()
return -1
if __name__ == '__main__':
main()
2.1 默认编码
预编译的opencv,默认支持XVID格式的编码,但是不支持H264。
如果将# fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
注释取消,程序可以正常运行并保存视频。
2.2 H264支持
按示例代码配置为H264编码,会显示如下错误提示。摄像头可以采集到图像,但是不能正常保存为视频。
Failed to load OpenH264 library: openh264-1.8.0-win64.dll
Please check environment and/or download library: https://github.com/cisco/openh264/releases
[libopenh264 @ 000001e7a96ddec0] Incorrect library version loaded
Could not open codec 'libopenh264': Unspecified error
根据提示,到Github库中搜索对应的动态库。
注意选取对应的版本。我安装的OpenCV版本为4.4.0.42
,提示需要的动态库为openh264-1.8.0-win64.dll
,在Release页中找到对应的版本,将下载获得的dll文件解压并放在与py文件同级的工程目录下。
不同OpenCV版本可能需要的支持库版本也不同,没有测试,注意看提示就行。
如果考虑通用性也可以将dll所在的路径加入环境变量Path中。
本示例实现是在Windows平台下,Linux下应该也是类似的操作,下载对应的h264支持库文件,并加入到PATH能够搜索到的地址。
重新运行程序,可以正常显示图像,并保存为视频文件。
用Potplayer之类的播放器打开,可以在属性中看到,编码格式的相关信息:
视频编码: H264 - Native D3D9 DXVA Decoder(VLD)
2.3 H265支持
想着用同样的方法尝试一下H265编码。
将# fourcc = cv2.VideoWriter_fourcc('H', 'E', 'V', 'C')
注释取消,发现如下错误提示:
OpenCV: FFMPEG: tag 0x43564548/'HEVC' is not found (format 'avi / AVI (Audio Video Interleaved)')'
看起来目前预编译版本的OpenCV是不支持H265编码的。如果要用H265编码,需要从源码编译,并在编译过程中添加对应的支持库。看到一篇帖子有介绍,目前还没有验证。
利用OpenCV进行H264视频编码的简易方式的更多相关文章
- H264视频编码成MP4文件
firehood的专栏 Wince嵌入式开发 目录视图 摘要视图 订阅 赠书 | AI专栏(AI圣经!<深度学习>中文版) 每周荐书:Kotlin.分布式.Keras ...
- 【转】H264视频编码级别说明profile level Encoder
版权声明:本文为博主原创文章,未经博主允许不得转载. 首先要阐明所谓的AVC其实就是H.264标准,是由ITU-T和ISO/IEC组成的联合视频组(JVT,Joint Video Team)一起开发的 ...
- Unity3d利用opencv保存游戏视频
脚本MyVideoWriter.cs using UnityEngine; using System.Collections; using OpenCvSharp; using OpenCvSharp ...
- 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码
ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的測试,图像格式png,jpg, gif等等測试均O ...
- 【H264】视频编码发展简史
一.常见视频编码格式 编码格式有很多,如下图: 目前比较常用的编码有: H26x系列:由ITU(国际电传视讯联盟)主导,侧重网络传输 MPEG系列:由ISO(国际标准组织机构)下属的MPEG(运动图象 ...
- 【转载】视频编码(H264概述)
一视频编码介绍 1.1 视频压缩编码的目标 1)保证压缩比例 2)保证恢复的质量 3)易实现,低成本,可靠性 1.2 压缩的出发点(可行性) 1)时间相关性 在一组视频序列中,相邻相邻两帧只有极少的不 ...
- 嵌入式 视频编码(H264)
这几天在编写视频录制模块,所以,闲暇之余,又粗粗的整理了一下,主要是API,以备不时之用 摄像头获取的模拟信号通过经芯片处理(我们使用的是CX25825),将模拟信号转成数字信号,产生标准的IT ...
- 嵌入式 视频编码(H264)hi3518
这几天在编写视频录制模块,所以,闲暇之余,又粗粗的整理了一下,主要是API,以备不时之用 摄像头获取的模拟信号通过经芯片处理(我们使用的是CX25825),将模拟信号转成数字信号,产生标准的IT ...
- Mediacodec编码后的h264视频出现马赛克问题
问题:在视频采集后,通过Mediacodec编码生成h264视频文件,播放时出现马赛克较多,无论调整帧率.码率.还是分辨率都不能解决问题 出现问题的原因:编码时传入的时间戳不对.时间戳是视频播放的标准 ...
随机推荐
- Python PIL方式打开的图片判断维度
1. PIL方式打开的图片判断维度 好久没更新啦,哈哈哈~~!今天跟宝宝们分享一篇如何判断灰度图像和彩色图像维度的方法.我们在读取灰度图像和彩色图像时,发现读取出来的图片维度不同,当我们要做后续 ...
- 实验09——java基于TCP实现客户端与服务端通信
TCP通信 需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手 底层通过 流 发送数据 数据没有大小限制 可靠的传输机制 - 丢包重发 包的顺序的 ...
- Python 为什么能支持任意的真值判断?
本文出自"Python为什么"系列,请查看全部文章 Python 在涉及真值判断(Truth Value Testing)时,语法很简便. 比如,在判断某个对象是否不为 None ...
- artifactdescriptorexception:Failed to read artifact descriptor for xxx:jar ”
在Eclipse中执行Maven的install命令时,报“Failed to read artifact descriptor for xxx:jar ”的错误.这可能是在下载过程中文件出现错误.或 ...
- C#设计模式之8-组合模式
组合模式(Composite Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/403 访问. 组合模式属 ...
- set学习记录
set是STL中的集合容器,其中每个元素都互不相同,并且都是以递增的形式排列. set只能使用迭代器访问. 说一下常用函数: 1.insert(x):插入函数用于把x插入set. 2.find(val ...
- 【趣味设计模式系列】之【代理模式2--JDK动态代理源码解析】
1. 图解 上图主要描述了JDK动态代理的执行过程,下面做详细分析. 2. Proxy源码分析 上一篇,在使用JDK动态代理的时候,借助于Proxy类,使用newProxyInstance静态方法,创 ...
- low-code 与 20 年前的 Dreamweaver 有什么区别?
一.low-code 是什么? A low-code development platform (LCDP) is software that provides a development envir ...
- MQC集群配置错误
这个错误说明配置里面,MQC环境配置错了 运行war包时会读到本地的配置system-config.propertites文件
- 使用Axure设计基于中继器的左侧导航菜单
实现效果: 使用组件: 设计详解: 一.设计外层菜单 1.拖一个矩形,在属性栏中命名cd1,设置宽高为200*45,背景色#393D49,双击设置按钮名称为“默认展开”,字体大小16,字体颜色#C2C ...