Linux系统编译FFmpeg

强烈推荐使用系统源安装ffmpeg,例如: sudo apt install ffmpeg for Ubuntu。
当不能满足需求的时候再手动编译吧。

有些Linux发行版可以在线安装ffmpeg,但是因为版权关系不能包含我们所需的编码器,有时候还是需要手动编译。
下面介绍一些常见编码器的安装。libx264libx265libfdk-aaclibmp3lamelibvpxlibopuslibaom for AV1。不需要的可以不安装,最终ffmpeg configure不指定特定的编码器就可以了。

对版本没要求的,可以使用发行版对应的应用仓库的命令进行安装。
不想自己编译的可以直接下载我编译好的,GNU C Library (GNU libc) 版本大于等于2.17的系统都可以使用。常见的CentOS 7和Ubuntu13.04以上都应该都可以。
百度网盘分享链接

FFmpeg常用第三方库列表

库名 FFmpeg启用参数 功能 编译方法
x264 –enable-libx264 H.264/AVC 编码器 libx264
x265 –enable-libx265 HEVC/H.265 编码器 libx265
fdk-aac –enable-libfdk-aac AAC 编码器 libfdk-aac
lame –enable-libmp3lame MP3 编码器 libmp3lame
libvpx –enable-libvpx VP8/VP9编码器 libvpx
opus –enable-libopus Opus 编码器 libopus
aom –enable-libaom AV1 编码器 libaom
libwebp –enable-libwebp webp 图像编码器 libwebp
openssl –enable-openssl 解析 https 等加密流协议 openssl
zimg –enable-libzimg zscale过滤器(图像色彩空间转换) libzimg
IntelMediaSDK –enable-libmfx Intel QSV 硬件加速编码器 Intel Media SDK
SDL –enable-ffplay ffplay 播放器渲染 SDL
zlib –enable-zlib 支持压缩格式的PNG等格式 zlib

编译第三方库

nasm

nasm是汇编编译器,有些编码器包含汇编代码,需要使用nasm。有些系统命令安装的nasm版本比较低,比如centos7 yum版本2.10。可以选择手动编译安装2.15版本。

1
2
3
4
5
6
7
8
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.xz
tar Jxvf nasm-2.15.05.tar.xz
pushd nasm-2.15.05

./configure
make && make install

popd

libx264

libx264是市面上评价比较高的H.264编码器,很多高清电影都是使用x264压缩的。

1
2
3
4
5
6
7
8
wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2
tar jxvf x264-master.tar.bz2
pushd x264-master

./configure --enable-shared
make && make install

popd

Ubuntu系统在线安装

1
sudo apt install libx264-dev

libx265

出色的开源H.265编码器,可以使用hg命令下载源码。

hg类似于git,好多系统可以在线安装这个命令。apt install mercurial / yum install mercurial
默认8bit编码模式,可以在配置时把 HIGH_BIT_DEPTH=ON 选择10bit。

1
2
3
4
5
6
hg clone http://hg.videolan.org/x265
pushd x265/build/linux/
cmake ../../source -DHIGH_BIT_DEPTH=ON
make && make install

popd

Ubuntu系统在线安装

1
sudo apt install libx265-dev

libfdk-aac

libfdk-aac是目前评价最高的开源aac编码器。Ubuntu仓库没有这个,必须手动编译安装。

1
2
3
4
5
6
7
8
9
wget -O fdk-aac-2.0.2.tar.gz https://sourceforge.net/projects/opencore-amr/files/fdk-aac/fdk-aac-2.0.2.tar.gz/download
tar zxvf fdk-aac-2.0.2.tar.gz

pushd fdk-aac-2.0.2
./autogen.sh
./configure
make && make install

popd

libmp3lame

libmp3lame 是mp3编码器。

1
2
3
4
5
6
7
8
wget -O lame-3.100.tar.gz https://sourceforge.net/projects/lame/files/lame/3.100/lame-3.100.tar.gz/download
tar zxvf lame-3.100.tar.gz
pushd lame-3.100

./configure
make && make install

popd

Ubuntu系统在线安装

1
apt install libmp3lame-dev

libvpx

libvpx 是开源视频编码格式 VP8/VP9 的编码器。

1
2
3
4
5
6
7
8
9
wget https://github.com/webmproject/libvpx/archive/v1.10.0/libvpx-1.10.0.tar.gz
tar zxvf libvpx-1.10.0.tar.gz
pushd libvpx-1.10.0

mkdir libvpx-build && cd libvpx-build
../configure --enable-shared --disable-static
make && make install

popd

Ubuntu系统在线安装

1
apt install libvpx-dev

libopus

libopus 是编码opus格式用的。

1
2
3
4
5
6
7
8
wget https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz
tar zxvf opus-1.3.1.tar.gz
pushd opus-1.3.1

./configure --enable-shared --disable-static
make && make install

popd

Ubuntu系统在线安装

1
apt install libopus-dev

libaom

新出的 AV1 视频编码器

1
2
3
4
5
6
7
8
9
git clone https://aomedia.googlesource.com/aom
pushd aom

git checkout v3.2.0 -b v3.2.0 #可指定版本
mkdir build2 && cd build2
cmake .. -DBUILD_SHARED_LIBS=true
make && make install

popd

libwebp

WebP 是Google推出的新一代针对网页的图像编码格式。

1
2
3
4
5
6
7
8
git clone https://github.com/webmproject/libwebp.git
pushd libwebp

./autogen.sh # 出错的话 可能需要安装 libtool libsysfs
./configure
make && make install

popd

OpenSSL

OpenSSL 是常用的加解密库了,如果FFmpeg想要访问https等加密格式的媒体流的话就需要启用SSL支持,可以使用OpenSSL 或者 GnuTLS。

注意OpenSSL版本,常用的是1.1.1和1.1.0,跳过2.x版本直接升级到3.x版本了,没有其他特殊原因,这里可以安装当前最新版3.0.1。

1
2
3
4
5
6
7
wget https://www.openssl.org/source/openssl-3.0.1.tar.gz
tar zxvf openssl-3.0.1.tar.gz
pushd openssl-3.0.1
./config
make && make install

popd

Ubuntu系统在线安装

1
apt install libssl-dev openssl

libzimg

zimg官方介绍是缩放、色彩空间转换和抖动库。比如要把HDR视频转换为SDR就需要用到-vf zscale过滤器,要使用这个功能就需要安装这个库,并在配置时指定--enable-libzimg

1
2
3
4
5
6
7
8
git clone https://github.com/sekrit-twc/zimg.git
pushd zimg

./autogen.sh
./configure
make & make install

popd

Intel Media SDK - Intel 硬件加速 qsv

Intel处理器可以启用硬件加速视频编码,对应编码器为qsvhevc_qsv不过编码质量不如软件编码高。

下载 Intel-Media-SDKhttps://github.com/Intel-Media-SDK/MediaSDK/releases ,运行install_media.sh 默认安装在/opt/目录下了。

1
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/intel/mediasdk/lib64/pkgconfig

ffmepg 配置参数

1
--enable-libmfx

SDL

SDL是一套开放源代码的跨平台多媒体开发库,支持图像渲染声音播放等功能,编译ffplay需要安装这个库。

1
2
3
4
5
6
7
8
9
wget https://www.libsdl.org/release/SDL2-2.0.18.tar.gz
tar zxvf SDL2-2.0.18.tar.gz
pushd SDL2-2.0.18

./autogen.sh
./configure
make && make install

popd

Ubuntu系统在线安装

1
apt install libsdl2-dev

zlib

Zlib是知名的压缩库,有些媒体格式使用到压缩的必须依赖zlib,比如PNG图片格式。
1
2
3
4
5
6
7
8
9
10
11
12
wget http://www.zlib.net/zlib-1.2.11.tar.gz

tar zxvf zlib-1.2.11.tar.gz
pushd zlib-1.2.11

./configure
mkdir build
pushd build
cmake ..
make && make install

popd

Ubuntu系统在线安装

1
apt install zlib1g-dev

编译FFmpeg

需要的编码器按照上述的文档安装完后,在配置ffmpeg的时候使用特定的参数指定就可以集成进去了。
下载ffmpeg源码 https://ffmpeg.org/download.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH
./configure --enable-shared --disable-static --enable-gpl --enable-nonfree \
--extra-version=SHAOLIMING \
--enable-libx264 \
--enable-libx265 \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libvpx \
--enable-libopus \
--enable-libaom \
--enable-openssl \
--enable-libwebp \
--enable-libzimg \
--enable-zlib \
--enable-ffplay

make && make install

popd

make install 后 ffmpeg 命令和相应的动态库就安装到系统目录了,默认一般是/usr/local/bin//usr/local/lib/目录,可以使用./configure --prefix=./xxxxx来指定安装目录。

编译 ffplay

默认参数是不编译ffplay,编译ffplay需要先安装SDL,然后指定配置参数--enable-ffplay


不想动手的编译的,可以点这里下载,百度网盘分享链接