腾讯课堂 零声教育 音视频高级教程 ubuntu ffmpeg开发环境搭建
- 音视频课程地址:[音视频ffmpeg6.0播放器开发课程]
配置环境 ubuntu desktop 16.04 + ffmpeg 6.0
建议在《编译与安装》一节,都使用源码的方式编译和安装,本编译安装方式最终生成的皆为静态库。
部分命令说明:
git -C [git-command] 指定其它路径的仓库 执行命令 注意,-C 要在命令之前
编译参考:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
本课程对于Linux系统仅仅支持Ubuntu编译,centos请自行参考:https://trac.ffmpeg.org/wiki/CompilationGuide/Centos
本教程支持:
- x264/x265/fdk-aac/mp3lame/vpx/libopus等第三方库的集成
- 支持静态库和的动态库的链接
1 创建目录
在home目录下创建
- ffmpeg6.0_sources:用于下载源文件
- ffmpeg6.0_build: 存储编译后的库文件
- bin6.0:存储二进制文件(ffmpeg,ffplay,ffprobe,X264,X265等)
在home目录创建搭建过程中需要的目录
cd ~
mkdir ffmpeg6.0_sources ffmpeg6.0_build bin6.0
这里增加6.0的标识是为了和其他ffmpeg版本做区分。
2 安装依赖
安装ffmpeg需要使用到一些编译工具以及一些第三方库,需要通过命令安装。
更新
sudo apt-get update
安装需要的组件
sudo apt-get -y install \
autoconf \
automake \
build-essential \
cmake \
git-core \
libass-dev \
libfreetype6-dev \
lib**sdl2-dev** \
libtool \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
pkg-config \
texinfo \
wget \
zlib1g-dev
补充安装:
sudo apt-get install libasound2-dev
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglew-dev
sudo apt-get install libglm-dev
sudo apt-get install mercurial libnuma-dev
3 源码编译与安装第三方库
本指南假定您要安装一些最常见的第三方库。每个小节为您提供安装该库所需的命令。
如果不需要某些功能,则可以跳过相关小节(如果不需要),然后在FFmpeg中删除相应的./configure选项。例如,如果不需要libvpx,请跳过该小节,然后从"安装FFmpeg"部分中删除–enable-libvpx。
提示:如果要在多核系统中加快编译速度,可以在每个make命令(例如make -j4)中使用-j选项。
FFmpeg api -> 封装的编码器,比如H264_encoder -> 依赖x264开源项目
3.1 NASM
部分库使用到汇编程序。
使用源码进行安装
cd ~/ffmpeg6.0_sources
wget 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/ffmpeg6.0_build" --bindir="$HOME/bin6.0"
make -j4
make install
3.2 Yasm
部分库使用到该汇编库
使用源码进行安装:
cd ~/ffmpeg6.0_sources
wget -O yasm-1.3.0.tar.gz 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 CFLAGS="-fPIC" CPPFLAGS="-fPIC" --prefix="$HOME/ffmpeg6.0_build" --bindir="$HOME/bin6.0"
make
make install
3.3 libx264
H.264视频编码器。更多信息和使用范例参考H.264 Encoding Guide
要求编译ffmpeg时配置:–enable-gpl --enable-libx264.
使用源码进行编译:
cd ~/ffmpeg6.0_sources
git clone --depth 1 https://github.com/mirror/x264.git
cd x264
PKG_CONFIG_PATH="$HOME/ffmpeg6.0_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg6.0_build" --bindir="$HOME/bin6.0" --enable-static --enable-shared --enable-pic
make
make install
3.4 libx265
H.265/HEVC 视频编码器, 更多信息和使用范例参考H.265 Encoding Guide。
要求编译ffmpeg时配置:–enable-gpl --enable-libx265.
使用源码进行编译:
cd ~/ffmpeg6.0_sources
git clone https://gitee.com/mirrors_videolan/x265.git
cd x265/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg6.0_build" -DENABLE_SHARED=on -DENABLE_PIC=on -DBIN_INSTALL_DIR="$HOME/bin6.0" ../../source
make
make install
3.5 libvpx
VP8/VP9视频编解码器。 更多信息和使用范例参考VP9 Video Encoding Guide 。
要求编译ffmpeg时配置: --enable-libvpx
使用源码进行编译:
cd ~/ffmpeg6.0_sources
git clone --depth 1 https://github.com/webmproject/libvpx.git
cd libvpx
./configure --prefix="$HOME/ffmpeg6.0_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm --enable-pic --enable-shared
make
make install
3.6 libfdk-aac
AAC音频编码器. 更多信息和使用范例参考AAC Audio Encoding Guide。
要求编译ffmpeg时配置:–enable-libfdk-aac ( 如果你已经配置了 --enable-gpl则需要加上–enable-nonfree).
使用源码进行编译:
cd ~/ffmpeg6.0_sources
git clone --depth 1 https://github.com/mstorsjo/fdk-aac.git
cd fdk-aac
autoreconf -fiv
./configure CFLAGS="-fPIC" CPPFLAGS="-fPIC" --prefix="$HOME/ffmpeg6.0_build" --bindir="$HOME/bin6.0"
make
make install
3.7 libmp3lame
MP3音频编码器.
要求编译ffmpeg时配置:–enable-libmp3lame.
使用源码进行编译:
cd ~/ffmpeg6.0_sources
git clone --depth 1 https://gitee.com/hqiu/lame.git
cd lame
./configure --prefix="$HOME/ffmpeg6.0_build" --bindir="$HOME/bin6.0" --enable-nasm --with-pic
make
make install
3.8 libopus
Opus音频编解码器.
要求编译ffmpeg时配置:–enable-libopus.
使用源码进行编译:
cd ~/ffmpeg6.0_sources
git clone --depth 1 https://github.com/xiph/opus.git
cd opus
./autogen.sh
./configure --prefix="$HOME/ffmpeg6.0_build" -with-pic
make
make install
4 FFmpeg
4.1 编译和安装
下载代码
cd ~/ffmpeg6.0_sources
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
git checkout remotes/origin/release/6.0
编译代码:
PKG_CONFIG_PATH="$HOME/ffmpeg6.0_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg6.0_build" \
--extra-libs="-lpthread -lm" \
--bindir="$HOME/bin6.0" \
--pkg-config-flags="--static" \
--extra-cflags="-I/home/lqf/ffmpeg6.0_build/include" \
--extra-cflags="-I/home/lqf/ffmpeg6.0_build/include/fdk-aac" \
--extra-ldflags="-L/home/lqf/ffmpeg6.0_build/lib" \
--enable-gpl \
--enable-libass \
--enable-libfreetype \
--enable-libvorbis \
--enable-pic \
--enable-shared \
--enable-static \
--enable-nonfree \
--enable-libx264 \
--enable-libx265 \
--enable-libvpx \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libopus \
--enable-sdl2 \
--enable-ffplay \
--disable-optimizations \
--disable-stripping \
--enable-debug=3
这里没有做编译优化,目的是学习过程中方便debug
ffmpeg ffplay ffprobe
4.2 测试ffmpeg命令
终端输入
ffmpeg -version
正常显示ffmpeg版本信息,以及编译配置信息。
如果报以下错误(找不到so库):
需要将ffmpeg lib加入到环境变量。步骤如下所述:
- 编辑和修改/etc/ld.so.conf
sudo vim /etc/ld.so.conf
比如:
- 使环境变量生效
然后:
sudo ldconfig
4.2 测试ffplay命令
测试ffplay是否可以使用(需要在Ubuntu图形方式进行测试,不能在类似xshell终端测试)
ffplay http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4
ffplay http://mirror.aarnet.edu.au/pub/TED-talks/911Mothers_2010W-480p.mp4
(网络链接经常失效,找个本地视频文件播放也可以的)
如果能够正常播放则说明 ffplay能够编译成功使用。播放的时候要等等画面。
测试本地文件,比如:
ffplay test.mp4
ffplay /home/lqf/test.mp4
添加环境变量,比如
sudo vim /etc/profile
然后加上
export PATH=$PATH:/home/lqf/bin6.0
记得
source /etc/profile
使得环境变量生效