目录
[1. 先想清楚:你要哪种 FFmpeg 6](#1. 先想清楚:你要哪种 FFmpeg 6)
[2. 基础编译工具链](#2. 基础编译工具链)
[3. 可选编解码依赖(决定你 FFmpeg 能干啥)](#3. 可选编解码依赖(决定你 FFmpeg 能干啥))
[4. 拿源码](#4. 拿源码)
[5. configure:最核心的一步](#5. configure:最核心的一步)
[5.1 路径与库形态](#5.1 路径与库形态)
[5.2 协议开关(非常关键)](#5.2 协议开关(非常关键))
[5.3 一个"全能型"configure(Ubuntu 实测可用)](#5.3 一个“全能型”configure(Ubuntu 实测可用))
[5.4 硬件加速追加项(有卡才加)](#5.4 硬件加速追加项(有卡才加))
[6. 编译与安装](#6. 编译与安装)
[7. 验证](#7. 验证)
[8. 常见坑(编 FFmpeg 6 必踩)](#8. 常见坑(编 FFmpeg 6 必踩))
[9. 一个生产建议组合](#9. 一个生产建议组合)
觉得有用,就请您帮忙点赞转发收藏吧,您的鼓励是我创作的动力,多谢看官。
由于能力水平有限,文中的错误或不严谨的地方在所难免,还请批评指正。
本文按「为什么要从源码编 → 环境准备 → 拿源码 → configure 核心选项 → make/install → 验证 → 常见坑」的顺序,把 FFmpeg 6.x(6.0 / 6.1.x,Linux 平台) 的编译讲透。以 Ubuntu/Debian 为主,CentOS/RHEL 给对照。
1. 先想清楚:你要哪种 FFmpeg 6
-
系统包管理器版 :
apt install ffmpeg→ 快,但版本老(常是 4.x/5.x),缺 libx264 外部控制、NVENC、AV1 编码等。 -
源码定制版:自己选编码器、静态/动态、硬件加速 → 这才是"详细编译"的意义。
-
FFmpeg 6系列主流稳定线:6.0(2023)、6.1.x(LTS 性质,推荐 6.1.1)。
2. 基础编译工具链
Ubuntu / Debian:
sudo apt update
sudo apt install -y \
build-essential \ # gcc/g++/make
nasm yasm \ # 汇编优化(x264/x265 必需)
pkg-config libtool autoconf automake cmake \
git
CentOS / RHEL(8+):
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y nasm yasm pkgconfig libtool cmake git
没有 nasm/yasm,configure 会退化但 x264 性能掉一大截;FFmpeg 6 默认优先 nasm。
3. 可选编解码依赖(决定你 FFmpeg 能干啥)
最常用的"全功能"依赖:
sudo apt install -y \
libx264-dev \ # H.264 编码(要 --enable-gpl)
libx265-dev \ # H.265/HEVC(要 --enable-gpl)
libvpx-dev \ # VP8/VP9
libmp3lame-dev \ # MP3 编码
libopus-dev \ # Opus
libfdk-aac-dev \ # 高质量 AAC(要 --enable-nonfree)
libvorbis-dev \
libass-dev libfreetype6-dev \ # 字幕/水印
libnuma-dev \ # x265 多核 NUMA
libssl-dev # 网络/https 拉流
AV1 相关(可选):
sudo apt install -y libdav1d-dev libsvtav1-dev # 解码 dav1d / 编码 svt-av1
硬件加速依赖(按需):
-
Intel VAAPI/QSV:
libva-dev libva-drm2 intel-media-va-driver-non-free -
NVIDIA NVENC:
nvidia-driver + cuda-toolkit,configure 加--enable-cuda-nvcc --enable-libnpp -
AMD/通用:
-libdrm-dev libvulkan-dev
4. 拿源码
两种方式:
A. 官方 release tarball(可校验,推荐生产)
wget https://ffmpeg.org/releases/ffmpeg-6.1.1.tar.xz
sha256sum ffmpeg-6.1.1.tar.xz # 去官网比对 checksum
tar xf ffmpeg-6.1.1.tar.xz
cd ffmpeg-6.1.1
B. Git 切稳定分支(开发向)
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
git checkout release/6.1
5. configure:最核心的一步
5.1 路径与库形态
-
--prefix=/usr/local/ffmpeg6:装到独立目录,不覆盖系统/usr/bin/ffmpeg -
--enable-shared:生成.so,二进制小,但运行期要ldconfig -
--disable-shared --enable-static:单文件自包含,体积大,适合容器/分发 -
--enable-pic:要编动态库或被人链接时必须开
5.2 协议开关(非常关键)
-
--enable-gpl:用 x264/x265/libvpx 必须开,产物变 GPL -
--enable-nonfree:用 libfdk-aac 必须开,开了不能再闭源分发 -
只做内部用、不发红包闭源 → 可以
--enable-nonfree -
商业闭源分发 → 去掉 libfdk-aac,用内置
aac编码器,别开--enable-nonfree
5.3 一个"全能型"configure(Ubuntu 实测可用)
./configure \
--prefix=/usr/local/ffmpeg6 \
--enable-gpl \
--enable-nonfree \
--enable-libx264 \
--enable-libx265 \
--enable-libvpx \
--enable-libmp3lame \
--enable-libopus \
--enable-libfdk-aac \
--enable-libvorbis \
--enable-libass \
--enable-libfreetype \
--enable-openssl \
--enable-shared \
--enable-pic \
--extra-cflags="-I/usr/local/include" \
--extra-ldflags="-L/usr/local/lib"
只看 H.264 转码的最小可用:
./configure --prefix=/usr/local/ffmpeg6 --enable-gpl --enable-libx264
5.4 硬件加速追加项(有卡才加)
NVIDIA:
--enable-cuda-nvcc \
--enable-libnpp \
--enable-nvenc --enable-nvdec \
--extra-cflags="-I/usr/local/cuda/include" \
--extra-ldflags="-L/usr/local/cuda/lib64"
Intel:
--enable-vaapi --enable-libdrm --enable-opencl
configure 跑完一定看末尾输出:
Enabled outdevices / Enabled encoders里有没有libx264、h264_nvenc。没有就是依赖没找到,别硬 make。
6. 编译与安装
make -j$(nproc) # 吃满核,32 核机器十几分钟,4 核可能 20+
sudo make install
sudo ldconfig # 开了 shared 必须刷缓存
装到非标准 prefix 时,把 bin 放进 PATH:
export PATH=/usr/local/ffmpeg6/bin:$PATH
# 写进 ~/.bashrc 或 /etc/profile.d/ffmpeg6.sh
7. 验证
ffmpeg -version
# 看 configuration: 行里是否含 --enable-libx264 --enable-gpl
ffmpeg -hide_banner -encoders | grep -E 'libx264|libx265|h264_nvenc|aac'
ffmpeg -hide_banner -codecs | grep -E 'h264|hevc|vp9|av1'
转一段测试
ffmpeg -f lavfi -i testsrc=duration=3:size=1280x720:rate=30 \
-c:v libx264 -crf 23 out.mp4
8. 常见坑(编 FFmpeg 6 必踩)
-
ERROR: libx264 not found → 没装libx264-dev,或装了但 configure 没--enable-gpl。 -
运行
ffmpeg: command not found → prefix 不在 PATH,或 shared 版没ldconfig。 -
symbol lookup error/ 用的还是旧版 → 系统/usr/bin/ffmpeg还在,which ffmpeg确认顺序,或hash -r。 -
nonfree 后拿去卖闭源产品 → 许可证违规;去掉 libfdk-aac 用原生 aac 最安全。
-
CUDA 编出报
nvcc not found → 没装nvidia-cuda-toolkit,或--extra-cflags路径错。 -
静态链接时要
--enable-pic否则 Python ctypes / 某些 C++ 工程链不上。 -
想最小体积 → 用
--disable-everything再按需开 decoder/encoder/muxer,能砍到几 MB。
9. 一个生产建议组合
-
服务器转码集群:6.1.1 + 动态库 + gpl + x264/x265 + opus + vaapi/nvenc ,独立 prefix,容器里只拷
/usr/local/ffmpeg6。 -
分发给他人的 CLI 工具:静态链接 + 不开 nonfree,单文件丢哪都能跑。
-
只做播放/拉流:关掉 libx264/libx265 编码器,只留解码,体积小很多。