rs1 ccbwd
FFmpeg源码下载肯定是优先去官网下载:官网 ffmpeg.org/download.ht…
打开官网如下:
可以选择直接下载,或者git命令直接克隆一份,作为开发人员一般都喜欢选择git克隆的方式,这样方便后续更新。
3. FFmpeg编译,安装
3.1 在Mac下编译安装FFmpeg3.1.1 brew 方式安装
在mac下面可以很方便的使用brew install ffmpeg命令直接安装ffmpeg,如果是新手这样安装比较方便快捷,但是这么安装有个弊端就是不能定制化,如果随着你对FFmpeg的深入,你需要使用一些其他的工具,就需要手动编译安装了,通过源码编译的方式,我们可以自己选择定制化。
我们可以先输入brew search ffmpeg
3.1.2 源码编译 方式安装
首先需要下载ffmpeg, 从官网http://ffmpeg.org/download.html下载然后是编译ffmpeg 只需要执行下面3条命令即可:
- ./configure -prefix=/usr/local/ffmpeg -enable-debug=3
- make -j 4
- make install
接下来我们分别执行这3条语句:
- 执行./configure --prefix=/usr/local/ffmpeg --enable-debug=3 一般我们默认安装在/usr/local/ffmpeg路径下,这个路径可以自由设定,这里我们需要开启debug功能,后面要用到
我们下看看我们下载好的源码目录
你也可以使用./configure --help来查看怎么配置
会打印如下所有选项:
上面包括了很多配置参数,随着我们对ffmpeg的深入,我们也会慢慢了解这些配置参数,刚开始我们只需要知道我们关心的就好了。
例如我们不记得了禁止编译static怎么写的,我们这样查询一下:
同样我们可以查询一下share相关的
这里我设置configure时禁止编译静态库,开启动态库,如下:
执行
输入上面命令后回车,会等待一段时间,这个时候脚本在查询系统所有匹配的库,如果有不匹配的会有提示,如下图,我的配置会报一个错误:
由于我的电脑没有安装yasm库,所以需要先安装一下:安装yasm编译器。安装方法如下:
- 下载:yasm的下载链接
- 解压:把下载下来的压缩包进行解压
- 切换路径: cd yasm-1.3.0
- 执行配置: ./configure
- 编译:make
- 安装:make install(提示:Permission denied,就执行sudo make install)
下面我们下来安装yasm编译器 (1)下载:yasm的下载链接 如果上面的链接下载比较慢,可以从我的百度云盘下载: 链接:pan.baidu.com/s/1oGMcX4HY… 密码:m1k2
相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】
音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~
(2) 解压,这里需要用到本篇博客开篇的准备知识的解压命令tar -zxvf yasm-1.3.0.tar
(3)切换路径:cd yasm-1.3.0
(4)执行配置:./configure
(5)编译:make
(6)安装:make install(提示:Permission denied,就执行sudo make install)
安装了yasm编译器后,我们从新运行一下configure配置:
如果没有报错,则会打印了下面信息:
这样我们已经成功配置了FFmpeg,接下来执行编译
- 执行make -j 4 这里命令的意思是增加4个内核,并行编译,这样提高编译速度 执行make命令后,接下来需要等待比较长的时间等编译完成,需要耐心
增加权限后,就可以安装成功了。
这样就成功安装到了/usr/local/ffmpeg 目录下面了,我们切换到这个目录查看一下
我们可以看到有四个子目录:bin, include, lib, share
- bin目录:存放所有ffmpeg的工具库
- include目录: 存放ffmpeg库的所有头文件
- lib目录:ffmepg生成的动态库或静态库
- share目录:存放文档相关内容和一些demo实例
我们接下来可以进入bin目录执行命令:
正常会有三个子目录,由于我这里没有安装ffplay所以少了一个ffplay这是为什么呢?
因为ffplay实际上是客户端ffplay.c的C程序编译出来的,该ffplay.c需要依赖avdevice模块,而avdevice模块使用了sdl的API,如果你的PC上没有sdl(1.x版本,最常用的是1.2.0版本),那么ffplay就会编译不出来了,所以要想编译出命令行工具ffplay,首先的编译基础库 sdl
- Mac OS 安装sdl 库
如果没有安装brew的话,要先安装Homebrew
等待一段时间,就安装好了,
然后执行命令:
等待下载并且安装完毕之后,重新执行上述FFmpeg的配置和安装步骤,待make install结束之后,再去bin目录下就可以找到命令行工具ffplay了。
- 安装完成之后接下来一个很重要的事情就是配置环境变量,如果没有配置,你直接执行ffmpeg命令是会报错的
如果你配置环境变量,则需要每次带上全路径,如下:
接下来配置环境变量
执行命令
在配置文件加入ffmpeg的bin文件夹路径:
然后输入:wq保存退出,再执行下面命令让刚配置的环境变量生效:
在ubuntu操作系统上可以很容易的跟Mac电脑上执行brew install ffmpeg一样可以一行命令执行 通过执行apt 安装如下:
这个的弊端也是无法定制化,如果要定制化还是要手动编译源码安装
安装完成后,我们可以执行ffmpeg -version测试是否安装成功
Centos 操作系统下安装
- 需安装Nux Dextop Yum 源, 由于CentOS没有官方FFmpeg rpm软件包。但是,我们可以使用第三方YUM源(Nux Dextop)完成此工作。
CentOS 7下:
然后
- 官网下载:ffmpeg.org/download.ht… 这里下载最新版本
- 解压安装包
跟上面mac源码安装类似,先进行configure配置,配置过程可能报错,如报下面错误:
则说明yasm编译器没有安装或者太老了,需要先安装新的yasm汇编器。可以使用--disable-yasm禁用这个选项编译,yasm是一款汇编器,并且是完全重写了nasm的汇编环境,接收nasm和gas语法,支持x86和amd64指令集,所以这里安装一下yasm即可
- Linux下安装yasm 跟Mac下安装相似,都是先下载源码,然后配置,编译,安装
官网下载:yasm.tortall.net/Download.ht…下载后解压,安装
安装成功后,还是和mac安装ffmpeg一样,需要重新配置FFmpeg:
/opt/ffmpeg 是配置的安装目录,可以自己配置路径
- 然后make进行编译
安装
make install会把ffmpeg相关执行程序、头文件、lib库安装在/opt/ffmpeg/下
- 安装完成后可以进入/opt/ffmpeg/查看
发现有bin,include,lib,share这4个目录bin是ffmpeg主程序二进制目录 include是C/C++头文件目录 lib是编译好的库文件目录 share是文档目录
- 我们可以进入bin目录执行./ffmpeg -version, 查看当前版本的详细信息 可能会报错:
原因是lib目录未加载到链接到系统库中 系统ld目录列表在/etc/ld.so.conf中,打开文件会发现, 里面引用了/etc/ld.so.conf.d/下面所有的.conf文件,比如mariadb-x86_64.conf解决上面报错,需要创建一个文件并写入lib路径即可执行命令:vim /etc/ld.so.conf.d/ffmpeg.conf
- 然后添加一行内容:/opt/ffmpeg/lib
- 之后保存并退出,然后执行 ldconfig使配置生效,
- 再次执行./ffmpeg -version 显示就正常了
正常会打印如下信息
接下来需要配置环境变量 使用命令vim /etc/profile:编辑写入↓
然后执行命令source /etc/profile:使修改后的配置文件生效
- 检测ffmpeg是否安装成功 执行which ffmpeg 查看安装路径
3.3 在Window下编译安装FFmpeg
3.3.1 Window编译工具介绍
window下编译FFmpeg相对复杂一下,需要借助Cygwin或MinGW来编译,可以通过MinGW+ MSYS2 或者 VS+ MSYS2来编译ffmpegCygwin(Cygnus Windows)实际上相当于在window安装了一个软件来模拟linux系统MinGW(Minimalist GNU for Windows)是完全模仿了linux的编译工具,相对于将linux的编译工具移植到 window,基于window系统api进行编译,需要提供额外的工具配合使用VS就是 window开发很熟悉了MSYS2(Minimal SYStem 2)3.3.2 Window如何编译ffmpegWindow编译ffmpeg主要有下面三种方式
- Cygwin直接安装使用: Cygwin编译跟linux编译一模一样的,Cygwin完全就像一个虚拟机模拟了linux操作系统。Cygwin实际上是做了一层linux的api到windows 的api的转换。
但是这样编译出来的ffmpeg的exe程序需要挂在一个Cygwin.dll库才可以运行,因为它有一层转换,所以性能对比原始的window程序有一些损耗。
- MinGW + MSYS2 : 官方推荐的方式,这种编译出来的就是原生的window程序,不需要和Cygwin一样需要加载一个动态库了。
它的编译方式实际上和linux是一致的
- VS + MSYS2: 这种就是采用类linux的编译,只是把里面的工具链换成了VS的工具,但是这种方式生成ffplay比较麻烦。
所以一般都选择MinGW + MSYS2 : 官方推荐的方式3.3.2.1 Cygwin 编译FFmpeg
在windows下安装 ffmpeg 的最好方式就是使用 Cygwin 。 Cygwin 是什么呢?简单的说,就是在 Windows上装了一个Linux模拟器。然后你可以在这个模拟器上按照Linux的方式操作 Windows系统。因此,Windows安装了 Cygwin 之后,你就把它当Linux用就可以了。首先,到 Cygwin 官网下载 Cygwin 的可执行程序 setup-x86_64.exe。当然,它是 64位的,如果你现在还在用 32位的,那请在 Cygwin官网上找 32位对应的版本。
- 首先要安装Cygwin
下载软件后开始安装
选择系统的网络连接方式,跟虚拟机类似
选择镜像安装
选择镜像的对应包
然后选择我们需要的安装包安装,我这里选择 Debug, Devel这两个必须的
此外还需要选择网络
还需要添加wget
此外我们选择一个sdl的库
为了后面编译出ffplay库,最好把下面的红框里面都选上
以上就是一个最小的安装了
需要确保安装了下面这些工具
- gcc
- g++
- make
- cmake
- automake
- gdb
- nasm
- yasm
- wget
选好之后继续下一步
等待安装完成
然后点击图标打开
可以看到一个linux的控制台,如果在window下学习linux命名,就可以在这个控制台练习
这样你就可以敲入linux命令了
如果我们要访问window下的D:盘,可以像下面这样访问:
- 然后要安装apt-cyg: 这个实际就是Cygwin下的apt工具
apt-cyg与 Ubuntu系统中的 apt一样特别好用,而且使用的方式与 apt也是一个样子的。
我们可以在Cygwin下执行下面的命令就好了
然后执行命令
安装好apt-cyg后,就可以用 apt-cyg instal xxx这样来安装了我们的包了跟Mac下使用brew install xxx一样爽歪歪。
接下来安装pkg-config工具 在Windows系统下,一般不会默认安装该工具,所以在Windows下做实验的同学大都会遇到明明已经装了某个库,但仍然找不到该库的情况。其原因就是没有安装 pkg-config这个工具。 首先确认是否已经将 pkg-config工具安装好了。可以执行下面的命令:
如果提示没有安装,则先将该工具安装好,安装命令如下:
- 安装好了上面的工具后,接下来就是下载ffmpeg源码了,从官网:ffmpeg.org/download.ht…
然后就是安装了,安装方式跟mac,linux一样
- 输入命令:./configure --prefix=/usr/local/ffmpeg 配置环境
- 执行命令:make -j 4 编译源码
- 执行命令:make install 安装
下载源码通过http直接下载或者git下载
这里我使用git方式,先创建一个ffmpeg目录,然后Git clone代码
下载好源码后,进入目录,然后配置configure
配置完成报告如下:
此时make文件已经生成好了,我们输入make -j 4执行编译
这个编译过程比较长,耐心等待
最好执行make install 安装
安装好之后,我们可以进入/usr/local/ffmpeg目录查看
我们可以看到四个目录:bin,include,lib,share接下来,我们进入bin目录:
可以看到三个exe文件,ffmpeg.exe, ffplayer.exe, ffprobe.exe
我们可以执行ffmpeg.exe
- 接下来也需要配置环境变量,不然每次要带全路径
输入命令:vi ~/.bashrc 编辑配置文件
按快捷键“Shift+G”跳到文件末尾,在配置文件末尾插入:export PATH=/usr/local/ffmpeg/bin:$PATH
然后按esc键,退出编辑模式,输入:wq 保存退出
然后,我们输入source ~/.bashrc使配置文件生效
最好我们输入env | grep PATH来测试配置文件是否生效
配置好环境变量后,我们直接输入ffmpeg.exe就可以找到了
虽然有了apt-cyg这个神器,但它目前只能安装Linux下的一些常用命令,像我们编译时需要的 x264, x265这些库它是无法找到的。
所以这些库需要我们自己来编译
- 编译yasm
- 下载源码:wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
- 解压:tar zxvf yasm-1.3.0.tar.gz
- 切换到目录:cd yasm-1.3.0
- 配置选项:./configure
- 编译安装:make && sudo make install
- 编译fdk-aac
- 下载源码:wget https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.6.tar.gz
- 解压:tar xvf fdk-aac-0.1.6.tar.gz
- 切换到目录: cd fdk-aac-0.1.6
- 配置选项:./configure
- 编译安装:make && sudo make install
- 安装lame
- 下载源码:wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
- 解压:tar -xzf lame-3.99.5.tar.gz
- 切换到目录:cd lame-3.99.5
- 配置选项:./configure
- 编译安装:make && sudo make install
注:编译lame可能遇到的问题:
- 问题一: 在Cygwin下安装 lame的时候遇到执行 ./configure 失败的情况。如 "error: cannot guess build type; you must sepcify one",对这个问题可以通过下面的步骤来解决: 安装automake。可以通过 which automake来确认automake 是否已经安装。如果没有安装,可以通使用 apt-cyg install automake进行安装。 确认automake当前版本。可执行automake --version获取当前automake的版本号。 将 lame目录下的 config.guess文件替换为 /usr/share/automake-version下的config.guess 文件。 此时,再执行./configure进就可以下成功了。
- 问题二: make时出现 "error: '_O_BINARY' undeclared (first use in this function)"的错误,解决办法如下: 打开出错文件 vi ./frontend/lametime.c 将下面这段代码注释掉 /* #elif defined __CYGWIN setmod(fileno(fp), _O_BINARY); */ 再执行make就可以成功了。
- 安装nasm
- 下载源码:wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.gz
- 解压:tar xvf nasm-2.13.03.tar.gz
- 切换到目录:cd nasm-2.13.03
- 配置选项:./configure
- 编译安装:make && sudo make install
- 安装x264
- 下载源码: wget mirror.yandex.ru/mirrors/ftp… bunzip2 last_x264.tar.bz2
- 解压:tar -vxf last_x264.tar
- 切换到目录:cd last_x264
- 配置选项:./configure --enable-static --enable-shared --disable-asm --disable-avs
- 编译安装: make && sudo make install
- 安装ffmpeg
- 下载源码:wget -c https://ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2
- 解压:bunzip2 ffmpeg-4.0.2.tar.bz2
- 切换到目录:cd ffmpeg-4.0.2
- 配置选项:./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-small --arch=x86_64 --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-filter=delogo --enable-debug --disable-optimizations --enable-shared
- 编译安装:make && sudo make install
FFmpeg编译的问题:
- 问题一:找不到 fdk-aac库 在编译ffmpeg时,有可能会报找不到fdk_aac库的错误。此时我们应该设置一下 PKG_CONFIG_PATH,指定ffmpeg到哪里找我们安装好的库。 上面通过源码安装的库,默认地址为/usr/local/lib下面,当然你可以通过./configure 中的–prefix参数改变这个目录。 如果使用默认路径的话,可以通过下面的命令来指定编译时去哪里找库export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 如果你改变了默认路径,则将后面的 /usr/local/lib/pkgconfig修改为你变更后的路径/xxx/.../lib/pkgconfig即可。
参考:李超大神的博客和视频:www.imooc.com/article/247…原文 链接:https://juejin.cn/post/6844904160739999757