Как мне изменить этот скрипт сборки ffmpeg для вывода минимального двоичного размера

Я пытаюсь собрать двоичные файлы ffmpeg для Android на 3 чипсетах. Размер выходного файла слишком велик для включения в проект около 15 МБ.

https://github.com/falnatsheh/ffmpeg-android - репозиторий проекта github

скрипт сборки.sh для ffmpeg выглядит следующим образом

#!/bin/bash

. abi_settings.sh $1 $2 $3

pushd ffmpeg

case $1 in
  armeabi-v7a | armeabi-v7a-neon)
    CPU='cortex-a8'
  ;;
  x86)
    CPU='i686'
  ;;
esac

make clean

./configure \
--target-os="$TARGET_OS" \
--cross-prefix="$CROSS_PREFIX" \
--arch="$NDK_ABI" \
--cpu="$CPU" \
--enable-runtime-cpudetect \
--sysroot="$NDK_SYSROOT" \
--enable-pic \
--enable-libx264 \
--enable-pthreads \
--disable-debug \
--disable-ffserver \
--enable-version3 \
--enable-hardcoded-tables \
--disable-ffplay \
--disable-ffprobe \
--enable-gpl \
--enable-yasm \
--disable-doc \
--disable-shared \
--enable-static \
--pkg-config="${2}/ffmpeg-pkg-config" \
--prefix="${2}/build/${1}" \
--extra-cflags="-I${TOOLCHAIN_PREFIX}/include $CFLAGS" \
--extra-ldflags="-L${TOOLCHAIN_PREFIX}/lib $LDFLAGS" \
--extra-libs="-lm" \
--extra-cxxflags="$CXX_FLAGS" || exit 1

make -j${NUMBER_OF_CORES} && make install || exit 1

popd

Я попытался добавить --disable-everything в качестве первой строки в конфигурации, но потом компилятор жалуется, что я не установил target-os, хотя это следующая строка

В приложении я использую только ffmpeg, чтобы взять входные видео mp4 и транспонировать и повернуть их, вот две команды

-y -i %s -vf transpose=%d -tune film -metadata:s:v rotate=0 -c:v libx264 -preset ultrafast -crf 27 -c:a copy -bsf:a aac_adtstoasc %s

где%s - путь к файлу

а затем конкатать файлы

-y -i concat:%s -preset ultrafast -crf 27 -c:v copy -c:a copy -bsf:a aac_adtstoasc %s

Если кто-то может помочь мне с сценарием сборки, это было бы здорово

2 ответа

Решение

Вы можете отключить некоторую функцию и открыть декодирование, демультиплексируя вам нужную.

такие как:

**--disable-demuxers**
**--disable-decoders**
**--disable-devices**
**--disable-filters**
**--enable-decoder=h264**
**--enable-decoder=mp3***
**--enable-demuxer=mpegts**

Рекомендую вам открытый исходный код Android и IOS ffmpeg

https://github.com/bbcallen/ijkplayer

Вы можете использовать подход дробовика. Это просто случайный список для примера и может не совсем соответствовать вашим потребностям:

./configure \
--disable-everything \
--enable-decoder=aac,h264,mjpeg,mpeg2video,mpeg4 \
--enable-encoder=aac,mpeg4,libx264 \
--enable-protocol=concat,file \
--enable-demuxer=aac,avi,h264,image2,matroska,pcm_s16le,mov,m4v,rawvideo,wav \
--enable-muxer=h264,ipod,mov,mp4 \
--enable-parser=aac,h264,mjpeg,mpeg4video,mpegaudio,mpegvideo,png \
--enable-bsf=aac_adtstoasc \
--enable-filter=transpose \
--enable-gpl \
--enable-libx264
  • Вам придется экспериментировать, потому что вы можете забыть включить что-то, когда вы используете --disable-everything, Ссылаться на ./configure --help,

  • --(dis|en)able-* Опции могут принимать список через запятую, как показано в моем примере.

Другие вопросы по тегам