翻译自FFmpeg官方Wiki,顺便解决官方文档存在的一些问题。部分代码库地址已经更改,或者需要梯子。如有部分翻译不准确的地方还请指出。

在CentOS上编译FFmpeg

本教程基于最小化安装的CentOS7发行版,提供一个本地、非系统安装的FFmpeg,包含几个常用的外置编码库,本文的介绍同样适用于最新的Red Hat Enterprise Linux (RHEL)Fedora

你也可以参考Generic Compilation Guide获取更多关于编译软件的信息。

最新的静态编译同样适用于懒人或者无法编译的人,这些静态编译不支持非自由编码器。

本教程设计为非侵入式安装,会在你的主目录创建下面几个目录:

  • ffmpeg_sources - 放置下载的源码,如果你想的话,教程结束后可以删除这个目录
  • ffmpeg_build - 放置编译输出文件和安装库文件,如果你想的话,教程结束后可以删除这个目录
  • bin - 安装最终产生的可执行文件(ffmpeg,ffprobe,x264,x265等)

获取依赖

注意:#表示命令需要以超级管理员或者root用户执行,本教程只有yum命令有这个要求

获取以下依赖,这些依赖是编译必需的,但是如果你愿意的话,完成编译后可以移除(make除外,它应该是Linux默认安装的,很多东西需要它):

# yum install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel

在你的主目录新建一个目录,用于放置源码:

mkdir ~/ffmpeg_sources

编译和安装

小提示:如果你不需要特定的编码器,你可以跳过相应的步骤,在最后的FFmpeg里删除相应的./configure编译参数,例如,你不需要libvpx,跳过libvpx编译步骤,在FFmpeg编译步骤里移除--enable-libvpx

1、安装NASM

一些库会使用到的一个汇编器,强烈推荐安装,否则会导致编译非常慢。

cd ~/ffmpeg_sources
curl -O -L https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.bz2
tar xjvf nasm-2.14.02.tar.bz2
cd nasm-2.14.02
./autogen.sh
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make
make install

2、安装Yasm

一些库会使用到的一个汇编器,强烈推荐安装,否则会导致编译非常慢。

cd ~/ffmpeg_sources
curl -O -L 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
make install

3、安装libx264

H.264视频编码器,查看H.264 Encoding Guide获取更多信息和使用示例。

需要ffmpeg添加编译参数--enable-gpl--enable-libx264

cd ~/ffmpeg_sources
git clone --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static
make
make install
警告:如果你在运行./configure后,遇到Found no assembler. Minimum version is nasm-2.13或者类似的提示,是因为你的从源安装了一个过时的nasm包,运行yum remove nasm && hash -d nasm,这样x264就会使用你刚刚编译的nasm来代替。要确保将nasm添加到环境变量中。

4、安装libx265

H.265/HEVC视频编码器,查看H.265 Encoding Guide获取更多信息和使用示例。

需要ffmpeg添加编译参数--enable-gpl--enable-libx265

cd ~/ffmpeg_sources
git clone --depth 1 https://bitbucket.org/multicoreware/x265_git.git
cd ~/ffmpeg_sources/x265_git/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make
make install
这里

5、安装libfdk_aac

AAC音频编码器,查看AAC Audio Encoding Guide获取更多信息和使用示例。

需要ffmpeg添加编译参数--enable-libfdk_aac(如果包含--enable-gpl,还需要添加--enable-nonfree

cd ~/ffmpeg_sources
git clone --depth 1 https://github.com/mstorsjo/fdk-aac
cd fdk-aac
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install

6、安装libmp3lame

MP3音频编码器。

需要ffmpeg添加编译参数--enable-libmp3lame

cd ~/ffmpeg_sources
curl -O -L 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
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm
make
make install

7、安装libopus

Opus音频解码器和编码器。

需要ffmpeg添加编译参数--enable-libopus

cd ~/ffmpeg_sources
curl -O -L https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz
tar xzvf opus-1.3.1.tar.gz
cd opus-1.3.1
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make
make install

8、安装libvpx

VP8/VP9视频编码器和解码器,查看VP9 Video Encoding Guide获取更多信息和使用示例。

需要ffmpeg添加编译参数--enable-libvpx

cd ~/ffmpeg_sources
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
cd libvpx
./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make
make install

9、编译FFmpeg

cd ~/ffmpeg_sources
curl -O -L https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
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 \
  --extra-libs=-lm \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-libfdk_aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree
make
make install
hash -d ffmpeg

到此编译结束了,ffmpeg已经可以使用了(ffprobelamex264同理),本教程剩余部分介绍如何更新或者移除FFmpeg。

小贴士:如果你打算按照下面的教程更新,请保留ffmpeg_sources目录和目录下所有内容。否则你可以删掉这个目录了。

更新

FFmpeg还在活跃开发中,偶尔的会有新特性的更新和Bug修复。

首先,移除旧文件并且更新依赖。

rm -rf ~/ffmpeg_build ~/bin/{ffmpeg,ffprobe,lame,x264,x265}
# yum install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel

更新x264

cd ~/ffmpeg_sources/x264
make distclean
git pull

然后和安装libx264步骤一样运行./configuremakemake install

更新x265

cd ~/ffmpeg_sources/x265
rm -rf ~/ffmpeg_sources/x265/build/linux/*
hg update
cd ~/ffmpeg_sources/x265/build/linux

然后和安装libx264步骤一样运行cmake, make, and make install

cd ~/ffmpeg_sources/fdk_aac
make distclean
git pull

然后和安装libx265步骤一样运行./configure, make, and make install

更新libvpx

cd ~/ffmpeg_sources/libvpx
make distclean
git pull

然后和安装libvpx步骤一样运行./configure, make, and make install

更新FFmpeg

rm -rf ~/ffmpeg_sources/ffmpeg

然后重新运行编译FFmpeg步骤。

回滚本教程的变动

rm -rf ~/ffmpeg_build ~/ffmpeg_sources ~/bin/{ffmpeg,ffprobe,lame,nasm,vsyasm,x264,yasm,ytasm}
# yum erase autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool mercurial zlib-devel
hash -r

如果你需要帮助

你可以随意在#ffmpeg IRC频道,或者通过ffmpeg-user邮件列表,提出你的问题。

最后修改:2023 年 08 月 02 日
如果觉得我的文章对你有用,请随意赞赏