说一说FFmpeg6在Linux平台的编译

目录

[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里有没有 libx264h264_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 必踩)

  1. ERROR: libx264 not found ​ → 没装 libx264-dev,或装了但 configure 没 --enable-gpl

  2. 运行 ffmpeg: command not found ​ → prefix 不在 PATH,或 shared 版没 ldconfig

  3. symbol lookup error/ 用的还是旧版 ​ → 系统 /usr/bin/ffmpeg还在,which ffmpeg确认顺序,或 hash -r

  4. nonfree 后拿去卖闭源产品​ → 许可证违规;去掉 libfdk-aac 用原生 aac 最安全。

  5. CUDA 编出报 nvcc not found ​ → 没装 nvidia-cuda-toolkit,或 --extra-cflags路径错。

  6. 静态链接时要 --enable-pic否则 Python ctypes / 某些 C++ 工程链不上

  7. 想最小体积 ​ → 用 --disable-everything再按需开 decoder/encoder/muxer,能砍到几 MB。


9. 一个生产建议组合

  • 服务器转码集群:6.1.1 + 动态库 + gpl + x264/x265 + opus + vaapi/nvenc ,独立 prefix,容器里只拷 /usr/local/ffmpeg6

  • 分发给他人的 CLI 工具:静态链接 + 不开 nonfree,单文件丢哪都能跑。

  • 只做播放/拉流:关掉 libx264/libx265 编码器,只留解码,体积小很多。

相关推荐
玫幽倩1 小时前
2026黄河流域公安院校-电子物证单项赛(程序逆向分析+服务器取证)
运维·服务器·python·电子取证·逆向·程序分析·服务器取证
IT摆渡者2 小时前
VM EXSI7.0存储硬盘故障处理
大数据·linux·github
赵民勇2 小时前
systemd-cgtop命令详解
linux·运维
Zhu7582 小时前
在docker环境部署frp
运维·docker·容器
用户518186005662 小时前
FFmpeg 剪辑:为什么 `-c copy` 往往做不到帧准确剪切
ffmpeg
hhwyqwqhhwy2 小时前
Ubuntu22.04 安装vitis
linux
运维行者_3 小时前
企业带宽监控工具实战:网络流量分析与异常排查的5个关键能力
运维·服务器·开发语言·网络·分布式·后端·php
March.s3 小时前
Nginx 服务器反向代理实战指南
服务器·nginx·github
刚入门的大一新生3 小时前
Linux-Linux第一个系统程序-进度条
linux·运维·服务器