FFmpeg 在macOS上的编译

1.到官网www.ffmpeg.org/download.html下载源代码。

    (注:下载下来的是master分支,一开始我也是在主分支编译,结果输出的程序只有ffmpeg,ffprobe, 而

ffplay,ffserver,没有出来,文章后面会提到怎么把这两个编出来。)

2.拿到源代码了,想必大家就急着编译吧,是的,一开始我也是,管他呢,先编一下看。到官网上拿到编译命令

./configure --cc=/usr/bin/clang --prefix=/opt/ffmpeg --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-version3 --pkg-config-flags=--static --disable-ffplay

先cd 到  ffmpeg的源码目录(最好在sudo 的权限下执行,我在最后install 的时候就受限,安装不了)

执行 ./configure      (这里不使用参数,是简单的编译)

执行 make

make install

3.就是编译问题处理了。(自已编译依赖环境包会有很多问题要解决,不只是下面的这几个)

下面是在执行./configure命令时可能产生的error

nasm/yasm not found or tooold. Use --disable-x86asm for a crippled build.

到http://www.tortall.net/projects/yasm/releases/上下载yasm-1.3.0.tar.gz 

下载完成后解压,解压后都在yasm-1.3.0的文件夹里,然后

cd 到yasm-1.3.0的目录

./configure

make

make install

安装好汇编编译后,再回到ffmpeg目录再次./configure检测如果没问题就直接make吧。Make 完了记得make install一下。

 在执行./configure 后查看下一是否完整

fsh-mac--00-24-D6-72-E4-6A:FFmpeg fengsh$ ./configure

install prefix            /usr/local

source path               .

C compiler                gcc

C library                

ARCH                      x86(generic)

big-endian                no

runtime cpu detection     yes

standalone assembly       yes

x86 assembler             yasm

MMX enabled               yes

MMXEXT enabled            yes

3DNow! enabled            yes

3DNow! extended enabled   yes

SSE enabled               yes

SSSE3 enabled             yes

AESNI enabled             yes

AVX enabled               yes

AVX2 enabled              yes

AVX-512 enabled           yes

XOP enabled               yes

FMA3 enabled              yes

FMA4 enabled              yes

i686 features enabled     yes

CMOV is fast              yes

EBX available             yes

EBP available             yes

debug symbols             yes

strip symbols             yes

optimize for size         no

optimizations             yes

static                    yes

shared                    no

postprocessing support    no

network support           yes

threading support         pthreads

safe bitstream reader     yes

texi2html enabled         no

perl enabled              yes

pod2man enabled           yes

makeinfo enabled          yes

makeinfo supports HTML    no

 

External libraries:

appkit             coreimage           xlib

avfoundation           iconv           zlib

bzlib              securetransport

 

External libraries providing hardware acceleration:

audiotoolbox           videotoolbox

 

Libraries:

avcodec            avformat            swscale

avdevice           avutil

avfilter           swresample

 

Programs:

ffmpeg             ffprobe

 可以看到最后这里只有ffmpeg 和ffprobe,而没有ffplay 和 ffserver,

 

4.想必大家到这里都不爽吧,编一下这么多错,又是依赖包下载,又是编译安装什么的。

 这里也和大家说下,免得走了弯路,浪费时间。

如果想亲自编译依赖包的,可以自己下下来编,但我得告诉你,一定要各个依赖的的版本要十分清楚,不然编译的时候,有可能出现旧版依赖新版,或新版使用旧版的过时接口,更有的就直接出现找不到接口。反正就是在折腾。

那么mac上有没有什么好的方法可以助我们,我觉得有,如何做?往下看。


在mac上安装brew 工具,具体怎么装,这个网上搜一把吧,不难,有xcode 命令行工具的就更好装。

或许有说,都有brew了,那还编过啥呢,直接 brew install ffmpeg 不就完事了么,的确哈。果然是快啊,不过不知道你注意到没有,brew install ffmpeg装好的只有ffmpeg和ffprobe只有这两个,如果你觉得有这两个够了,那也无所谓。

不废话了,用brew info ffmpeg看下ffmpeg的相关信息。

FFmpeg 在macOS上的编译_第1张图片

这图中是我把所有依赖都装好了的,打勾表示已经装了,打叉表示没有装。如果有打叉的朋友,建议使用brew install xxx来安装,为啥用这个来装依赖库呢,这个就不用担心版本编译依赖问题,这个自动帮你检测先择相互合适的版本。如装libass,可以brew install libass,如果找不到试下brew install ass,再找不到怎么办?把libass往百度或google 里扔,看下他是在那个包下面的,然后安装装完整包就可以了。一般情况下能找到。祝各位顺利,如果都安装完成了 。那么就可以到ffmpeg源码里尽情的编吧,因为本地的依赖都安装了。不用太担心编译依赖问题。不管是用简单的./configure还是带参数的,都可以试下吧。至于configure后面的参数,过程我会转一篇文章过来,上有说明各个参数之间的情况,只是部分。


重点来了:怎么把ffplay和ffserver给编译出来。

对于ffplay这个需要依赖sdl,如果安装了sdl就可以出来了,我的版本是3.4.2,一开始装了sdl但太旧了编译不过,我又装了sdl2,结果好了。

ffserver 又怎么出来呢?官方网站中有这么一句

  • FFserver is no longer part of the FFmpeg project.

一开始我想是不是把这个移到别的项目了,不再在ffmpeg了,我尝试了十来次的编译,尝试开启--enable-ffserverw但都没有用。后来我不得已,试了下切换版本,换到3.0,结果ffserver出来了,于是我猜是不是只有release版才有,而不在master分支,因此我又下了3.4的release包,果然不出我所料。还是有ffserver,就是master没有。现在不猜是不是后面拿掉,这个后面如果更高的版本碰到没有输出ffserver再来想法子。怎么看有没有,很简单的 ./configure --help 找到 program options日志部分一看便知,如图:

FFmpeg 在macOS上的编译_第2张图片


编译时记得把 --disable-ffplay 和--disable-ffserver去掉,或改成--enable-ffplay ,--enable-ffserver 。就好啦。


最后还有个注意点,要告诉编译的朋友,因为我尝试了好多次编译,下了好多不同版本的依赖包,因此编译过程中存在一些旧的编译依赖.o文件和依赖关系,导至有些找不到的错误,因此在make前使用一下make clean 把之前编过的清理一下,重新make.

好了,祝大家顺利吧,我去找./configure的参数说明文章了,后面转载过来。方便阅读。











你可能感兴趣的:(FFmpeg)