为什么要自己编译

Ubuntu 22.04自带的FFmpeg版本是4.x,有些新功能不支持。比如libsvtav1(SVT-AV1编码器)需要FFmpeg 5.0以上才支持。apt源里没有新版,只能自己编译。

网上教程一大堆,但很多都是过时的,或者漏了关键步骤。我按自己的实际踩坑过程记录一下。

安装依赖

这是最坑的一步。缺一个库configure就过不了,但错误信息经常不够明确。

# 基础编译工具
sudo apt install -y build-essential git cmake nasm yasm

# 各种编码库
sudo apt install -y libx264-dev libx265-dev libnuma-dev
sudo apt install -y libvpx-dev libfdk-aac-dev libmp3lame-dev
sudo apt install -y libopus-dev libvorbis-dev libass-dev
sudo apt install -y libfreetype6-dev libfontconfig1-dev

# 其他依赖
sudo apt install -y libsdl2-dev libpulse-dev libdrm-dev
sudo apt install -y libva-dev libvdpau-dev
libnuma-dev是x265的依赖,不装的话x265编译不进去,而且不报明显错误。这个坑我踩过。

下载源码

# 下载FFmpeg源码
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
git checkout release/7.0  # 选择一个稳定版本

configure参数

这是最关键的部分。参数不对,编译出来的ffmpeg就缺功能。

./configure \
  --prefix=/usr/local \
  --enable-gpl \
  --enable-nonfree \
  --enable-version3 \
  --enable-libx264 \
  --enable-libx265 \
  --enable-libvpx \
  --enable-libfdk-aac \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvorbis \
  --enable-libass \
  --enable-libfreetype \
  --enable-sdl2 \
  --enable-vaapi \
  --enable-vdpau

注意:--enable-gpl必须加!因为x264是GPL协议的,不加这个参数x264就启用不了。我之前就是忘了加这个,折腾了半天。

--enable-nonfree是给fdk-aac用的,这个编码器是Fraunhofer的,许可证不是完全自由的。

编译和安装

make -j$(nproc)   # 用所有CPU核心编译,大概10-15分钟
sudo make install
sudo ldconfig      # 更新动态链接库缓存

编译完成后验证一下:

ffmpeg -version
ffmpeg -encoders | grep -E "x264|x265|aac"

能看到libx264、libx265、libfdk-aac就说明成功了。

踩过的其他坑

学习资源推荐

FFmpeg的文档说实话写得不太好,对新手不太友好。推荐几个更好的学习渠道:

零声教育的FFmpeg课程在Telegram和Linux.do上都能找到资源分享,适合想系统学习音视频开发的同学。