由于浏览器播放的视频常用h264编码格式,所以cv这边保存时希望能够以h264支持,但是奈何因为其开源许可,默认的包安装不支持h264。
开开心心指定h264报错:
Could not find encoder for codec id 27: Encoder not found
解决
windows
windows很方便,直接下openh264放项目下,或者动态库搜寻路径下即可支持。
Linux,Ubuntu等
就没windows那么简单了,要自己从源码编译支持
见
见
也就是说,对于c++的,自己源码编译后在加载相关库使用吧,对于python的,按照提示做:
Source distributions安装
不过我没用manual-builds,可以通过编译选项支持更多,懒得折腾,而是采取了pip的从源码编译安装,反正默认只要用h264相关环境就能支持上了,因为没那么多小九九,就想支持h264而已……
#安装相关编译时可能用到的环境,若有自己编译过的环境,可删除
sudo apt install build-essential cmake git python3-dev python3-numpy \
libavcodec-dev libavformat-dev libswscale-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer1.0-dev libgtk-3-dev libgtk2.0-dev libcanberra-gtk-module \
libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev \
libopencv-dev x264 libx264-dev libssl-dev ffmpeg
python -m pip install --no-binary opencv-python opencv-python==4.6.0.66 #4.6才修复了skbuild的bug issue#637
等待编译完成……
愉快的h264编码了……
后记
若是想离线安装,就把上面那个链接的源文件下载下来,比如wget xxx . 然后:
python -m pip install opencv-python-4.6.0.66.tar.gz
另外一种manual-builds的安装步骤
# 同上apt install 安装相关依赖
# download
$ git clone --recursive https://github.com/skvark/opencv-python.git
# set freetype
$ export CMAKE_ARGS="-DWITH_FREETYPE=ON"
# enable contrib
$ export ENABLE_CONTRIB=1
$ export MAKEFLAGS="-j$[$(nproc)-1]"
# compile
$ python -m pip wheel . --verbose.
遇到过的报错
1.报错找不到ninja
安装ninjia即可
2.报错:
File "<string>", line 451, in _classify_installed_files_override
TypeError: _classify_installed_files() got an unexpected keyword argument 'cmake_install_dir'
#Opencv-python低版本原因,升级版本4.6及以上
Exception: Not found: 'python/cv2/gapi/.*\.py'
#当时是base下装的 未解决 莫名其妙后边就好了……不知道是不是更重装相关apt那个环境有关……
参考
https://zj-image-processing.readthedocs.io/zh_CN/latest/opencv/install-configure/[opencv-python]%E7%BC%96%E8%AF%91%E4%B8%8E%E5%AE%89%E8%A3%85/