翻译自[FFmpeg官方Wiki](https://trac.ffmpeg.org/wiki/CompilationGuide/Centos),顺便解决官方文档存在的一些问题。部分代码库地址已经更改,或者需要梯子。如有部分翻译不准确的地方还请指出。 ## 在CentOS上编译FFmpeg 本教程基于最小化安装的**CentOS7**发行版,提供一个本地、非系统安装的FFmpeg,包含几个常用的外置编码库,本文的介绍同样适用于最新的**Red Hat Enterprise Linux (RHEL)**和**Fedora**。 你也可以参考[Generic Compilation Guide](https://trac.ffmpeg.org/wiki/GenericCompilationGuide)获取更多关于编译软件的信息。 最新的[静态编译](https://ffmpeg.org/download.html)同样适用于懒人或者无法编译的人,这些静态编译不支持**非自由**编码器。 本教程设计为非侵入式安装,会在你的主目录创建下面几个目录: - 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](https://trac.ffmpeg.org/wiki/Encode/H.264)获取更多信息和使用示例。 需要`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](https://trac.ffmpeg.org/wiki/Encode/H.265)获取更多信息和使用示例。 需要`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](https://trac.ffmpeg.org/wiki/Encode/AAC)获取更多信息和使用示例。 需要`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](https://trac.ffmpeg.org/wiki/Encode/VP9)获取更多信息和使用示例。 需要`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](#install_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](#install_libx264)步骤一样运行`cmake`, `make`, and `make install`。 ``` cd ~/ffmpeg_sources/fdk_aac make distclean git pull ``` 然后和[安装libx265](#install_libx265)步骤一样运行`./configure`, `make`, and `make install`。 #### 更新libvpx ``` cd ~/ffmpeg_sources/libvpx make distclean git pull ``` 然后和[安装libvpx](#install_libvpx)步骤一样运行`./configure`, `make`, and `make install`。 #### 更新FFmpeg ``` rm -rf ~/ffmpeg_sources/ffmpeg ``` 然后重新运行[编译FFmpeg](#compile_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](https://ffmpeg.org/contact.html)邮件列表,提出你的问题。 Loading... 翻译自[FFmpeg官方Wiki](https://trac.ffmpeg.org/wiki/CompilationGuide/Centos),顺便解决官方文档存在的一些问题。部分代码库地址已经更改,或者需要梯子。如有部分翻译不准确的地方还请指出。 ## 在CentOS上编译FFmpeg 本教程基于最小化安装的**CentOS7**发行版,提供一个本地、非系统安装的FFmpeg,包含几个常用的外置编码库,本文的介绍同样适用于最新的**Red Hat Enterprise Linux (RHEL)**和**Fedora**。 你也可以参考[Generic Compilation Guide](https://trac.ffmpeg.org/wiki/GenericCompilationGuide)获取更多关于编译软件的信息。 最新的[静态编译](https://ffmpeg.org/download.html)同样适用于懒人或者无法编译的人,这些静态编译不支持**非自由**编码器。 本教程设计为非侵入式安装,会在你的主目录创建下面几个目录: - 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 ``` <a name="install_libx264"></a> #### 3、安装libx264 H.264视频编码器,查看[H.264 Encoding Guide](https://trac.ffmpeg.org/wiki/Encode/H.264)获取更多信息和使用示例。 需要`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添加到环境变量中。 <a name="install_libx264"></a> #### 4、安装libx265 H.265/HEVC视频编码器,查看[H.265 Encoding Guide](https://trac.ffmpeg.org/wiki/Encode/H.265)获取更多信息和使用示例。 需要`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 ``` > 这里 <a name="install_libx264"></a> #### 5、安装libfdk_aac AAC音频编码器,查看[AAC Audio Encoding Guide](https://trac.ffmpeg.org/wiki/Encode/AAC)获取更多信息和使用示例。 需要`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 ``` <a name="install_libx264"></a> #### 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 ``` <a name="install_libx264"></a> #### 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 ``` <a name="install_libvpx"></a> #### 8、安装libvpx VP8/VP9视频编码器和解码器,查看[VP9 Video Encoding Guide](https://trac.ffmpeg.org/wiki/Encode/VP9)获取更多信息和使用示例。 需要`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 ``` <a name="compile_ffmpeg"></a> #### 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](#install_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](#install_libx264)步骤一样运行`cmake`, `make`, and `make install`。 ``` cd ~/ffmpeg_sources/fdk_aac make distclean git pull ``` 然后和[安装libx265](#install_libx265)步骤一样运行`./configure`, `make`, and `make install`。 #### 更新libvpx ``` cd ~/ffmpeg_sources/libvpx make distclean git pull ``` 然后和[安装libvpx](#install_libvpx)步骤一样运行`./configure`, `make`, and `make install`。 #### 更新FFmpeg ``` rm -rf ~/ffmpeg_sources/ffmpeg ``` 然后重新运行[编译FFmpeg](#compile_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](https://ffmpeg.org/contact.html)邮件列表,提出你的问题。 最后修改:2023 年 08 月 02 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏