一、背景
之前使用 opencv-python 录制摄像头视频一直存在一个问题,录出的视频文件体积太大,主要问题在于没法控制码率,录制工业相机1小时视频,体积最大能到10G+,码率飙到 20000kbps+,实在恐怖。当时搜遍全网也没找到解决方法,最常见的在 cv2.VideoCapture() 中设置 bitrate 参数也是行不通。
opencv 的 cv2.VideoWriter() 并没有直接提供参数来设置视频的码率。码率通常是编解码器的属性,而 cv2.VideoWriter() 的设计比较简单,没有暴露这些细节。但可以通过指定合适的编解码器和调整视频的分辨率和帧率来间接影响视频的码率。如果需要更细粒度的控制,建议使用更专业的视频处理库,比如将 GStreamer 管道与 OpenCV 结合,这样可以设置视频的更多属性,包括码率。GStreamer 跟 ffmpeg 一样,也是一个多媒体框架,可以实现采集,编码,解码,渲染,滤镜等媒体解决方案,且支持跨平台实现。
无奈 opencv 默认关闭了 GStreamer 功能,当时也就没再深究,虽然视频体积大但也就凑合用了。直到最近,趁着手头工作不多,决定抽出一部分时间好好搞一下 opencv,通过源码编译的方式开启 GStreamer 支持,尝试使用 GStreamer 的方式录制视频,设置码率。本文先着重介绍一下如何开启 opencv 的 GStreamer 支持。
二、编译安装
2.1 准备工作
本部分主要参考 [1]
2.1.1 工具
gcc、x264、xvidcore、zlib、ffmpeg、opencv
2.1.2 工作目录
将所有工具解压到同一个目录下

同时新建一个文件夹用于存放后面编译好的文件
mkdir {builddir}
2.1.3 安装插件
sudo apt install make cmake cmake-gui pkg-config
2.1.4 创建虚拟环境
可以安装 anaconda 创建虚拟环境,或使用系统 python 创建(具体方法可参考上篇文章),由于本人要在原有 conda 虚拟环境中使用 opencv ,所以就直接使用原有 conda 环境。
2.2 编译组件
2.2.1 配置 gcc
sudo vi /etc/profile
export PATH=$PATH:/path/to/your/gcc/bin
source /etc/profile
配置完成后输入
aarch64-linux-gnu-gcc -v
输出如下内容表示配置成功

2.2.2 编译 zlib
(1)进入目录,进行编译配置
cd /path/to/your/zlib/dir
./configure --prefix=/path/to/your/{builddir}
(2)修改编译文件
vi Makefile
(3)修改内容
CC=aarch64-linux-gnu-gcc
LDSHARED=aarch64-linux-gnu-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
AR=aarch64-linux-gnu-ar
RANLIB=aarch64-linux-gnu-ranlib

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



