石头的实习之路1——Windows下的FFmpeg按需编译

昨天突然接到部门前辈的需求,原版FFmpeg过大,对于项目来说太大,只需要用到pcm转mp3。需要我对FFmepg裁剪至合适大小。

接到需求一脸懵,完全对FFmpeg没了解。但是还是硬着头皮上,特此记录一下。

以下涉及到的是石头浅见,各位前辈还请多多指导。

首先就是编译环境的搭建,小弟参考的是这篇文章,前辈讲的很详细:

https://blog.csdn.net/zhouyongku/article/details/44961447

按照步骤搭建好编译环境后,打开C:\MinGW\msys\1.0\msys.bat,进入FFmpeg目录,输入以下命令查看FFmpeg的详细信息。

./configure --help #查看详细信息

./configure --list-encoders #查看所有编码器

./configure --list-decoders #查看所有解码器

例:
--disable-decoders #禁用所有解码器
--enable-decoder=pcm_s16be #打开指定解码器

./configure --prefix=/buildout  #指定编译目录

  

参考其他前辈的思路,先禁用所有的,再打开需要的。

配置完成之后make         再make install

配置过程中可能遇到的错误

1.ERROR: 1ibnp31ame >= 3.98.3 not found

没有找到第三方库lame,如果你没有下载lame库而配置的时候enable-libmp3lame的话就会报错

如果你需要mp3的编码,请下载第三方库lame

注意:lame版本要大于3.98.3,我下的版本是3.100的最新版本

下载链接: https://sourceforge.net/projects/lame/files/

下载后打开C:\MinGW\msys\1.0,进入刚刚下载的lame目录,配置、生成老一套:

./configure --prefix=/shared --enable-shared --enable-static #配置完成后
make #结束后
make install

#也可以这么写,执行完了自动执行下一个
./configure --prefix=/shared --enable-shared --enable-static && make && make install

lame 的make过程中可能还会遇到错误!!!折磨!

ERROR:langinfo.h: No such file or directory

参考官方两篇文档:

https://sourceforge.net/p/lame/svn/6416/#diff-1

https://sourceforge.net/p/lame/svn/6410/

修改lame-3.100\frontend.parse.c和configure.in两个文件

示例:

修改完成后make && make install就可以通过了

接下来开始编译FFmpeg

./configure
--prefix=/shared     #指定编译生成的文件目录,如果是./shared就是在mysys/1.0目录下的shared文件夹
                #如果是/shared就是在ffmpeg目录下的 shared文件夹
--enable-gpl
--enable-version3
--disable-w32threads
--enable static     #生成静态文件 .exe文件
--disable shared     #禁止生成动态文件 .dll文件(动态链接库)
--enable libmp3lame     #导入第三方库
--extra-cflags=-I/static/include     #指定第三方库lame的位置
--extra-ldflags=-L/static/lib     #指定第三方库lame的位置
--disable-ffplay
--disable-ffprobe
--disable-decoders     #禁用所有解码器
--enable-decoder=pcm_s16be     #开启需要的
--enable-decoder=pcm_s16le
-disable-encoders     #禁用所有编码器
--enable-encoder=libmp3lame     #开启需要的
--disable-muxers     #具体不知道啥用,禁用所有压缩体积,但是开启我需要的以防报错
--enable-muxer=pcm_s16be
--enable-muxer=pcm_s16le
--enable-muxer=mp3
--disable-demuxers
--enable-demuxer=pcm_s16be
--enable-demuxer=pcm_s16le
--enable-demuxer=mp3
--enable-small     #缩小ffmpeg.exe的体积  大概2M左右 牺牲了编译速度


#因为我只用得到音频格式转码,只需要用到ffmpeg.exe

换行快捷键 \+回车

make过程中可能会报错,关于文件os_support.c XXXX

在ffmpeg/ libavformat/ os_support.c找到该文件在指定位置加入

#include <WinError.h>

然后make && make install 后就可以在你指定的目录里看到生成的静态文件ffpmeg.exe

如果没有指定目录生成的静态文件应该是在ffmpeg的根目录下,仔细找一找

FFmpeg验证

在文件地址栏上直接cmd,输入一段音频转码的代码:回车

不知道为什么报警告,但是产生了新的mp3文件,并且试听没有问题,一切正常。

至此已经编译成功了ffmpeg的一个6M文件,达到项目集成的初步要求。- - !松了口气

如果没有意外情况的话,会看到你新生成的文件,如果出现以下错误

意思是没有MP3的编码器,你可能禁用了MP3的编码器,无法转换格式。一种情况是你的第三方库libmp3lame没有加入ffmpeg,也有可能是你的配置写的不正确,可能disable-encoders禁用了所有编码器,输入ffmpeg -codecs查看支持的编码,D代表支持解码,E代表支持编码。

看到这一行说明加入第三方库lame已经成功。

如果出现这个错误

在windows系统目录C:\Windows\System32下找到该文件复制到ffmepg.exe目录下运行即可。

至此,生成了大小为6MB的ffmpeg.exe文件,完成了第一阶段的目标。耗时四天。

最后

参考了这几篇文章,一步一步走到这里。第一次写博客,只是记录下自己的踩坑历程,对FFmpeg的编译只是一点皮毛,有不对的地方各位前辈多多指教。

编译lame-3.100,报错:langinfo.h: No such file or directory

ffmpeg支持MP3编码的方法

编译:ffmpeg,精简ffmpeg.exe

FFmpeg编译以及遇到的问题_Windows平台


版权声明:本文为qq_44462050原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。