以下方式在树莓派4b下编译,尽可能的开启了给各种优化,同样使用于不同的操作系统平台。

1、ffmpeg开发环境

完整目标库含有 avcodec、avdevice、avfilter、avformat、avutil、postproc、swresample 和swscale。

1.1、源码编译

使用源码编译,可以根据自身情况选择编译需要的模块,控制库的大小。
下面以通用方式说明,开启树莓派硬硬件加速功能。

(1)环境准备

build-essential、cmake、git、pkg-config 不用解释。

如果使用 H264 编码,需要安装libx264库,可以直接使用 apt-get install libx264-dev或者从源代码编译。

使用264_omx硬编码器时,树莓派镜像已经提供了运行依赖库,但是开发环境需要的头文件,使用命令 sudo apt-get install libomxil-bellagio-dev即可。

其他的依赖库,例如某些音频、视频依赖库可以在后续的 configure 过程提示中解决,

(2)编译源码

首先下载源码

wget http://ffmpeg.org/releases/ffmpeg-4.1.2.tar.bz2
tar jxvf ffmpeg-4.1.2.tar.bz2
cd ffmpeg-4.1.2

之后,准备编译脚本 build_ffmpeg.sh 内容如下

#!/bin/sh
PREFIX=/usr/local

./configure \
--enable-gpl --enable-nonfree --enable-static --enable-shared \
\
--prefix=$PREFIX \
\
--disable-opencl --disable-thumb --disable-pic --disable-stripping \
\
--enable-small \
\
--enable-ffmpeg --enable-ffplay --enable-ffprobe \
\
--disable-doc \
--disable-htmlpages \
--disable-podpages \
--disable-txtpages \
--disable-manpages \
\
--disable-everything \
\
--enable-libx264 \
--enable-encoder=libx264 \
--enable-decoder=h264 \
--enable-encoder=aac \
--enable-decoder=aac \
--enable-encoder=ac3 \
--enable-decoder=ac3 \
--enable-encoder=rawvideo \
--enable-decoder=rawvideo \
--enable-encoder=mjpeg \
--enable-decoder=mjpeg \
\
--enable-demuxer=concat \
--enable-muxer=flv \
--enable-demuxer=flv \
--enable-demuxer=live_flv \
--enable-muxer=hls \
--enable-muxer=segment \
--enable-muxer=stream_segment \
--enable-muxer=mov \
--enable-demuxer=mov \
--enable-muxer=mp4 \
--enable-muxer=mpegts \
--enable-demuxer=mpegts \
--enable-demuxer=mpegvideo \
--enable-muxer=matroska \
--enable-demuxer=matroska \
--enable-muxer=wav \
--enable-demuxer=wav \
--enable-muxer=pcm* \
--enable-demuxer=pcm* \
--enable-muxer=rawvideo \
--enable-demuxer=rawvideo \
--enable-muxer=rtsp \
--enable-demuxer=rtsp \
--enable-muxer=rtsp \
--enable-demuxer=sdp \
--enable-muxer=fifo \
--enable-muxer=tee \
\
--enable-parser=h264 \
--enable-parser=aac \
\
--enable-protocol=file \
--enable-protocol=tcp \
--enable-protocol=rtmp \
--enable-protocol=cache \
--enable-protocol=pipe \
--enable-protocol=srtp \
\
--enable-filter=aresample \
--enable-filter=allyuv \
--enable-filter=scale \
--enable-libfreetype \
\
--enable-indev=v4l2 \
--enable-indev=alsa \
\
--enable-omx \
--enable-omx-rpi \
--enable-encoder=h264_omx \
\
--enable-mmal \
--enable-hwaccel=h264_mmal \
--enable-decoder=h264_mmal \
\

修改当前脚本权限 chmod a+x build_ffmpeg.sh
之后执行 make ,成功后 make install 即可。

演示略。

1.2、命令行安装

(1) 直接安装 ffmpeg

我们现在使用的不带桌面程序的操作系统,不需要使用类似gtk庞大的X11库。

当直接使用 sudo apt-get install ffmpeg时, 可以 安装 ffmpeg、ffprobe和 ffplay等工具,同时会安装ffmpeg相关所有的静态库、动态库。

但是,该方式安装的 ffmpeg是带有gui功能,且占用700M的空间, 安装了不必要的X11库。

(2)仅安装开发库 (!!!推荐!!!)

不使用命令行安装ffmpeg,而是仅安装需要的开发库

sudo apt-get install libavcodec-dev
sudo apt-get install libavdevice-dev
sudo apt-get install libavfilter-dev
sudo apt-get install libavformat-dev
sudo apt-get install libavutil-dev
sudo apt-get install libswresample-dev
sudo apt-get install libswscale-dev

若有需要,还能安装 libavresample库。相关库大小不到20M。

FFmpeg javacv 关系 ffmpeg和opencv_ffmpeg

另外,如果需要ffmpeg工具,直接下载静态编译编译好的可执行文件即可,下载链接 https://johnvansickle.com/ffmpeg/

FFmpeg javacv 关系 ffmpeg和opencv_FFmpeg javacv 关系_02


根据情况选择,下载后放入 /usr/bin 目录并给权限。

FFmpeg javacv 关系 ffmpeg和opencv_FFmpeg javacv 关系_03


可见,下载的ffmpeg工具不支持树莓派硬件加速,仅适用于文件分析,不适合编解码操作。

2、opencv开发环境

opencv从源代码编译,服务端使用,同样不需要gui功能。

同样,需要依赖环境,基本环境略, 如果涉及到图片保存,需要安装相关的库
,还有优化的一些函数包

sudo apt-get install libjpeg8-dev 
sudo apt-get install libtiff5-dev 
sudo apt-get install libjasper-dev 
sudo apt-get install libpng12-dev

sudo apt-get install libatlas-base-dev gfortran

首先下载opencv源码

wget -O opencv-4.5.1.zip https://github.com/Itseez/opencv/archive/4.5.1.zip
unzip opencv-4.5.1.zip

若需要使用contrib包,则下载对应版本文件

wget -O opencv_contrib-4.5.1.zip https://github.com/Itseez/opencv_contrib/archive/4.5.1.zip

编译脚本:

sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
	-D CMAKE_INSTALL_PREFIX=/usr/local \
	# 优化选项
	-D ENABLE_NEON=ON \
    -D ENABLE_VFPV3=ON \
	# 编译contrib包
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.5.1/modules \
    # 不编译 highgui 模块
	-D BUILD_opencv_highgui=OFF
    # 不编译测试的项目
    -D INSTALL_PYTHON_EXAMPLES=OFF \
    -D INSTALL_CXX_EXAMPLES=OFF \
    -D BUILD_EXAMPLES=OFF ..

注意脚本中的注释说明:

  • 1、优化选项, 必须开启
  • 2、根据实际情况,编译contrib包
  • 3、指定模块(包含contrib中的包)不编译
  • 4、不编译example,提高编译速度

在build目录下执行上面脚本,成功后 make -j4 ,树莓派4核同时编译,提高速度。编译后 make install 就可以直接使用了。

这里给出不编译contrib得到的opencv动态库文件极小,大小共22M左右,如下图:

FFmpeg javacv 关系 ffmpeg和opencv_编译_04