您当前的位置:首页 > 电脑百科 > 软件技术 > 软件技术

完美解决Linux环境编译ffmpeg库

时间:2022-07-08 10:20:22  来源:  作者:音视频开发老舅

背景说明

项目功能实现需要在linux下编译出可用的FFmpeg库。FFmpeg在编译过程中是需要链接其它三方库的,比如x265 x265等,否则可能会造成功能不全(如程序接口返回找不到H264编码器错误),影响使用。编译这种三方库其实理论简单,但是细节磨人,有时候没设置好就是会有些莫名其妙的问题。我这里也参考了如零声学院分享的文档,结合自己情况总结记录了份编译说明,亲测有效,使用稳定。甚至可以按步骤无脑复制shell执行,编译一路绿灯,快速得到完美的FFmpeg库。

编译

整体思路就是先把依赖的库如x264、x265等先配置好,这些库不是必须的,但是保证库功能完整性最好都配置好。接下来就是下载FFmpeg源码,和依赖库进行配置然后进行编译,编译完成库即可用了。当前环境是 ubuntu18 desktop + ffmpeg 4.2.1

注意

(1)所有操作以我的环境为准,但可以完全按以下步骤依次复制命令执行,因为我是在home目录是通用的,建议按照此方法。如果想使用自己的路径要注意修改命令参数,防止路径不同造成的错误

(2)部分库可能需要连接github,最好选择网络较好的机器上编译

(3)整个安装过程,基本就是复制命令执行,等待执行结束。。。循环。测试多台机器编译过程中均无报错,正常情况预计用时15分钟以内,即可完成全部编译工作

一、创建目录

在home目录下创建

ffmpeg_sources:用于下载源文件

ffmpeg_build: 存储编译后的库文件

bin:存储二进制文件(ffmpeg,ffplay,ffprobe,X264,X265等)

命令:

cd ~ 
mkdir ffmpeg_sources  ffmpeg_build bin

二、安装依赖

更新软件信息

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

C++音视频开发学习资料:点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

完美解决Linux环境编译ffmpeg库

 

三、安装三方库

安装一些最常见的第三方库,默认均以源码方式安装。安装库所需的命令如下

NASM
部分库使用到汇编程序。
使用源码进行安装

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

Yasm
部分库使用到该汇编库
使用源码进行安装:

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

libx264

H.264视频编码器。更多信息和使用范例参考H.264 Encoding Guide

要求编译ffmpeg时配置:–enable-gpl --enable-libx264.

使用源码进行编译:

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

libx265
H.265/HEVC 视频编码器, 更多信息和使用范例参考H.265 Encoding Guide。
要求编译ffmpeg时配置:–enable-gpl --enable-libx265.
使用源码进行编译:

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

libvpx

VP8/VP9视频编解码器。 更多信息和使用范例参考VP9 Video Encoding Guide 。

要求编译ffmpeg时配置: --enable-libvpx.

使用源码进行编译:

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 --enable-pic && 
PATH="$HOME/bin:$PATH" make && 
make install

libfdk-aac

AAC音频编码器. 更多信息和使用范例参考AAC Audio Encoding Guide。

要求编译ffmpeg时配置:–enable-libfdk-aac ( 如果你已经配置了 --enable-gpl则需要加上–enable-nonfree).

使用源码进行编译:

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 CFLAGS=-fPIC --prefix="$HOME/ffmpeg_build"   && 
make && 
make install

libmp3lame
MP3音频编码器.
要求编译ffmpeg时配置:–enable-libmp3lame.
使用源码进行编译:

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"  --enable-nasm --with-pic && 
PATH="$HOME/bin:$PATH" make && 
make install

libopus
Opus音频编解码器.
要求编译ffmpeg时配置:–enable-libopus.
使用源码进行编译:

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"  -with-pic&& 
make && 
make install

四、安装FFmpeg

到这里常见的三方库默认已经都装好了,唠叨下,上面的库可以不全安装,但是为了库的功能全面性,还是别偷懒,毕竟编译好,可以一直用。下面下载FFmpeg源码和上面的库联合编译,此过程相对用时久一些,耐心等待

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" CFLAGS="-O3 -fPIC" ./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-pic 
  --enable-shared   
  --enable-nonfree && 
PATH="$HOME/bin:$PATH" make && 
make install && 
hash -r

五、安装完成

到此,整个编译就完成了。可以去看下最初创建的那三个文件夹,我们最感兴趣的是ffmpeg_build,如下图。
include: 里面是各种头文件,用来加入到业务项目中引用
lib: 便是心心念的库,里面有静态的还有动态的,按自己需求使用

完美解决Linux环境编译ffmpeg库

 

还有像ffmpeg ffplay ffprobe等可执行程序,在以上三个文件夹内可以找到,具体位置不在说明。要说明一点是,这里只是编译出来纯粹的库文件,可以保证库的质量,但具体的使用需自行配置。



Tags:ffmpeg   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
要理解RTMP推流,我们就要知道详细原理。本文将详细的来给大家介绍RTMP推流原理以及如何推送到服务器,首先我们了解一下推流的全过程: 我们将会分为几个小节来展开:一. 本文用到...【详细内容】
2022-09-27  Tags: ffmpeg  点击:(44)  评论:(0)  加入收藏
FFmpeg是一个非常著名的多媒体框架开源项目,它可用于编码,解码,转码,音视频复用,音视频解复用,播放等重要功能。FFmpeg作为一个多媒体框架被各大音视频播放器软件使用于支持广泛的...【详细内容】
2022-08-29  Tags: ffmpeg  点击:(113)  评论:(0)  加入收藏
linux系统中Nginx+FFmPeg实现网页监控视频播放配置过程1.安装好的nginx上添加模块nginx-http-fiv-module-master此模块是rtmp模块的升级版,有它所有的功能,因此安装它(1)从Git...【详细内容】
2022-07-24  Tags: ffmpeg  点击:(81)  评论:(0)  加入收藏
这两天需要做一个视频推流测试,在网上找了一圈资料,使用ffmpeg+nginx是比较快捷和通用的方法,于是就开始动手开整!推流测试一 测试环境推流:ubuntu18.04,ffmpeg。服务器+拉流:win7,n...【详细内容】
2022-07-22  Tags: ffmpeg  点击:(172)  评论:(0)  加入收藏
背景说明项目功能实现需要在Linux下编译出可用的FFmpeg库。FFmpeg在编译过程中是需要链接其它三方库的,比如x265 x265等,否则可能会造成功能不全(如程序接口返回找不到H264编码...【详细内容】
2022-07-08  Tags: ffmpeg  点击:(203)  评论:(0)  加入收藏
一、ffmpeg、ffplay、ffprobe区别ffmpeg:超快音视频编码器(类似爱剪辑)ffplay:简单媒体播放器ffprobe:简单多媒体流分析器二、帮助文档查看2.1 ffmpeg查看帮助文档基本信息:ffmpeg...【详细内容】
2022-06-22  Tags: ffmpeg  点击:(135)  评论:(0)  加入收藏
摘要这篇文章介绍怎么实现视频解码,具体步骤为读取Sample.mkv视频文件,从中提取视频流,然后解码为YUV图像数据,把YUV数据存储为PGM灰度图像,或者存储为YUV420p RAW格式视频。初始...【详细内容】
2022-06-01  Tags: ffmpeg  点击:(80)  评论:(0)  加入收藏
网上有很多转换工具软件,如格式工厂、迅捷视频转换器等,但都不是很纯净,很多带有广告。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用...【详细内容】
2022-05-07  Tags: ffmpeg  点击:(199)  评论:(0)  加入收藏
前言FFMpeg读做“FF Mpeg”,“FF”指的是“Fast Forward”,而“Mpeg”指的是Moving Picture Experts Group(动态图像专家组)。根据官方介绍,FFMpeg是一个完整的、跨平台的音频和...【详细内容】
2022-02-11  Tags: ffmpeg  点击:(294)  评论:(0)  加入收藏
下面的一切都是在 root 模式下进行的,可以不再 root 模式下进行1. 安装linux的基础环境基础环境就是编译代码的基础库,Ubuntu联网安装软件很简单,一个语句即可搞定,这里列出语句...【详细内容】
2022-01-20  Tags: ffmpeg  点击:(226)  评论:(0)  加入收藏
▌简易百科推荐
不知道大家有没有遇到这种情况,新购买的笔记本电脑只有一个C盘,没有其他的分区。也就是说打开此电脑图标显示的分区只有一个C盘。那么遇到这种情况应该怎样处理呢?如果没有其他...【详细内容】
2022-11-04  嘻呱互联   网易号  Tags:分区   点击:(3)  评论:(0)  加入收藏
背景由于公司项目需要用到全文搜索这个功能,而且要求轻量级,不能用复杂的ES,于是在网上搜索资料。一次偶然机会,发现了一个名字特别显眼的搜索引擎——MeiliSearch!Mei...【详细内容】
2022-11-03  博读代码  今日头条  Tags:MeiliSearch   点击:(11)  评论:(0)  加入收藏
CAD设计图纸对于设计行业、网站建设、房地产行业、制造建筑行业以及工业设计等行业来说可谓是一种日常使用的办公软件,也是不可缺少的办公工具软件!作为一款不可缺少的设计工...【详细内容】
2022-11-02  sesoffice    Tags:加密   点击:(2)  评论:(0)  加入收藏
谷歌工程师近日向 Chromium 提交补丁,表示准备在 Chrome 110 中移除对 JPEG-XL 图像格式的实验性支持。许多人对 Chrome 的这个决定感到不解,因为 JPEG-XL 在其生命周期中还非...【详细内容】
2022-11-01  开源中国OSC  今日头条  Tags: Chrome   点击:(5)  评论:(0)  加入收藏
百度上的方法基本都是重复的,除了浪费时间,一点作用都没有。突然想到换成必应搜索,果然在微软网站上有解决方案(为什么百度搜不出来?!)。图二第三条下载专用升级工具搞定了。微软的...【详细内容】
2022-11-01  怒风之舞  今日头条  Tags:0x800f081f   点击:(12)  评论:(0)  加入收藏
CAD图纸怎么才能够打印出来?大家在把CAD图纸设计好了之后往往需要把它打印出来以供查阅,对于CAD文件特别多的人来说,光把一个个文件打印出来就已经很耗费时间了,我们需要尽量去...【详细内容】
2022-11-01  阿宇爱美食   今日头条  Tags:CAD   点击:(9)  评论:(0)  加入收藏
亲们想知道3Ds MAX曲面生成条带状网格效果的操作吗?下面就是小编整理3Ds MAX曲面生成条带状网格效果的详细步骤,赶紧来看看吧,希望能帮助到大家哦!3Ds MAX曲面生成条带状网格...【详细内容】
2022-11-01  图灵教程分享   网易号  Tags:3Ds MAX   点击:(11)  评论:(0)  加入收藏
GIF动图是很常用的图片格式了,经常使用动图的朋友们肯定都知道,GIF动图的体积都比较大,不仅占据内存还不方便传输。这时候只需要使用一款专业的GIF压缩(https://www.gif5.net/)工...【详细内容】
2022-10-31  豆丁  搜狐号  Tags:压缩   点击:(12)  评论:(0)  加入收藏
Office Visio是office软件系列中的负责绘制流程图和示意图的软件,是一款便于IT和商务人员就复杂信息、系统和流程进行可视化处理、分析和交流的软件。使用具有专业外观的 Off...【详细内容】
2022-10-30  默默软件安装  搜狐号  Tags:Visio   点击:(17)  评论:(0)  加入收藏
大家好,这期教大家一条很少人知道的指令,有了这个指令,你想隐藏什么文件,电脑高手也发现不了!我们平常隐藏文件夹,一般都是右击文件夹,点击属性,选择隐藏。 这样虽然可以隐藏文件夹,...【详细内容】
2022-10-29  CG电脑说  今日头条  Tags:文件夹   点击:(10)  评论:(0)  加入收藏
站内最新
站内热门
站内头条