百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

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

qiyuwang 2025-03-29 21:43 6 浏览 0 评论

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等)。

如下图所示:


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

注意:如果是第一次或很多依赖库没有装,为了保险起见,建议直接全部安装。这里的“\”表示换行,如果不用脚本,直接输入命令,这个“\”是不需要。如果没有安装依赖库,后面安装ffmpeg库,肯定会报错。特别是这些库,如libass-dev,libsdl2-dev,libvorbis-dev等。

Bash
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)方法不能安装,那就使用源码安装。执行如下命令:

Bash
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”

相关推荐

# 安装打开 ubuntu-22.04.3-LTS 报错 解决方案

#安装打开ubuntu-22.04.3-LTS报错解决方案WslRegisterDistributionfailedwitherror:0x800701bcError:0x80070...

利用阿里云镜像在ubuntu上安装Docker

简介:...

如何将Ubuntu Kylin(优麒麟)19.10系统升级到20.04版本

UbuntuKylin系统使用一段时间后,有新的版本发布,如何将现有的UbuntuKylin系统升级到最新版本?可以通过下面的方法进行升级。1.先查看相关的UbuntuKylin系统版本情况。使...

Ubuntu 16.10内部代号确认为Yakkety Yak

在正式宣布Ubuntu16.04LTS(XenialXerus)的当天,Canonical创始人MarkShuttleworth还非常开心的在个人微博上宣布Ubuntu下个版本16.10的内...

如何在win11的wsl上装ubuntu(怎么在windows上安装ubuntu)

在Windows11的WSL(WindowsSubsystemforLinux)上安装Ubuntu非常简单。以下是详细的步骤:---...

Win11学院:如何在Windows 11上使用WSL安装Ubuntu

IT之家2月18日消息,科技媒体pureinfotech昨日(2月17日)发布博文,介绍了3中简便的方法,让你轻松在Windows11系统中,使用WindowsSubs...

如何查看Linux的IP地址(如何查看Linux的ip地址)

本头条号每天坚持更新原创干货技术文章,欢迎关注本头条号"Linux学习教程",公众号名称“Linux入门学习教程"。...

怎么看电脑系统?(怎么看电脑系统配置)

要查看电脑的操作系统信息,可以按照以下步骤操作,根据不同的操作系统选择对应的方法:一、Windows系统通过系统属性查看右键点击桌面上的“此电脑”(或“我的电脑”)图标,选择“属性”。在打开的...

如何查询 Linux 内核版本?这些命令一定要会!

Linux内核是操作系统的核心,负责管理硬件资源、调度进程、处理系统调用等关键任务。不同的内核版本可能支持不同的硬件特性、提供新的功能,或者修复了已知的安全漏洞。以下是查询内核版本的几个常见场景:...

深度剖析:Linux下查看系统版本与CPU架构

在Linux系统管理、维护以及软件部署的过程中,精准掌握系统版本和CPU架构是极为关键的基础操作。这些信息不仅有助于我们深入了解系统特性、判断软件兼容性,还能为后续的软件安装、性能优化提供重要依据。接...

504 错误代码解析与应对策略(504错误咋解决)

在互联网的使用过程中,用户偶尔会遭遇各种错误提示,其中504错误代码是较为常见的一种。504错误并非意味着网站被屏蔽,它实际上是指服务器在规定时间内未能从上游服务器获取响应,专业术语称为“Ga...

猎聘APP和官网崩了?回应:正对部分职位整改,临时域名可登录

10月12日,有网友反映猎聘网无法打开,猎聘APP无法登录。截至10月14日,仍有网友不断向猎聘官方微博下反映该情况,而猎聘官方微博未发布相关情况说明,只是在微博内对反映该情况的用户进行回复,“抱歉,...

域名解析的原理是什么?域名解析的流程是怎样的?

域名解析是网站正常运行的关键因素,因此网站管理者了解域名解析的原理和流程对于做好域名管理、解决常见解析问题,保障网站的正常运转十分必要。那么域名解析的原理是什么?域名解析的流程是怎样的?接下来,中科三...

Linux无法解析域名的解决办法(linux 不能解析域名)

如果由于误操作,删除了系统原有的dhcp相关设置就无法正常解析域名。  此时,需要手动修改配置文件:  /etc/resolv.conf  将域名解析服务器手动添加到配置文件中  该文件是DNS域名解...

域名劫持是什么?(域名劫持是什么)

域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的地址从而实现用户无法访问目标网站的目的。说的直白些,域名劫持,就是把互...

取消回复欢迎 发表评论: