超详细手把手搭建在ubuntu系统的FFmpeg环境

0.引言

开发版本Ubuntu18.04(桌面版本),FFmpeg开发源码为FFmpeg4.2。本次使用源码编译,安装,搭建均为静态库,也可以设置为动态库,根据自己的需求去设置就好了。本篇文章十分详细的安装过程,能够帮你节省大量的时间。

如果有朋友要使用搭建win10下,ffmpeg+QT的环境,可以参考这篇文章。

手把手搭建FFmpeg的Windows环境

提议:最好使用源码的方式去编译,有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等)。

如下图所示:

超详细手把手搭建在ubuntu系统的FFmpeg环境

超详细手把手搭建在ubuntu系统的FFmpeg环境

安装依赖库,如果不知道这些依赖库是干什么用,可以去百度。所有安装依赖库的命令如下:

注意:如果是第一次或许多依赖库没有装,为了保险起见,提议直接全部安装。这里的“”表明换行,如果不用脚本,直接输入命令,这个“”是不需要。如果没有安装依赖库,后面安装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

超详细手把手搭建在ubuntu系统的FFmpeg环境

注意:如果在ubuntu18.04下出现如下数据库错误,可以不用理会,等待一会,跳过就可以,不影响后面的安装和编译:

超详细手把手搭建在ubuntu系统的FFmpeg环境

超详细手把手搭建在ubuntu系统的FFmpeg环境

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

超详细手把手搭建在ubuntu系统的FFmpeg环境

注意:如果碰到数据库错误,等待一会儿,可以直接跳过,不影响编译。该方法安装更加简单。

(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

超详细手把手搭建在ubuntu系统的FFmpeg环境

(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如下界面:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(1)sudo apt-get install libx264-dev

安装界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(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如下界面:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(1)sudo apt-get install libx265-dev libnuma-dev

安装界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(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如下界面:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(1)sudo apt-get install libvpx-dev

安装界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(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如下界面:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(1)sudo apt-get install libfdk-aac-dev

安装界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(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

安装界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(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

安装界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(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

安装界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(2)sudo apt-get -y install libvorbis-dev

安装界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

注意:如果编译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

超详细手把手搭建在ubuntu系统的FFmpeg环境

(2)并在(1)步骤的同级目录,进行解压。执行如下命令:

tar xjvf ffmpeg-4.2.1.tar.bz2

超详细手把手搭建在ubuntu系统的FFmpeg环境

(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

开始编译,安装(这个时间需要比较久,耐心等待),过程如下图所示:

安装命令如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

编译过程如下图:

超详细手把手搭建在ubuntu系统的FFmpeg环境

超详细手把手搭建在ubuntu系统的FFmpeg环境

编译,安装完成,出现如下界面:

超详细手把手搭建在ubuntu系统的FFmpeg环境

执行命令:hash -r

执行命令界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

然后重新登录系统或者在当前shell会话执行如下命令以识别新安装ffmpeg的位置:

(4) source ~/.profile

第一,在ffmpeg源码目录执行命令source ~/.profile。目录和执行命令,如下图:

界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

然后,在源码目录下执行命令:./ffmpeg -version。目录和执行命令,可以观察到配置命令和编译出来的库,如下图:

界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

注意:这个命令只是当前生效,如果需要永久生效,需要重启ubuntu系统。

目前已经完成编译和安装ffmpeg (also ffplay, ffprobe, lame, x264, & x265) 。该文档剩余章节主要讲如何更新和删除ffmepg。

(5) 编译完成后,ffmpeg_build ffmpeg_sources bin目录下的文件。

在ffmpeg_sources源码目录下,出现如下一些文件:

超详细手把手搭建在ubuntu系统的FFmpeg环境

在ffmpeg_build目录下,出现如下一些文件:

包括库、头文件,一些例程和文件。

超详细手把手搭建在ubuntu系统的FFmpeg环境

超详细手把手搭建在ubuntu系统的FFmpeg环境

编译出来的头文件

超详细手把手搭建在ubuntu系统的FFmpeg环境

编译出来的库文件(这里只编译了静态库,如果需要动态库,可以自己设置)

超详细手把手搭建在ubuntu系统的FFmpeg环境

在bin目录下,出现如下一些可执行应用程序:

超详细手把手搭建在ubuntu系统的FFmpeg环境

(6) 测试是否搭建成功

在自己创建的bin目录下,执行如下命令:

(1)./ffplay rtmp://202.69.69.180:443/webcast/bshdlive-pc

超详细手把手搭建在ubuntu系统的FFmpeg环境

注意:这个rtmp地址是公网地址,需要保证你的网络必定要是能够访问公网才行。如果有朋友的网络没问题可以访问,但是没有图像出来,列如提示如下错误:Could not initialize SDL – Failed to connect to the Mir Server,可能是你的sdl库没有安装或者使用不是ubuntu桌面版本(桌面版本才可以),而是使用server版本

超详细手把手搭建在ubuntu系统的FFmpeg环境

正确的拉流测试结果:

如果能够出现如下界面,就代表在ubuntu系统下搭建ffmpeg成功。就可以愉快的玩耍ffmpeg了。

超详细手把手搭建在ubuntu系统的FFmpeg环境

超详细手把手搭建在ubuntu系统的FFmpeg环境

超详细手把手搭建在ubuntu系统的FFmpeg环境

(2)播放本地文件

执行如下命令:ffplay rtmp_h.flv

执行目录和命令,如下界面:

超详细手把手搭建在ubuntu系统的FFmpeg环境

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

在线文档界面如下:

超详细手把手搭建在ubuntu系统的FFmpeg环境

5.总结

本节讲解了如何一步一步在ubuntu系统搭建ffmpeg开发环境,应该是十分详细,可以帮大家在搭建的过程中节省许多时间。在搭建过程中,也踩过一些坑,上面也有提到过。如果你碰到一些不同的问题,也可以在评论区留言,然后我们一起讨论。

本篇文章就分享到这里,希望能够协助到大家。如果觉得文章不错,欢迎关注,点赞,转发,收藏,评论区讨论。

关于项目的知识,后面也会在微信公众号上更新,欢迎关注微信公众号“记录世界 from antonio”

© 版权声明

相关文章

1 条评论

您必须登录才能参与评论!
立即登录
  • 头像
    仲子 读者

    收藏了,感谢分享

    无记录