在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: http://download.videolan.org/videolan/x265/x265_3.2.1.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_3.2.1.tar.gz cd x265_3.2.1/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可以实现流媒体服务器。