目录
1. 先想清楚:你要哪种 FFmpeg 6
2. 基础编译工具链
3. 可选编解码依赖(决定你 FFmpeg 能干啥)
4. 拿源码
5. configure:最核心的一步
5.1 路径与库形态
5.2 协议开关(非常关键)
5.3 一个“全能型”configure(Ubuntu 实测可用)
5.4 硬件加速追加项(有卡才加)
6. 编译与安装
7. 验证
8. 常见坑(编 FFmpeg 6 必踩)
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 \ gitCentOS / 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-freeNVIDIA NVENC:
nvidia-driver + cuda-toolkit,configure 加--enable-cuda-nvcc --enable-libnppAMD/通用:
-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.1B. Git 切稳定分支(开发向)
git clone https://git.ffmpeg.org/ffmpeg.git cd ffmpeg git checkout release/6.15. 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-libx2645.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-openclconfigure 跑完一定看末尾输出:
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.sh7. 验证
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.mp48. 常见坑(编 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 编码器,只留解码,体积小很多。