FFmpeg 4.1.1 直接下载编译好的版本实在是太大了 64 位的 61M, 32 位的 59M. 但是唧唧用不到所有的功能所以一直用着旧版本的只有 21M 的 FFmpeg 苟命. 但是由于编码更新了, 旧的也出现了问题在此不得不更新 FFmpeg 了.
直接更新存在一个流量费贵的问题, 59M 的压缩后也有 18M 在算上几万次的下载请求. 流量费非常昂贵.
于是想到了编译一个只有唧唧需要功能的 FFmpeg 给唧唧使用. 就有了这篇文章~ 编译完的只有 3M 哟!~
如何编译精简版 FFmpeg
如果你只需要 FFmpeg 的某些功能而不需要全部的功能, 可以通过编译精简版来减少二进制文件的大小。下面是我在编译精简版 FFmpeg 时的一些经验与操作步骤。
唧唧处理视频需要的模块
flv 解流|混流、MP4 混流、h264 解码器、HEVC 解码、文件协议、mp3 编码 (libmp3lame)
环境安装
首先, 需要安装交叉编译工具, 下面是必要的工具包
apt-get install gcc-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64-tools yasm lua5.2 libtool automake autoconf autopoint make gettext pkg-config
编译 libmp3lame
下载地址: LAME (Lame Aint an MP3 Encoder)
备用下载: lame-3.100.tar.gz
我们选择使用 MP3 编码器是 libmp3lame
FFmpeg 4.1.2 需要 3.98.3 以上版本的, 首先需要编译 libmp3lame 3.100
libmp3lame 3.100 版本编译 Windows 版本会遇到一个错误
Cannot export lame_init_old: symbol not defined
bug 跟踪连接 https://sourceforge.net/p/lame/bugs/487/
Version 3.100 breaks Windows compatibility when using libiconv since frontend/parse.c now depends on langinfo.h.
I'm using the MinGW-w64 (GCC-compatible) compiler.
Looks better now, except for this error:
Cannot export lame_init_old: symbol not defined
But I was able to build both static and shared libraries for Windows after removing lame_init_old from include/libmp3lame.sym.
大致解释就是编辑 include/libmp3lame.sym
文件, 把 lame_init_old
删除就可以编译了
libmp3lame 编译参数
./configure --host=i686-w64-mingw32 --enable-static=yes --enable-shared=no
make -j
sudo make install
编译 FFmpeg
在编译 FFmpeg 时, 我们需要配置选项来指定要编译的功能, 以便精简不需要的部分。
FFmpeg 大部分参数是由 TG 群的 Xuan 提供的, 感谢
# 配置
./configure --arch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32- --disable-debug --disable-doc --disable-ffplay --disable-ffprobe --enable-static --disable-shared --disable-network --disable-autodetect --disable-decoders --enable-gpl --enable-version3 --enable-decoder=h264,hevc,aac*,mp3*,mp4 --disable-encoders --disable-demuxers --enable-demuxer=concat,mov,m4v,flv,mp3 --disable-muxers --enable-muxer=flv,mp4,mp3 --enable-encoder=libmp3lame,mp3 --disable-parsers --enable-parser=h264,hevc --disable-protocols --enable-protocol=concat,file --disable-bsfs --enable-bsf=h264_metadata,h264_mp4toannexb,hevc_mp4toannexb,hevc_metadata --disable-filters --enable-filter=concat,aresample --disable-iconv --enable-small --enable-libmp3lame --extra-ldflags="-L/usr/local/lib" --extra-cflags="-I/usr/local/include"
# 编译
make -j
注意事项
libmp3lame 交叉编译
如果你没有交叉编译 libmp3lame
, 而是直接使用了 Linux 下的 .so
文件, 那么会出现这错误。请确保交叉编译 libmp3lame
, 并将其用于 Windows 编译。
undefined reference to '_lame_set_VBR_quality'
/usr/local/lib/libmp3lame.so is your native lame library (for linux). you should cross-compile lame for windows
原文
lame_set_VBR_quality (again)
Best config for ffmpeg to convert MP3 file only
How to compile ffmpeg to get only mp3 and mp4 support