2. FFmpeg基础回顾

说实话,FFmpeg 的环境搭建是很多初学者第一道坎。我见过不少同学在群里问「为什么我装好了跑不起来?」——十有八九是版本冲突或者路径没配好。这一章咱们就把 Windows、macOS、Linux 三个平台都捋一遍,顺便聊聊源码编译和静态构建那些坑。

核心思路:别贪快。先搞清楚你的使用场景——是临时用用,还是深度开发?前者直接装预编译包,后者必须走源码编译。我自己的习惯是:桌面环境用包管理器,CI/CD 环境用静态构建。

2.1 三平台快速安装

先给个速查表,方便你以后忘了回来翻。

平台 推荐方式 命令/步骤 备注
Windows 官方预编译包 下载 .7z 解压 → 配置 PATH 推荐 BtbN 构建版
macOS Homebrew brew install ffmpeg 会自动处理依赖
Linux (Ubuntu/Debian) apt sudo apt install ffmpeg 版本可能偏旧
Linux (CentOS/RHEL) EPEL + yum sudo yum install ffmpeg 需先启用 EPEL

2.2 Windows 安装详解

Windows 用户我建议直接去 gyan.dev 或者 BtbN 的 GitHub Releases 页面下载。别去官网那个「Download」按钮——它跳转的是源码,不是二进制。

  1. 下载 ffmpeg-release-full.7z(选带 shared 的版本)
  2. 解压到 C:\ffmpeg
  3. 把 C:\ffmpeg\bin 加到系统环境变量 PATH
  4. 打开 cmd,输入 ffmpeg -version

我曾经遇到过一个问题:解压后直接双击 ffmpeg.exe,窗口闪一下就没了。别慌,这是正常的——FFmpeg 是命令行工具,不是 GUI 程序。你需要在终端里调用它。

2.3 macOS 安装详解

macOS 用户就幸福多了。Homebrew 一把梭:

# 安装 Homebrew(如果没有)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装 FFmpeg
brew install ffmpeg

# 验证
ffmpeg -version

Homebrew 会自动拉取 x264、x265、libvpx 等常用编码库。我个人习惯加个 --with-fdk-aac 参数,因为 AAC 编码器在商业场景下更常用。不过要注意,fdk-aac 的许可证和 GPL 不兼容,如果你要分发二进制文件,得用 --enable-nonfree。

小技巧:如果你在 macOS 上遇到「无法验证开发者」的提示,去「系统偏好设置 → 安全性与隐私」里允许运行即可。这是 macOS 的 Gatekeeper 机制在作怪。

2.4 Linux 安装详解

Linux 下最省事的是用包管理器。但有个问题——官方源里的 FFmpeg 版本通常比较老。比如 Ubuntu 20.04 自带的还是 4.2.x,而最新版已经到 6.x 了。

我建议用 static builds 或者 johnvansickle.com 提供的静态构建版:

# 下载静态构建(以 Linux x86_64 为例)
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz

# 解压
tar -xf ffmpeg-release-amd64-static.tar.xz

# 直接使用(无需安装)
cd ffmpeg-*-amd64-static
./ffmpeg -version

静态构建的好处是「拎包入住」——所有依赖都编译进去了,不会出现 libavcodec.so.58: cannot open shared object file 这种烦人的错误。

2.5 源码编译:从零开始

为什么要自己编译?说白了,预编译包不一定包含你需要的编码器。比如你想用 libaom-av1 编码 AV1,或者想开启 --enable-libvmaf 做画质评估,那就得自己动手。

我以 Ubuntu 为例,走一遍完整流程:

# 1. 安装编译工具链
sudo apt update
sudo apt install build-essential cmake git pkg-config

# 2. 安装常用编码库依赖
sudo apt install libx264-dev libx265-dev libvpx-dev libfdk-aac-dev libmp3lame-dev libopus-dev

# 3. 克隆 FFmpeg 源码
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg

# 4. 配置编译选项
./configure --enable-gpl --enable-libx264 --enable-libx265 --enable-libvpx \
            --enable-libfdk-aac --enable-libmp3lame --enable-libopus \
            --enable-nonfree

# 5. 编译(-j 后面的数字是 CPU 核心数,别设太大,小心电脑卡死)
make -j$(nproc)

# 6. 安装
sudo make install

注意:--enable-nonfree 和 --enable-gpl 不能同时和 --enable-libfdk-aac 一起用?其实可以,但生成的二进制文件会受非自由许可证约束。如果你只是自己用,无所谓;如果要分发,得小心许可证问题。

编译时间取决于你的机器。我当年用一台 4 核的笔记本编译,大概花了 15 分钟。现在用 16 核的机器,3 分钟搞定。嗯,硬件升级确实爽。

2.6 静态构建:一次编译,到处运行

静态构建和源码编译的区别在于:静态构建把所有 .so 文件都打包进了一个二进制文件里。你想想看,这样你只需要一个 ffmpeg 文件,就能在任何同架构的 Linux 系统上跑——不需要装任何依赖。

静态构建的编译命令稍微复杂一点:

./configure --enable-gpl --enable-libx264 --enable-libx265 --enable-libvpx \
            --enable-libfdk-aac --enable-libmp3lame --enable-libopus \
            --enable-nonfree --disable-shared --enable-static \
            --pkg-config-flags="--static"

make -j$(nproc)

关键参数是 --disable-shared --enable-static。编译出来的 ffmpeg 文件体积会大一些(大概 30-50MB),但胜在省心。

我个人习惯:在 CI/CD 流水线里用静态构建。比如 Docker 镜像里,我直接 COPY 一个静态 ffmpeg 进去,连 apt install 都省了。镜像体积反而更小。

2.7 验证安装与常用命令测试

装完了别急着走。先跑几个命令确认一下:

# 查看版本和编译选项
ffmpeg -version

# 查看支持的编码器(重点看有没有 libx264、libx265)
ffmpeg -encoders | grep libx

# 查看支持的封装格式
ffmpeg -formats | grep mp4

# 查看设备(Windows/macOS 上可以看摄像头)
ffmpeg -devices

然后找个视频文件做转码测试:

# 转码为 H.264
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

# 提取音频
ffmpeg -i input.mp4 -vn -c:a copy audio.aac

# 截图
ffmpeg -i input.mp4 -ss 00:01:00 -vframes 1 snapshot.png

如果这些命令都能跑通,恭喜你——环境搭建成功了。

2.8 知识体系总览

下面这张图把本章的核心逻辑串起来了。你可以把它当作「环境搭建决策树」:

FFmpeg 环境搭建决策树 FFmpeg 环境搭建决策树 你的使用场景是什么? 快速使用 / 临时测试 深度开发 / 定制编码器 Windows: 预编译包 + PATH macOS: Homebrew 一键安装 Linux: 包管理器 / 静态构建 源码编译: git clone + configure 静态构建: --enable-static CI/CD: 静态二进制 + Docker 验证: ffmpeg -version + 转码测试 提示:静态构建适合分发,源码编译适合定制,预编译包适合快速上手。按需选择即可。

2.9 常见问题与避坑

  • 「ffmpeg 不是内部或外部命令」——Windows 上 90% 是 PATH 没配好。检查一下 echo %PATH% 里有没有你的 ffmpeg\bin 路径。
  • 「libx264 未找到」——编译时没装 libx264-dev,或者 configure 时没加 --enable-libx264。回头检查一下依赖。
  • 「macOS 上 brew install 报错」——可能是 Xcode Command Line Tools 没装。运行 xcode-select --install 补上。
  • 「Linux 上 make 到一半卡死」——内存不够了。试试 make -j2 减少并行任务数。

最后说一句:环境搭建这东西,第一次折腾可能花一两个小时。但只要你把步骤记下来,下次就是五分钟的事。我自己的笔记里专门有个「FFmpeg 环境搭建备忘」,每次换电脑都照着来一遍,从来没出过问题。