在Ubuntu Server上编译FFmpeg
FFmpeg是最流行的开源视频转码工具包,在Ubuntu上可以直接通过apt-get安装,但是默认的编码器不提供x264这些non-free的编码器,所以需要自己编译。
FFmpeg官方给出了详细的编译步骤:
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
本文和官方指南相比,主要在于改进了以下几处:
- 编译的bin目录不放到某个用户目录下,而是放到
/opt/bin
下面; - 不使用git/hg下载snapshot的源码版本,而是直接下载稳定版。
以下测试在Ubuntu Server 14.04下通过。
首先,用apt-get update
和apt-get upgrade
把系统升级到最新版,然后,安装以下软件包:
apt-get install autoconf automake build-essential libass-dev libfreetype6-dev libtheora-dev libtool libvorbis-dev pkg-config texinfo zlib1g-dev unzip cmake yasm libx264-dev libmp3lame-dev libopus-dev
FFmpeg依赖的几个软件包有个最低版本要求:
yasm >= 1.2.0 libx264-dev >= 0.118 libmp3lame-dev >= 3.98.3 libopus-dev >= 1.1
这几个包在Ubuntu 14.04上都符合FFmpeg的要求,所以可以直接用apt-get
安装。如果是其它版本的Linux,就需要自己检查版本。
注意,因为这个FFmpeg是作为服务器使用的,所以不含ffplay的依赖包。如果想要在桌面使用,还需要安装以下软件包:
libsdl1.2-dev libva-dev libvdpau-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev
接下来需要下载并编译的是x265,fdk-aac,vpx和ffmpeg本身。
先创建如下目录结构:
/opt
+- ffmpeg_sources/
+- ffmpeg_build/
+- bin/
然后,把源码包下载到/opt/ffmpeg_sources/
目录下。
因为不采用snapshot版本,所以我们可以直接下载某个稳定版源码。下载地址如下:
x265: https://bitbucket.org/multicoreware/x265/downloads/x265_1.9.tar.gz
fdk-aac: https://github.com/mstorsjo/fdk-aac/archive/v0.1.4.zip
vpx: http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.5.0.tar.bz2
ffmpeg: http://ffmpeg.org/releases/ffmpeg-3.0.tar.bz2
编译x265
依次执行以下命令:
cd /opt/ffmpeg_sources tar zxvf x265_1.9.tar.gz cd x265_1.9/build/linux PATH="/opt/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/opt/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source make make install make distclean
编译fdk-aac
依次执行以下命令:
cd /opt/ffmpeg_sources mv v0.1.4.zip fdk-aac-v0.1.4.zip unzip fdk-aac-v0.1.4.zip cd fdk-aac-0.1.4 autoreconf -fiv ./configure --prefix="/opt/ffmpeg_build" --disable-shared make make install make distclean
编译vp8/vp9
依次执行以下命令:
cd /opt/ffmpeg_sources tar xjvf libvpx-1.5.0.tar.bz2 cd libvpx-1.5.0 PATH="/opt/bin:$PATH" ./configure --prefix="/opt/ffmpeg_build" --disable-examples --disable-unit-tests PATH="/opt/bin:$PATH" make make install make clean
编译ffmpeg
最后一步就是编译FFmpeg了:
cd /opt/ffmpeg_sources tar xjvf FFmpeg-release-3.0.zip cd FFmpeg-release-3.0 PATH="/opt/bin:$PATH" PKG_CONFIG_PATH="/opt/ffmpeg_build/lib/pkgconfig" ./configure --prefix="/opt/ffmpeg_build" --pkg-config-flags="--static" --extra-cflags="-I/opt/ffmpeg_build/include" --extra-ldflags="-L/opt/ffmpeg_build/lib" --bindir="/opt/bin" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree PATH="/opt/bin:$PATH" make make install make distclean hash -r
编译时间很长很长,一切顺利的话,在/opt/bin
目录下会编译出ffmpeg
、ffprobe
和ffserver
三个程序。最后,创建几个软连接,便于任意用户在任意目录下直接调用ffmpeg:
ln -s /opt/bin/ffmpeg /usr/bin/ffmpeg ln -s /opt/bin/ffprobe /usr/bin/ffprobe ln -s /opt/bin/ffserver /usr/bin/ffserver
ffmpeg
是转码程序,ffprobe
可以用来分析视频文件,ffserver
可以实现流媒体服务器。