翻译自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
已经可以使用了(ffprobe
、lame
、x264
同理),本教程剩余部分介绍如何更新或者移除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步骤一样运行./configure
,make
和make 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邮件列表,提出你的问题。