强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

FFmpeg 多媒体处理教程 / 安装与配置

安装与配置

概述

本章介绍如何在不同操作系统上安装 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

使用预编译二进制包

  1. 下载 FFmpeg:

  2. 安装步骤:

    # 解压下载的文件
    # 将 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-libx264H.264 编码器libx264
--enable-libx265H.265/HEVC 编码器libx265
--enable-libvpxVP8/VP9 编解码器libvpx
--enable-libaomAV1 编解码器libaom
--enable-libfdk-aacAAC 编码器libfdk-aac
--enable-libmp3lameMP3 编码器libmp3lame
--enable-libopusOpus 编解码器libopus
--enable-libvorbisVorbis 编码器libvorbis
--enable-libtheoraTheora 编码器libtheora

硬件加速选项

选项说明平台
--enable-vaapiVAAPI 加速Linux
--enable-vdpauVDPAU 加速Linux
--enable-nvencNVIDIA 编码加速跨平台
--enable-nvdecNVIDIA 解码加速跨平台
--enable-cudaCUDA 支持跨平台
--enable-qsvIntel QSV 加速跨平台
--enable-videotoolboxVideoToolbox 加速macOS
--enable-rkmppRockchip MPP 加速Linux

滤镜选项

选项说明依赖
--enable-libassASS/SSA 字幕渲染libass
--enable-libfreetype字体渲染FreeType
--enable-libfontconfig字体配置Fontconfig
--enable-libfribidi双向文本FriBidi
--enable-libharfbuzz文本整形HarfBuzz

网络协议选项

选项说明依赖
--enable-gnutlsGnuTLS 支持GnuTLS
--enable-opensslOpenSSL 支持OpenSSL
--enable-librtmpRTMP 支持librtmp
--enable-libsshSSH 支持libssh

其他选项

选项说明依赖
--enable-libzimg图像缩放zimg
--enable-libdav1dAV1 解码器dav1d
--enable-libsvtav1SVT-AV1 编码器SVT-AV1
--enable-libwebpWebP 支持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

注意事项

  1. 版权问题:使用非自由编解码器(如 libfdk-aac)需要 --enable-nonfree
  2. 专利问题:H.264、H.265 等编解码器可能涉及专利,商业使用需谨慎
  3. 性能考虑:编译时启用优化选项(--enable-optimizations)可提高性能
  4. 兼容性:不同平台的硬件加速支持程度不同,需查阅文档
  5. 更新维护:定期更新 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

扩展阅读

  1. FFmpeg 官方编译指南
  2. NVIDIA Video Codec SDK
  3. Intel Media SDK
  4. VAAPI 文档
  5. VideoToolbox 文档

总结

本章介绍了 FFmpeg 在各平台的安装方法、编译选项、硬件加速配置和第三方库集成。通过本章的学习,您应该能够:

  • 在不同操作系统上安装 FFmpeg
  • 理解并配置编译选项
  • 配置硬件加速支持
  • 集成第三方编解码器库

在下一章中,我们将学习 FFmpeg 的基本语法和使用方法。