安装与配置
安装与配置
概述
本章介绍如何在不同操作系统上安装 FFmpeg,包括预编译二进制包和从源码编译两种方式,以及如何配置硬件加速和第三方库。
各平台安装方法
Linux
Ubuntu/Debian
# 更新包索引
sudo apt update
# 安装 FFmpeg(来自官方仓库)
sudo apt install ffmpeg
# 验证安装
ffmpeg -version
# 查看编译配置
ffmpeg -buildconf
使用 PPA 安装最新版本:
# 添加 PPA 仓库
sudo add-apt-repository ppa:ubuntuhandbook1/ffmpeg6
# 更新包索引
sudo apt update
# 升级 FFmpeg
sudo apt upgrade ffmpeg
CentOS/RHEL/Fedora
# CentOS/RHEL(需要 EPEL 仓库)
sudo yum install epel-release
sudo yum install ffmpeg
# Fedora
sudo dnf install ffmpeg
使用 RPM Fusion 仓库:
# 安装 RPM Fusion 仓库
sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
# 安装 FFmpeg
sudo dnf install ffmpeg ffmpeg-devel
Arch Linux
# 安装 FFmpeg
sudo pacman -S ffmpeg
# 安装完整版本(包含所有编解码器)
sudo pacman -S ffmpeg-full
从源码编译(通用 Linux)
# 安装依赖
sudo apt install -y \
autoconf \
automake \
build-essential \
cmake \
git \
libass-dev \
libfreetype6-dev \
libgnutls28-dev \
libmp3lame-dev \
libopus-dev \
libsdl2-dev \
libtool \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
meson \
ninja-build \
pkg-config \
texinfo \
wget \
yasm \
zlib1g-dev
# 创建工作目录
mkdir -p ~/ffmpeg_sources ~/ffmpeg_build ~/bin
# 安装 NASM(汇编器)
cd ~/ffmpeg_sources
wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.bz2
tar xjvf nasm-2.15.05.tar.bz2
cd nasm-2.15.05
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make -j$(nproc)
make install
# 安装 YASM
cd ~/ffmpeg_sources
wget -O yasm-1.3.0.tar.gz https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make -j$(nproc)
make install
# 安装 libx264
cd ~/ffmpeg_sources
git -C x264 pull 2>/dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic
PATH="$HOME/bin:$PATH" make -j$(nproc)
make install
# 安装 libx265
cd ~/ffmpeg_sources
git -C x265_git pull 2>/dev/null || git clone https://bitbucket.org/multicoreware/x265_git.git
cd x265_git/build/linux
PATH="$HOME/bin:$PATH" cmake -G Ninja -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source
ninja
ninja install
# 安装 libvpx
cd ~/ffmpeg_sources
git -C libvpx pull 2>/dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
cd libvpx
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
PATH="$HOME/bin:$PATH" make -j$(nproc)
make install
# 安装 libfdk-aac
cd ~/ffmpeg_sources
git -C fdk-aac pull 2>/dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac
cd fdk-aac
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make -j$(nproc)
make install
# 安装 libmp3lame
cd ~/ffmpeg_sources
wget -O lame-3.100.tar.gz https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
tar xzvf lame-3.100.tar.gz
cd lame-3.100
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm
PATH="$HOME/bin:$PATH" make -j$(nproc)
make install
# 安装 libopus
cd ~/ffmpeg_sources
git -C opus pull 2>/dev/null || git clone --depth 1 https://github.com/xiph/opus.git
cd opus
./autogen.sh
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make -j$(nproc)
make install
# 安装 libaom(AV1)
cd ~/ffmpeg_sources
git -C aom pull 2>/dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom
mkdir -p aom_build
cd aom_build
PATH="$HOME/bin:$PATH" cmake -G Ninja -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off -DENABLE_NASM=on -DENABLE_TESTS=off -DENABLE_EXAMPLES=off ../aom
ninja
ninja install
# 安装 FFmpeg
cd ~/ffmpeg_sources
git -C ffmpeg pull 2>/dev/null || git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--extra-libs="-lpthread -lm" \
--ld="g++" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-gnutls \
--enable-libaom \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree
PATH="$HOME/bin:$PATH" make -j$(nproc)
make install
hash -r
macOS
使用 Homebrew
# 安装 Homebrew(如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装 FFmpeg(基础版本)
brew install ffmpeg
# 安装完整版本(包含所有编解码器)
brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-libass --with-libvorbis --with-libvpx --with-opus --with-x264 --with-x265
# 验证安装
ffmpeg -version
使用 MacPorts
# 安装 MacPorts(如果未安装)
# 从 https://www.macports.org/install.php 下载安装
# 安装 FFmpeg
sudo port install ffmpeg
# 安装完整版本
sudo port install ffmpeg +nonfree
从源码编译(macOS)
# 安装 Xcode 命令行工具
xcode-select --install
# 安装依赖
brew install automake cmake git libtool nasm pkg-config sdl2 wget yasm
# 后续步骤与 Linux 源码编译类似
Windows
使用预编译二进制包
下载 FFmpeg:
- 访问 https://ffmpeg.org/download.html
- 选择 Windows 版本
- 下载 gyan.dev 或 BtbN 的构建版本
安装步骤:
# 解压下载的文件 # 将 bin 目录添加到系统 PATH # 以管理员身份运行 PowerShell [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\ffmpeg\bin", "Machine") # 重新打开命令提示符,验证安装 ffmpeg -version
使用 Chocolatey
# 安装 Chocolatey(如果未安装)
# 以管理员身份运行 PowerShell
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# 安装 FFmpeg
choco install ffmpeg
使用 Scoop
# 安装 Scoop(如果未安装)
# 以普通用户身份运行 PowerShell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
# 添加仓库
scoop bucket add main
# 安装 FFmpeg
scoop install ffmpeg
使用 winget
# 安装 FFmpeg
winget install ffmpeg
# 验证安装
ffmpeg -version
编译选项详解
通用选项
| 选项 | 说明 | 默认值 |
|---|---|---|
--prefix=<path> | 安装路径 | /usr/local |
--bindir=<path> | 可执行文件路径 | <prefix>/bin |
--libdir=<path> | 库文件路径 | <prefix>/lib |
--incdir=<path> | 头文件路径 | <prefix>/include |
--enable-shared | 构建动态库 | 否 |
--enable-static | 构建静态库 | 是 |
--enable-pic | 生成位置无关代码 | 否 |
--enable-debug | 启用调试信息 | 否 |
--enable-optimizations | 启用优化 | 是 |
--enable-stripping | 去除符号表 | 是 |
许可选项
| 选项 | 说明 |
|---|---|
--enable-gpl | 启用 GPL 许可 |
--enable-nonfree | 启用非自由许可 |
--enable-version3 | 启用 (L)GPLv3 |
编解码器选项
| 选项 | 说明 | 依赖 |
|---|---|---|
--enable-libx264 | H.264 编码器 | libx264 |
--enable-libx265 | H.265/HEVC 编码器 | libx265 |
--enable-libvpx | VP8/VP9 编解码器 | libvpx |
--enable-libaom | AV1 编解码器 | libaom |
--enable-libfdk-aac | AAC 编码器 | libfdk-aac |
--enable-libmp3lame | MP3 编码器 | libmp3lame |
--enable-libopus | Opus 编解码器 | libopus |
--enable-libvorbis | Vorbis 编码器 | libvorbis |
--enable-libtheora | Theora 编码器 | libtheora |
硬件加速选项
| 选项 | 说明 | 平台 |
|---|---|---|
--enable-vaapi | VAAPI 加速 | Linux |
--enable-vdpau | VDPAU 加速 | Linux |
--enable-nvenc | NVIDIA 编码加速 | 跨平台 |
--enable-nvdec | NVIDIA 解码加速 | 跨平台 |
--enable-cuda | CUDA 支持 | 跨平台 |
--enable-qsv | Intel QSV 加速 | 跨平台 |
--enable-videotoolbox | VideoToolbox 加速 | macOS |
--enable-rkmpp | Rockchip MPP 加速 | Linux |
滤镜选项
| 选项 | 说明 | 依赖 |
|---|---|---|
--enable-libass | ASS/SSA 字幕渲染 | libass |
--enable-libfreetype | 字体渲染 | FreeType |
--enable-libfontconfig | 字体配置 | Fontconfig |
--enable-libfribidi | 双向文本 | FriBidi |
--enable-libharfbuzz | 文本整形 | HarfBuzz |
网络协议选项
| 选项 | 说明 | 依赖 |
|---|---|---|
--enable-gnutls | GnuTLS 支持 | GnuTLS |
--enable-openssl | OpenSSL 支持 | OpenSSL |
--enable-librtmp | RTMP 支持 | librtmp |
--enable-libssh | SSH 支持 | libssh |
其他选项
| 选项 | 说明 | 依赖 |
|---|---|---|
--enable-libzimg | 图像缩放 | zimg |
--enable-libdav1d | AV1 解码器 | dav1d |
--enable-libsvtav1 | SVT-AV1 编码器 | SVT-AV1 |
--enable-libwebp | WebP 支持 | libwebp |
硬件加速配置
NVIDIA GPU
安装 NVIDIA 驱动
# Ubuntu
sudo apt install nvidia-driver-535
# 验证安装
nvidia-smi
安装 NVIDIA Codec Headers
# 克隆 NVIDIA Codec Headers
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
# 安装
make install PREFIX="$HOME/ffmpeg_build"
编译 FFmpeg 支持 NVIDIA
./configure \
--prefix="$HOME/ffmpeg_build" \
--enable-gpl \
--enable-nonfree \
--enable-cuda-nvcc \
--enable-libnpp \
--enable-cuvid \
--enable-nvenc \
--enable-nvdec \
--extra-cflags="-I/usr/local/cuda/include" \
--extra-ldflags="-L/usr/local/cuda/lib64"
Intel QSV
安装 Intel Media SDK
# Ubuntu
sudo apt install intel-media-va-driver vainfo
# 安装 Intel Media SDK
sudo apt install libmfx1 libmfx-tools libmfx-dev
编译 FFmpeg 支持 QSV
./configure \
--prefix="$HOME/ffmpeg_build" \
--enable-gpl \
--enable-nonfree \
--enable-libmfx
AMD VAAPI
安装 VAAPI 驱动
# Ubuntu
sudo apt install mesa-va-drivers vainfo
# 验证安装
vainfo
编译 FFmpeg 支持 VAAPI
./configure \
--prefix="$HOME/ffmpeg_build" \
--enable-gpl \
--enable-vaapi
Apple VideoToolbox
检查 VideoToolbox 支持
# macOS 已内置 VideoToolbox
# 验证支持
ffmpeg -hwaccels
编译 FFmpeg 支持 VideoToolbox
./configure \
--prefix="$HOME/ffmpeg_build" \
--enable-gpl \
--enable-videotoolbox
第三方库集成
视频编解码器
libx264(H.264)
# 安装依赖
sudo apt install libx264-dev
# 编译 FFmpeg
./configure --enable-libx264
测试命令:
# 使用 libx264 编码
ffmpeg -i input.mp4 -c:v libx264 -preset medium -crf 23 output.mp4
# 查看支持的参数
ffmpeg -h encoder=libx264
libx265(H.265/HEVC)
# 安装依赖
sudo apt install libx265-dev
# 编译 FFmpeg
./configure --enable-libx265
测试命令:
# 使用 libx265 编码
ffmpeg -i input.mp4 -c:v libx265 -preset medium -crf 28 output.mp4
# 查看支持的参数
ffmpeg -h encoder=libx265
libvpx(VP8/VP9)
# 安装依赖
sudo apt install libvpx-dev
# 编译 FFmpeg
./configure --enable-libvpx
测试命令:
# VP8 编码
ffmpeg -i input.mp4 -c:v libvpx -b:v 2M output.webm
# VP9 编码
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm
libaom(AV1)
# 安装依赖(需要从源码编译)
git clone --depth 1 https://aomedia.googlesource.com/aom
cd aom
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..
make -j$(nproc)
sudo make install
# 编译 FFmpeg
./configure --enable-libaom
测试命令:
# AV1 编码(较慢,适合测试)
ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 0 output.mkv
音频编解码器
libfdk-aac(AAC)
# 安装依赖
sudo apt install libfdk-aac-dev
# 编译 FFmpeg(需要 --enable-nonfree)
./configure --enable-libfdk-aac --enable-nonfree
测试命令:
# AAC 编码
ffmpeg -i input.wav -c:a libfdk-aac -b:a 192k output.m4a
libmp3lame(MP3)
# 安装依赖
sudo apt install libmp3lame-dev
# 编译 FFmpeg
./configure --enable-libmp3lame
测试命令:
# MP3 编码
ffmpeg -i input.wav -c:a libmp3lame -q:a 2 output.mp3
libopus(Opus)
# 安装依赖
sudo apt install libopus-dev
# 编译 FFmpeg
./configure --enable-libopus
测试命令:
# Opus 编码
ffmpeg -i input.wav -c:a libopus -b:a 128k output.opus
字幕和字体
libass(ASS/SSA 字幕)
# 安装依赖
sudo apt install libass-dev
# 编译 FFmpeg
./configure --enable-libass
FreeType(字体渲染)
# 安装依赖
sudo apt install libfreetype6-dev
# 编译 FFmpeg
./configure --enable-libfreetype
其他库
libzimg(高质量图像缩放)
# 从源码编译
git clone https://github.com/sekrit-twc/zimg.git
cd zimg
./autogen.sh
./configure
make -j$(nproc)
sudo make install
# 编译 FFmpeg
./configure --enable-libzimg
libdav1d(快速 AV1 解码器)
# 安装依赖
sudo apt install libdav1d-dev
# 编译 FFmpeg
./configure --enable-libdav1d
配置验证
验证安装
# 查看版本
ffmpeg -version
# 查看编译配置
ffmpeg -buildconf
# 查看支持的编解码器
ffmpeg -codecs
# 查看支持的格式
ffmpeg -formats
# 查看支持的滤镜
ffmpeg -filters
# 查看硬件加速器
ffmpeg -hwaccels
测试编解码器
# 测试 H.264 编码
ffmpeg -f lavfi -i testsrc=duration=5:size=640x480:rate=30 -c:v libx264 -y test_h264.mp4
# 测试 H.265 编码
ffmpeg -f lavfi -i testsrc=duration=5:size=640x480:rate=30 -c:v libx265 -y test_h265.mp4
# 测试 VP9 编码
ffmpeg -f lavfi -i testsrc=duration=5:size=640x480:rate=30 -c:v libvpx-vp9 -y test_vp9.webm
# 测试音频编码
ffmpeg -f lavfi -i sine=frequency=1000:duration=5 -c:a libmp3lame -y test_mp3.mp3
版本管理
多版本共存
# 使用不同安装路径
# FFmpeg 5.x
./configure --prefix=/opt/ffmpeg5
# FFmpeg 6.x
./configure --prefix=/opt/ffmpeg6
# 使用 update-alternatives 管理
sudo update-alternatives --install /usr/bin/ffmpeg ffmpeg /opt/ffmpeg5/bin/ffmpeg 50
sudo update-alternatives --install /usr/bin/ffmpeg ffmpeg /opt/ffmpeg6/bin/ffmpeg 60
# 切换版本
sudo update-alternatives --config ffmpeg
版本查看脚本
#!/bin/bash
# ffmpeg_version_info.sh
echo "=== FFmpeg 版本信息 ==="
ffmpeg -version | head -1
echo -e "\n=== 编译配置 ==="
ffmpeg -buildconf 2>&1 | head -20
echo -e "\n=== 支持的编解码器数量 ==="
echo "视频编码器: $(ffmpeg -encoders 2>/dev/null | grep '^ V' | wc -l)"
echo "视频解码器: $(ffmpeg -decoders 2>/dev/null | grep '^ V' | wc -l)"
echo "音频编码器: $(ffmpeg -encoders 2>/dev/null | grep '^ A' | wc -l)"
echo "音频解码器: $(ffmpeg -decoders 2>/dev/null | grep '^ A' | wc -l)"
echo -e "\n=== 支持的格式数量 ==="
echo "容器格式: $(ffmpeg -formats 2>/dev/null | grep '^ D' | wc -l)"
echo -e "\n=== 硬件加速器 ==="
ffmpeg -hwaccels 2>/dev/null | tail -n +2
常见问题
问题 1:找不到编解码器
错误信息:
Unknown encoder 'libx264'
解决方案:
# 检查是否安装了 libx264
dpkg -l | grep libx264
# 如果未安装
sudo apt install libx264-dev
# 重新编译 FFmpeg
./configure --enable-libx264
问题 2:权限不足
错误信息:
Permission denied
解决方案:
# 使用 sudo
sudo make install
# 或者安装到用户目录
./configure --prefix=$HOME/ffmpeg_build
问题 3:依赖库版本不匹配
错误信息:
libx264.so.164: cannot open shared object file
解决方案:
# 更新库缓存
sudo ldconfig
# 或者静态编译
./configure --enable-static --disable-shared
问题 4:硬件加速不工作
错误信息:
No device available for decoder
解决方案:
# 检查硬件加速支持
ffmpeg -hwaccels
# 检查设备权限
ls -la /dev/dri/
# 添加用户到 video 组
sudo usermod -aG video $USER
注意事项
- 版权问题:使用非自由编解码器(如 libfdk-aac)需要
--enable-nonfree - 专利问题:H.264、H.265 等编解码器可能涉及专利,商业使用需谨慎
- 性能考虑:编译时启用优化选项(
--enable-optimizations)可提高性能 - 兼容性:不同平台的硬件加速支持程度不同,需查阅文档
- 更新维护:定期更新 FFmpeg 以获取安全补丁和新特性
业务场景
场景 1:视频处理服务器
需求: 搭建高性能视频处理服务器
配置建议:
# 编译选项
./configure \
--enable-gpl \
--enable-nonfree \
--enable-libx264 \
--enable-libx265 \
--enable-nvenc \
--enable-nvdec \
--enable-cuda \
--enable-optimizations \
--enable-stripping
场景 2:流媒体服务器
需求: 搭建流媒体转码服务器
配置建议:
# 编译选项
./configure \
--enable-gpl \
--enable-nonfree \
--enable-libx264 \
--enable-libfdk-aac \
--enable-libopus \
--enable-openssl \
--enable-librtmp
场景 3:桌面多媒体应用
需求: 开发桌面多媒体播放器
配置建议:
# 编译选项
./configure \
--enable-gpl \
--enable-sdl2 \
--enable-libass \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus
扩展阅读
总结
本章介绍了 FFmpeg 在各平台的安装方法、编译选项、硬件加速配置和第三方库集成。通过本章的学习,您应该能够:
- 在不同操作系统上安装 FFmpeg
- 理解并配置编译选项
- 配置硬件加速支持
- 集成第三方编解码器库
在下一章中,我们将学习 FFmpeg 的基本语法和使用方法。