我终于成功构建了 ffmpeg,详见此处:https://enoent.fr/blog/2014/06/20/compile-ffmpeg-for-android/最后,我有一个 ffmpeg 库,它接受命令参数。
我只是在视频上应用水印图像,所以我使用这个 ffmpeg 命令:
ffmpeg -i input.avi -i logo.png -filter_complex 'overlay=10:main_h-overlay_h-10' output.avi
基本配置:
./configure \
--prefix=$PREFIX \
--disable-shared \
--enable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-protocol=concat \
--enable-protocol=file \
--enable-muxer=mp4 \
--enable-demuxer=mpegts \
--enable-memalign-hack \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic -marm $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS"
ffmpeg 不需要其他命令。
编译 ffmpeg 时我得到这些文件:
我想将库的大小减小到尽可能小,所以根据上述命令,是否有任何文件可以从最终构建中删除?
另外,当前设备中最常见的 CPU 是哪个? arm v7vfpv3, arm v7vfp, arm v7n ?我想覆盖尽可能多的设备。
#arm v6
#CPU=armv6
#OPTIMIZE_CFLAGS="-marm -march=$CPU"
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
#arm v7vfpv3
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one
#arm v7vfp
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
#PREFIX=./android/$CPU-vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
#arm v7n
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=--enable-neon
#build_one
#arm v6+vfp
#CPU=armv6
#OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"
#PREFIX=./android/${CPU}_vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
最佳答案
如果您的编译器支持,您可以使用链接时优化 (LTO)。 GCC 和 LTO 优化了从未调用的内容,我取得了很好的结果。我将从 LordNeckbeard 的建议开始,仅配置您需要的部分,然后将 LTO 与您的静态链接一起使用。
减少代码大小的其他选项包括大多数编译器以一种或另一种形式支持的大小优化 (-Os)。您还可以使用 strip --strip-all ./your_binary
之类的方法去除不需要的符号。
如果所有这些还不足以让您达到目标大小,请查看可执行加壳程序,例如 UPX .这些程序将进行 cpu/内存权衡以动态解压缩二进制文件。在某些架构上,这可以节省大量空间。
关于android - 根据我的需要减少编译后的 ffmpeg 库大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25920441/