cross compile ffmpeg on raspi
地窖上的松 Lv1

参考文章:

OpenCV 交叉编译:基于 FFMPEG 的 VideoIO 模块

树莓派编译安装 FFmpeg(添加 H.264 硬件编解码器支持)

在另一篇文章中,简单粗暴地使用-D WITH_FFMPEG=OFF以不启用 ffmpeg 编译 OpenCV,结果导致无法读取视频。花了点时间交叉编译 ffmpeg,使其可以适配4.6.0版本的 OpenCV。

下载编译 x264

下载

折叠代码块 复制代码
1
git clone https://git.videolan.org/git/x264.git

进入文件夹,配置

折叠代码块 复制代码
1
2
3
4
./configure \
--enable-static \
--enable-strip \
--disable-cli

编译安装

折叠代码块 复制代码
1
2
sudo make -j4
sudo make install

下载编译 ffmpeg

下载,这里选择 n4.4.5 版本

折叠代码块 复制代码
1
2
3
wget https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n4.4.5.tar.gz
tar -zxvf n4.4.5.tar.gz
cd FFmpeg-n4.4.5

配置,下面指令参数太长了,vnc 复制不过去,所以新建一个 sh 文件来运行

折叠代码块 复制代码
1
2
touch config_ffmpeg.sh
nano config_ffmpeg.sh

把以下内容粘贴进去

折叠代码块 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/bin/sh
PREFIX=/usr/local
./configure \
--enable-gpl --enable-version3 --enable-nonfree \
--enable-static --disable-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-filter=aresample \
--enable-filter=allyuv \
--enable-filter=scale \
--enable-libfreetype \
\
--enable-indev=v4l2 \
--enable-indev=alsa \
--enable-indev=alsa \
--enable-outdev=alsa \
\

如果 opencv make有相关报错,需要在这里加上 --extra-cflags=-fPIC参数

配置编译安装

折叠代码块 复制代码
1
2
3
4
chmod +x config_ffmpeg.sh
./config_ffmpeg.sh
sudo make -j4
sudo make install

编译 OpenCV-4.6.0

官网下载解压,在文件夹外新建build文件夹

配置,启用 ffmpeg 和 videoio

折叠代码块 复制代码
1
cmake -D CMAKE_BUILD_TYPE=Release -D WITH_FFMPEG=ON -D BUILD_opencv_videoio=ON ../opencv-4.6.0

出现下图所示配置说明成功

image

按照另一篇博客写的那样编译 OpenCV,完成。