0.引言
开发版本Ubuntu18.04(桌面版本),FFmpeg开发源码为FFmpeg4.2。本次使用源码编译,安装,搭建均为静态库,也可以设置为动态库,根据自己的需求去设置就好了。本篇文章十分详细的安装过程,能够帮你节省大量的时间。
如果有朋友要使用搭建win10下,ffmpeg+QT的环境,可以参考这篇文章。
建议:最好使用源码的方式去编译,有2个原因:
(1)避免以前的环境被破坏。
(2)可以详细了解依赖库编译过程。
安装提醒:
(1)如果对编译和安装命令很熟悉了,安装和编译的目录都是可以修改。如果不熟悉,就和我建一样的目录。
(2)ubuntu下编译和安装的时间和坑,比win上更多。
(3)关于各种哭和源码的连接,国内网可能上不了,需要在github和码云上找,为了确保大家能够顺利编译,这步我已经做了。
(4)ffmpeg也是需要依赖很多库,如aac,Xh264,Xh265,这些也是要编译、安装、配置。
(5)关于第三方库的学习,文章后面的章节,也给出了很详细的官方文档链接。
1.安装依赖库
(1)创建下载和安装目录
进入目录:cd ~
mkdir ffmpeg_src ffmpeg_build bin
ffmpeg_src:源码目录。
ffmpeg_build:安装目录,存放编译后的库文件。
bin:存储2进制文件,(ffmpeg,ffplay,ffpeobe,X264,X265等)。
如下图所示:
安装依赖库,如果不知道这些依赖库是干什么用,可以去百度。所有安装依赖库的命令如下:
注意:如果是第一次或很多依赖库没有装,为了保险起见,建议直接全部安装。这里的“\”表示换行,如果不用脚本,直接输入命令,这个“\”是不需要。如果没有安装依赖库,后面安装ffmpeg库,肯定会报错。特别是这些库,如libass-dev,libsdl2-dev,libvorbis-dev等。
sudo apt-get update && sudo apt-get -y install \
autoconf \
automake \
build-essential \
cmake \
git-core \
libass-dev \
libfreetype6-dev \
libsdl2-dev \
libtool \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
pkg-config \
texinfo \
wget \
zlib1g-dev
如果出现如下错误,执行命令如下:
sudo dpkg --configure -a
注意:如果在ubuntu18.04下出现如下数据库错误,可以不用理会,等待一会,跳过就可以,不影响后面的安装和编译:
2.安装其它依赖库:
本指南假定您要安装一些最常见的第三方库。每个小节为您提供安装该库所需的命令。如果不需要某些功能,则可以跳过相关小节(如果不需要),然后在FFmpeg中删除相应的./configure选项。如,跳过下面小节,然后从“ 安装FFmpeg”的命令中删除--enable-libvpx。
编译小技巧:如果要在多核系统中加快编译速度,可以在每个make命令(如make -j4)中使用-j选项。作用是开启4个线程编译,提高编译速度。
注意:针对以下每一步,如果在ubuntu18.04下出现如下数据库错误,可以不用理会,等待一会,跳过就可以,不影响后面的安装和编译。
2.1 NASM库安装
ffmpeg使用到了汇编程序,所以需要使用 NASM库。如果系统提供的库nasm版本>=2.13则可以直接使用命令进行安装。执行如下命令即可。有以下2种方法可以安装,选择下面一种即可。个人觉得2种方法,(1)方法简单,(2)方法可以知道更详细安装过程。
(1)sudo apt-get install nasm
注意:如果碰到数据库错误,等待一会儿,可以直接跳过,不影响编译。该方法安装更加简单。
(2)使用NASM 源码安装
如果使用(1)方法不能安装,那就使用源码安装。执行如下命令:
cd ~/ffmpeg_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 && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make && \
make install
注意:这里的“\”表示换行,如果不用脚本,直接输入命令,这个“\”是不需要。
2.2 Yasm 库安装
ffmpeg使用到了汇编程序,所以需要使用 Yasm 库。如果系统提供的库yasm版本>=1.2.0则可以直接使用命令进行安装。执行如下命令即可。有以下2种方法可以安装,选择下面一种即可。个人觉得2种方法,(1)方法简单,(2)方法可以知道更详细安装过程。
(1)sudo apt-get install yasm
(2)使用Yasm 源码安装
如果使用(1)方法不能安装,那就使用源码安装。执行如下命令:
cd ~/ffmpeg_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 --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make && \
make install
注意:这里的“\”表示换行,如果不用脚本,直接输入命令,这个“\”是不需要。
2.3 libx264 库安装
ffmpeg使用到了X264编解码,所以需要使用 libx264 库。如果你系统提供的 libx264-dev版本 ≥ 118 则可以使用命令直接安装。有以下2种方法可以安装,选择下面一种即可。个人觉得2种方法,(1)方法简单,(2)方法可以知道更详细安装过程。编译ffmpeg时配置:--enable-gpl --enable-libx264。
更多H264信息和使用范例参考,如下地址:
https://trac.ffmpeg.org/wiki/Encode/H.264
H264如下界面:
(1)sudo apt-get install libx264-dev
安装界面如下:
(2)使用x264 源码安装
如果使用(1)方法不能安装,那就使用源码安装。执行如下命令:
cd ~/ffmpeg_sources && \
git -C x264 pull 2> /dev/null || git clone --depth 1 https://gitee.com/mirrors_addons/x264.git && \
cd x264 && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic && \
PATH="$HOME/bin:$PATH" make && \
make install
注意:这里的“\”表示换行,如果不用脚本,直接输入命令,这个“\”是不需要。
2.4 libx265库安装
ffmpeg使用到了H.265/HEVC编解码,所以需要使用 libx265 库。如果你系统提供的 libx265-dev版本 ≥ 68 则可以使用命令直接安装。有以下2种方法可以安装,选择下面一种即可。个人觉得2种方法,(1)方法简单,(2)方法可以知道更详细安装过程。编译ffmpeg时配置:--enable-gpl --enable-libx265。
更多H265信息和使用范例参考,如下地址:
https://trac.ffmpeg.org/wiki/Encode/H.265
H265如下界面:
(1)sudo apt-get install libx265-dev libnuma-dev
安装界面如下:
(2)使用x265 源码安装
如果使用(1)方法不能安装,那就使用源码安装。执行如下命令:
sudo apt-get install mercurial libnuma-dev && \
cd ~/ffmpeg_sources && \
if cd x265 2> /dev/null; then git pull && cd ..; else git clone https://gitee.com/mirrors_videolan/x265.git; fi && \
cd x265/build/linux && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && \
PATH="$HOME/bin:$PATH" make && \
make install
注意:这里的“\”表示换行,如果不用脚本,直接输入命令,这个“\”是不需要。
2.5 libvpx库安装
ffmpeg使用到了VP8/VP9编解码,所以需要使用 libx265 库。如果你系统提供的 libvpx-dev 版本 ≥ 1.4.0 则可以使用命令直接安装。有以下2种方法可以安装,选择下面一种即可。个人觉得2种方法,(1)方法简单,(2)方法可以知道更详细安装过程。编译ffmpeg时配置:--enable-libvpx。
更多vpx信息和使用范例参考,如下地址:
https://trac.ffmpeg.org/wiki/Encode/VP9
vpx如下界面:
(1)sudo apt-get install libvpx-dev
安装界面如下:
(2)使用vpx 源码安装
如果使用(1)方法不能安装,那就使用源码安装。执行如下命令:
cd ~/ffmpeg_sources && \
git -C libvpx pull 2> /dev/null || git clone --depth 1 https://github.com/webmproject/libvpx.git && \
cd libvpx && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \
PATH="$HOME/bin:$PATH" make && \
make install
注意:这里的“\”表示换行,如果不用脚本,直接输入命令,这个“\”是不需要。
2.6libfdk-aac库安装
ffmpeg使用到了AAC编解码,所以需要使用 libfdk-aac 库。有以下2种方法可以安装,选择下面一种即可。个人觉得2种方法,(1)方法简单,(2)方法可以知道更详细安装过程。编译ffmpeg时配置:--enable-libfdk-aac ( 如果你已经配置了 --enable-gpl则需要加上--enable-nonfree).。
更多AAC信息和使用范例参考,如下地址:
https://trac.ffmpeg.org/wiki/Encode/AAC
AAC如下界面:
(1)sudo apt-get install libfdk-aac-dev
安装界面如下:
(2)使用AAC 源码安装
如果使用(1)方法不能安装,那就使用源码安装。执行如下命令:
cd ~/ffmpeg_sources && \
git -C fdk-aac pull 2> /dev/null || 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
注意:这里的“\”表示换行,如果不用脚本,直接输入命令,这个“\”是不需要。
2.7libmp3lame库安装
ffmpeg使用到了MP3编解码,所以需要使用 libmp3lame 库。如果你系统提供的libmp3lame-dev版本≥ 3.98.3则可以使用命令直接安装。有以下2种方法可以安装,选择下面一种即可。个人觉得2种方法,(1)方法简单,(2)方法可以知道更详细安装过程。编译ffmpeg时配置:--enable-libmp3lame。
(1)sudo apt-get install libmp3lame-dev
安装界面如下:
(2)使用MP3 源码安装
如果使用(1)方法不能安装,那就使用源码安装。执行如下命令:
cd ~/ffmpeg_sources && \
git clone --depth 1 https://gitee.com/hqiu/lame.git && \
cd lame && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm && \
PATH="$HOME/bin:$PATH" make && \
make install
注意:这里的“\”表示换行,如果不用脚本,直接输入命令,这个“\”是不需要。
2.7libopus库安装
ffmpeg使用到了音频Opus编解码,所以需要使用 libopus 库。如果你系统提供的libopus-dev 版本≥ 1.1,则可以使用命令直接安装。有以下2种方法可以安装,选择下面一种即可。个人觉得2种方法,(1)方法简单,(2)方法可以知道更详细安装过程。编译ffmpeg时配置::--enable-libopus。
(1)sudo apt-get install libopus-dev
安装界面如下:
(2)使用Opus 源码安装
如果使用(1)方法不能安装,那就使用源码安装。执行如下命令:
cd ~/ffmpeg_sources && \
git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git && \
cd opus && \
./autogen.sh && \
./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
make && \
make install
注意:这里的“\”表示换行,如果不用脚本,直接输入命令,这个“\”是不需要。
2.8 按照补充库
安装AV1 视频编解码器,编译时配置:--enable-libaom:
Warning: libaom does not yet appear to have a stable API, so compilation of libavcodec/libaomenc.c may occasionally fail. Just wait a day or two for us to catch up with these annoying changes, re-download ffmpeg-snapshot.tar.bz2, and try again. Or skip libaom altogether.
我编译时,好像有些问题(主要是源下载的问题),暂时不支持。如果大家有比较好用的源,可以推荐给我,贴在评论区。
(1)源码安装
命令如下:
cd ~/ffmpeg_sources && \
git -C aom pull 2> /dev/null || git clone --depth 1 https://github.com/mozilla/aom.git && \
mkdir -p aom_build && \
cd aom_build && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off -DENABLE_NASM=on ../aom && \
PATH="$HOME/bin:$PATH" make && \
make install
注意:这里的“\”表示换行,如果不用脚本,直接输入命令,这个“\”是不需要。
2.9 按照补充库
在后面编译ffmepg时,报错了,需要安装以下这些库,这是必须要安装。
(1) sudo apt-get -y install libass-dev
安装界面如下:
(2)sudo apt-get -y install libvorbis-dev
安装界面如下:
注意:如果编译FFmpeg缺什么库,就安装什么库,不必恐慌。
3.编译FFmpeg
ffmpeg编译命令如下,可以直接编译,如果在编译过程中,遇到错误,如缺少一些库,可以直接跳转到2.9步骤,去解决问题。
cd ~/ffmpeg_sources && \
wget -O ffmpeg-4.2.1.tar.bz2 https://ffmpeg.org/releases/ffmpeg-4.2.1.tar.bz2 && \
tar xjvf ffmpeg-4.2.1.tar.bz2 && \
cd ffmpeg-4.2.1 && \
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 -lm" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree && \
PATH="$HOME/bin:$PATH" make && \
make install && \
hash -r
以下步骤,是把命令命令解析,逐步去执行。
(1)下载ffmpeg源码,执行如下命令:
wget -O ffmpeg-4.2.1.tar.bz2 https://ffmpeg.org/releases/ffmpeg-4.2.1.tar.bz2
(2)并在(1)步骤的同级目录,进行解压。执行如下命令:
tar xjvf ffmpeg-4.2.1.tar.bz2
(3)cd ffmpeg-4.2.1
执行这些命令,编译和安装。
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 -lm" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree && \
PATH="$HOME/bin:$PATH" make && \
make install
开始编译,安装(这个时间需要比较久,耐心等待),过程如下图所示:
安装命令如下:
编译过程如下图:
编译,安装完成,出现如下界面:
执行命令:hash -r
执行命令界面如下:
然后重新登录系统或者在当前shell会话执行如下命令以识别新安装ffmpeg的位置:
(4) source ~/.profile
首先,在ffmpeg源码目录执行命令source ~/.profile。目录和执行命令,如下图:
界面如下:
然后,在源码目录下执行命令:./ffmpeg -version。目录和执行命令,可以观察到配置命令和编译出来的库,如下图:
界面如下:
注意:这个命令只是当前生效,如果需要永久生效,需要重启ubuntu系统。
现在已经完成编译和安装ffmpeg (also ffplay, ffprobe, lame, x264, & x265) 。该文档剩余章节主要讲如何更新和删除ffmepg。
(5) 编译完成后,ffmpeg_build ffmpeg_sources bin目录下的文件。
在ffmpeg_sources源码目录下,出现如下一些文件:
在ffmpeg_build目录下,出现如下一些文件:
包括库、头文件,一些例程和文件。
编译出来的头文件
编译出来的库文件(这里只编译了静态库,如果需要动态库,可以自己设置)
在bin目录下,出现如下一些可执行应用程序:
(6) 测试是否搭建成功
在自己创建的bin目录下,执行如下命令:
(1)./ffplay rtmp://202.69.69.180:443/webcast/bshdlive-pc
注意:这个rtmp地址是公网地址,需要保证你的网络一定要是能够访问公网才行。如果有朋友的网络没问题可以访问,但是没有图像出来,比如提示如下错误:Could not initialize SDL - Failed to connect to the Mir Server,可能是你的sdl库没有安装或者使用不是ubuntu桌面版本(桌面版本才可以),而是使用server版本。
正确的拉流测试结果:
如果能够出现如下界面,就代表在ubuntu系统下搭建ffmpeg成功。就可以愉快的玩耍ffmpeg了。
(2)播放本地文件
执行如下命令:ffplay rtmp_h.flv
执行目录和命令,如下界面:
4.ffmpeg文档
如果以本地的方式使用ffmpeg文档,你需要这样做,执行命令如下:
echo "MANPATH_MAP $HOME/bin $HOME/ffmpeg_build/share/man" >> ~/.manpath
注意:可能必须重启ubuntu系统,man ffmpeg才生效。
HTML 格式的文档位于,如下地址:
~/ffmpeg_build/share/doc/ffmpeg(值得认真研究)。
也可以直接使用在线文档,如下地址:
https://ffmpeg.org/documentation.html
在线文档界面如下:
5.总结
本节讲解了如何一步一步在ubuntu系统搭建ffmpeg开发环境,应该是十分详细,可以帮大家在搭建的过程中节省很多时间。在搭建过程中,也踩过一些坑,上面也有提到过。如果你碰到一些不同的问题,也可以在评论区留言,然后我们一起讨论。
本篇文章就分享到这里,希望能够帮助到大家。如果觉得文章不错,欢迎关注,点赞,转发,收藏,评论区讨论。
关于项目的知识,后面也会在微信公众号上更新,欢迎关注微信公众号“记录世界 from antonio”