我终于设法构建了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时我得到这些文件:
我想将库的大小减小到尽可能小,所以根据上面的命令,我可以从最终构建中删除任何文件吗?
ALSO哪个是当前设备中最常见的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
答案 0 :(得分:1)
如果编译器支持,可以使用链接时优化(LTO)。 GCC和LTO优化了从未调用过的东西,我的成绩非常好。我将从LordNeckbeard的建议开始,仅配置您需要的部分,然后将LTO用于静态链接。
减少代码大小的其他选项包括大多数编译器以某种形式支持的大小优化(-Os)。您还可以使用strip --strip-all ./your_binary
等内容删除不需要的符号。
如果所有这些都不足以让您达到目标大小,请查看UPX等可执行文件包。这些程序将进行cpu /内存权衡,以便动态解压缩二进制文件。在某些架构上,这可以节省大量空间。