\我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装。那么如何使用Android的NDK编译出来可以在Android下面可以使用的FFmpeg动态链接库呢?写下这篇文章就是学习如何裁剪并且编译出来可以使用的动态库。
一、获取FFmpeg源码:
首先在编译之前,得获取一份FFmpeg的源码,如果你没有git并且也不打算使用,你可以去FFmpeg官网http://ffmpeg.org/去下载Zip包。你也可以使用git来获取源码:
git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg git reset --hard git clean -f -d git checkout -B stable 2.3.2
二、了解FFmpeg中configure选项:
执行./configure --help可以得到如下选项:
Usage: configure [options] Options: [defaults in brackets after descriptions] Help options: --help print this message --list-decoders show all available decoders --list-encoders show all available encoders --list-hwaccels show all available hardware accelerators --list-demuxers show all available demuxers --list-muxers show all available muxers --list-parsers show all available parsers --list-protocols show all available protocols --list-bsfs show all available bitstream filters --list-indevs show all available input devices --list-outdevs show all available output devices --list-filters show all available filters Standard options: --logfile=FILE log tests and output to FILE [config.log] --disable-logging do not log configure debug information --fatal-warnings fail if any configure warning is generated --prefix=PREFIX install in PREFIX [] --bindir=DIR install binaries in DIR [PREFIX/bin] --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg] --docdir=DIR install documentation in DIR [PREFIX/share/doc/ffmpeg] --libdir=DIR install libs in DIR [PREFIX/lib] --shlibdir=DIR install shared libs in DIR [PREFIX/lib] --incdir=DIR install includes in DIR [PREFIX/include] --mandir=DIR install man page in DIR [PREFIX/share/man] --enable-rpath use rpath to allow installing libraries in paths not part of the dynamic linker search path Licensing options: --enable-gpl allow use of GPL code, the resulting libs and binaries will be under GPL [no] --enable-version3 upgrade (L)GPL to version 3 [no] --enable-nonfree allow use of nonfree code, the resulting libs and binaries will be unredistributable [no] Configuration options: --disable-static do not build static libraries [no] --enable-shared build shared libraries [no] --enable-small optimize for size instead of speed --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary) --enable-gray enable full grayscale support (slower color) --disable-swscale-alpha disable alpha channel support in swscale --disable-all disable building components, libraries and programs --enable-incompatible-libav-abi enable incompatible Libav fork ABI [no] --enable-raise-major increase major version numbers in sonames [no] Program options: --disable-programs do not build command line programs --disable-ffmpeg disable ffmpeg build --disable-ffplay disable ffplay build --disable-ffprobe disable ffprobe build --disable-ffserver disable ffserver build Documentation options: --disable-doc do not build documentation --disable-htmlpages do not build HTML documentation pages --disable-manpages do not build man documentation pages --disable-podpages do not build POD documentation pages --disable-txtpages do not build text documentation pages Component options: --disable-avdevice disable libavdevice build --disable-avcodec disable libavcodec build --disable-avformat disable libavformat build --disable-avutil disable libavutil build --disable-swresample disable libswresample build --disable-swscale disable libswscale build --disable-postproc disable libpostproc build --disable-avfilter disable libavfilter build --enable-avresample enable libavresample build [no] --disable-pthreads disable pthreads [auto] --disable-w32threads disable Win32 threads [auto] --disable-os2threads disable OS/2 threads [auto] --disable-network disable network support [no] --disable-dct disable DCT code --disable-dwt disable DWT code --disable-error-resilience disable error resilience code --disable-lsp disable LSP code --disable-lzo disable LZO decoder code --disable-mdct disable MDCT code --disable-rdft disable RDFT code --disable-fft disable FFT code Hardware accelerators: --disable-dxva2 disable DXVA2 code [autodetect] --disable-vaapi disable VAAPI code [autodetect] --disable-vda disable VDA code [autodetect] --disable-vdpau disable VDPAU code [autodetect] Individual component options: --disable-everything disable all components listed below --disable-encoder=NAME disable encoder NAME --enable-encoder=NAME enable encoder NAME --disable-encoders disable all encoders --disable-decoder=NAME disable decoder NAME --enable-decoder=NAME enable decoder NAME --disable-decoders disable all decoders --disable-hwaccel=NAME disable hwaccel NAME --enable-hwaccel=NAME enable hwaccel NAME --disable-hwaccels disable all hwaccels --disable-muxer=NAME disable muxer NAME --enable-muxer=NAME enable muxer NAME --disable-muxers disable all muxers --disable-demuxer=NAME disable demuxer NAME --enable-demuxer=NAME enable demuxer NAME --disable-demuxers disable all demuxers --enable-parser=NAME enable parser NAME --disable-parser=NAME disable parser NAME --disable-parsers disable all parsers --enable-bsf=NAME enable bitstream filter NAME --disable-bsf=NAME disable bitstream filter NAME --disable-bsfs disable all bitstream filters --enable-protocol=NAME enable protocol NAME --disable-protocol=NAME disable protocol NAME --disable-protocols disable all protocols --enable-indev=NAME enable input device NAME --disable-indev=NAME disable input device NAME --disable-indevs disable input devices --enable-outdev=NAME enable output device NAME --disable-outdev=NAME disable output device NAME --disable-outdevs disable output devices --disable-devices disable all devices --enable-filter=NAME enable filter NAME --disable-filter=NAME disable filter NAME --disable-filters disable all filters External library support: --enable-avisynth enable reading of AviSynth script files [no] --disable-bzlib disable bzlib [autodetect] --enable-fontconfig enable fontconfig --enable-frei0r enable frei0r video filtering --enable-gnutls enable gnutls [no] --disable-iconv disable iconv [autodetect] --enable-ladspa enable LADSPA audio filtering --enable-libaacplus enable AAC+ encoding via libaacplus [no] --enable-libass enable libass subtitles rendering [no] --enable-libbluray enable BluRay reading using libbluray [no] --enable-libbs2b enable bs2b DSP library [no] --enable-libcaca enable textual display using libcaca --enable-libcelt enable CELT decoding via libcelt [no] --enable-libcdio enable audio CD grabbing with libcdio --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 and libraw1394 [no] --enable-libfaac enable AAC encoding via libfaac [no] --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no] --enable-libflite enable flite (voice synthesis) support via libflite [no] --enable-libfreetype enable libfreetype [no] --enable-libfribidi enable libfribidi [no] --enable-libgme enable Game Music Emu via libgme [no] --enable-libgsm enable GSM de/encoding via libgsm [no] --enable-libiec61883 enable iec61883 via libiec61883 [no] --enable-libilbc enable iLBC de/encoding via libilbc [no] --enable-libmodplug enable ModPlug via libmodplug [no] --enable-libmp3lame enable MP3 encoding via libmp3lame [no] --enable-libnut enable NUT (de)muxing via libnut, native (de)muxer exists [no] --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no] --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no] --enable-libopencv enable video filtering via libopencv [no] --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no] --enable-libopus enable Opus de/encoding via libopus [no] --enable-libpulse enable Pulseaudio input via libpulse [no] --enable-libquvi enable quvi input via libquvi [no] --enable-librtmp enable RTMP[E] support via librtmp [no] --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no] --enable-libshine enable fixed-point MP3 encoding via libshine [no] --enable-libsmbclient enable Samba protocol via libsmbclient [no] --enable-libsoxr enable Include libsoxr resampling [no] --enable-libspeex enable Speex de/encoding via libspeex [no] --enable-libssh enable SFTP protocol via libssh [no] --enable-libstagefright-h264 enable H.264 decoding via libstagefright [no] --enable-libtheora enable Theora encoding via libtheora [no] --enable-libtwolame enable MP2 encoding via libtwolame [no] --enable-libutvideo enable Ut Video encoding and decoding via libutvideo [no] --enable-libv4l2 enable libv4l2/v4l-utils [no] --enable-libvidstab enable video stabilization using vid.stab [no] --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no] --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no] --enable-libvorbis enable Vorbis en/decoding via libvorbis, native implementation exists [no] --enable-libvpx enable VP8 and VP9 de/encoding via libvpx [no] --enable-libwavpack enable wavpack encoding via libwavpack [no] --enable-libwebp enable WebP encoding via libwebp [no] --enable-libx264 enable H.264 encoding via x264 [no] --enable-libx265 enable HEVC encoding via x265 [no] --enable-libxavs enable AVS encoding via xavs [no] --enable-libxvid enable Xvid encoding via xvidcore, native MPEG-4/Xvid encoder exists [no] --enable-libzmq enable message passing via libzmq [no] --enable-libzvbi enable teletext support via libzvbi [no] --enable-decklink enable Blackmagick DeckLink output [no] --enable-openal enable OpenAL 1.1 capture support [no] --enable-opencl enable OpenCL code --enable-opengl enable OpenGL rendering [no] --enable-openssl enable openssl [no] --enable-x11grab enable X11 grabbing [no] --disable-xlib disable xlib [autodetect] --disable-zlib disable zlib [autodetect] Toolchain options: --arch=ARCH select architecture [] --cpu=CPU select the minimum required CPU (affects instruction selection, may crash on older CPUs) --cross-prefix=PREFIX use PREFIX for compilation tools [] --progs-suffix=SUFFIX program name suffix [] --enable-cross-compile assume a cross-compiler is used --sysroot=PATH root of cross-build tree --sysinclude=PATH location of cross-build system headers --target-os=OS compiler targets OS [] --target-exec=CMD command to run executables on target --target-path=DIR path to view of build directory on target --target-samples=DIR path to samples directory on target --tempprefix=PATH force fixed dir/prefix instead of mktemp for checks --toolchain=NAME set tool defaults according to NAME --nm=NM use nm tool NM [nm -g] --ar=AR use archive tool AR [ar] --as=AS use assembler AS [] --windres=WINDRES use windows resource compiler WINDRES [windres] --yasmexe=EXE use yasm-compatible assembler EXE [yasm] --cc=CC use C compiler CC [gcc] --cxx=CXX use C compiler CXX [g++] --dep-cc=DEPCC use dependency generator DEPCC [gcc] --ld=LD use linker LD [] --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [pkg-config] --pkg-config-flags=FLAGS pass additional flags to pkgconf [] --ranlib=RANLIB use ranlib RANLIB [ranlib] --doxygen=DOXYGEN use DOXYGEN to generate API doc [doxygen] --host-cc=HOSTCC use host C compiler HOSTCC --host-cflags=HCFLAGS use HCFLAGS when compiling for host --host-cppflags=HCPPFLAGS use HCPPFLAGS when compiling for host --host-ld=HOSTLD use host linker HOSTLD --host-ldflags=HLDFLAGS use HLDFLAGS when linking for host --host-libs=HLIBS use libs HLIBS when linking for host --host-os=OS compiler host OS [] --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [] --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [] --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [] --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [] --extra-libs=ELIBS add ELIBS [] --extra-version=STRING version string suffix [] --optflags=OPTFLAGS override optimization-related compiler flags --build-suffix=SUFFIX library name suffix [] --enable-pic build position-independent code --enable-thumb compile for Thumb instruction set --enable-lto use link-time optimization Advanced options (experts only): --malloc-prefix=PREFIX prefix malloc and related names with PREFIX --disable-symver disable symbol versioning --enable-hardcoded-tables use hardcoded tables instead of runtime generation --disable-safe-bitstream-reader disable buffer boundary checking in bitreaders (faster, but may crash) --enable-memalign-hack emulate memalign, interferes with memory debuggers --enable-sram allow use of on-chip SRAM --sws-max-filter-size=N the max filter size swscale uses [256] Optimization options (experts only): --disable-asm disable all assembly optimizations --disable-altivec disable AltiVec optimizations --disable-amd3dnow disable 3DNow! optimizations --disable-amd3dnowext disable 3DNow! extended optimizations --disable-mmx disable MMX optimizations --disable-mmxext disable MMXEXT optimizations --disable-sse disable SSE optimizations --disable-sse2 disable SSE2 optimizations --disable-sse3 disable SSE3 optimizations --disable-ssse3 disable SSSE3 optimizations --disable-sse4 disable SSE4 optimizations --disable-sse42 disable SSE4.2 optimizations --disable-avx disable AVX optimizations --disable-xop disable XOP optimizations --disable-fma3 disable FMA3 optimizations --disable-fma4 disable FMA4 optimizations --disable-avx2 disable AVX2 optimizations --disable-armv5te disable armv5te optimizations --disable-armv6 disable armv6 optimizations --disable-armv6t2 disable armv6t2 optimizations --disable-vfp disable VFP optimizations --disable-neon disable NEON optimizations --disable-inline-asm disable use of inline assembly --disable-yasm disable use of nasm/yasm assembly --disable-mips32r2 disable MIPS32R2 optimizations --disable-mipsdspr1 disable MIPS DSP ASE R1 optimizations --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations --disable-mipsfpu disable floating point MIPS optimizations --disable-fast-unaligned consider unaligned accesses slow Developer options (useful when working on FFmpeg itself): --disable-debug disable debugging symbols --enable-debug=LEVEL set the debug level [] --disable-optimizations disable compiler optimizations --enable-extra-warnings enable more compiler warnings --disable-stripping disable stripping of executables and shared libraries --assert-level=level 0(default), 1 or 2, amount of assertion testing, 2 causes a slowdown at runtime. --enable-memory-poisoning fill heap uninitialized allocated space with arbitrary data --valgrind=VALGRIND run "make fate" tests through valgrind to detect memory leaks and errors, using the specified valgrind binary. Cannot be combined with --target-exec --enable-ftrapv Trap arithmetic overflows --samples=PATH location of test samples for FATE, if not set use $FATE_SAMPLES at make invocation time. --enable-neon-clobber-test check NEON registers for clobbering (should be used only for debugging purposes) --enable-xmm-clobber-test check XMM registers for clobbering (Win64-only; should be used only for debugging purposes) --enable-random randomly enable/disable components --disable-random --enable-random=LIST randomly enable/disable specific components or --disable-random=LIST component groups. LIST is a comma-separated list of NAME[:PROB] entries where NAME is a component (group) and PROB the probability associated with NAME (default 0.5). --random-seed=VALUE seed value for --enable/disable-random NOTE: Object files are built at the place where configure is launched.
这些选项,这些选项是需要我们设置,有些选项可以是FFmpeg优化选项,可以针对CPU进行优化,也有一些选项可以不用编译进去,这样就可以减少编译出来的FFmpeg动态链接库的体积。
三、设置NDK:
export ANDROID_NDK=/path/to/your/android/ndk/root
export FF_BUILD_ROOT=`pwd`
export FF_BUILD_NAME=ffmpeg
export FF_ANDROID_PLATFORM=android-14
export FF_TOOLCHAIN_PATH=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/toolchain
export FF_SYSROOT=$FF_TOOLCHAIN_PATH/sysroot
export FF_MAKE_TOOLCHAIN_FLAGS="--install-dir=$FF_TOOLCHAIN_PATH"
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh $FF_MAKE_TOOLCHAIN_FLAGS --platform=$FF_ANDROID_PLATFORM --toolchain=$FF_TOOLCHAIN_NAME
在这一点上,我们可以使用Android工具链独立位于$ TOOLCHAINE建立我们的FFmpeg的。关于Android独立的工具链更多细节可以在Android的NDK的文档中找到。
四、设置FFmpeg:
在前面我们知道了FFmpeg有设置选项并且知道每一个选项是什么意思,在这里我们需要的就是设置这些选项,如上面所写如果都这么写的话就麻烦死了,于是下面这些都是可以在bash中执行的脚本语言:
FF_PREFIX=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/output
FF_CROSS_PREFIX=arm-linux-androideabi PATH=$FF_TOOLCHAIN_PATH/bin:$PATH CC="ccache ${FF_CROSS_PREFIX}-gcc" LD=${FF_CROSS_PREFIX}-ld AR=${FF_CROSS_PREFIX}-ar STRIP=${FF_CROSS_PREFIX}-strip
FF_CFLAGS="-O3 -Wall -pipe \ -std=c99 -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID -DNDEBUG"
前面说了的,我们可以对configure设置进行裁剪,在这里可以参考我们第二步中的confingure选择我们需要的选项进行设置:
FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=arm --cpu=cortex-a8" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-neno" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-thumb" FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=armv7-a -mcpu=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp -mthumb" FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS -Wl,--fix-cortex-a8" # Standard options: FF_CFG_FLAGS="$FF_CFG_FLAGS --prefix=$FF_PREFIX" #Licensing options: #allow use of GPL code, the resulting libs FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-gpl" #upgrade (L)GPL to version 3 [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-version3" #allow use of nonfree code, the resulting libs and binaries will be unredistributable [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-nonfree" #Configuration options: #do not build static libraries [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-static" #build shared libraries [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-shared" #optimize for size instead of speed FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-small" #disable detecting cpu capabilities at runtime (smaller binary) FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-runtime-cpudetect" #enable full grayscale support (slower color) FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-gray" #disable alpha channel support in swscale FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-swsacle-alpha" #Program options: #do not build command line programs FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-programs" #disable ffmpeg build FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-ffmpeg" #disable ffplay build FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-ffplay" #disable ffprobe build FF_CFG_FLAGS="$FF_CFG_FLAGS --diable-ffprobe" #disable ffserver build FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-ffserver" #Documentation options: #do not build documentation FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-doc" #do not build HTML documentation pages FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-htmlpages" #do not build man documentation pages FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-manmpages" #do not build POD documentation pages FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-podpages" #do not build text documentation pages FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-txtpages" #Componet options:disable libpostproc build #disable libavdevice build FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-avdevice" #disable libavcodec build FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-avcodec" #disable libavformat build FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-avformat" #disable libavutil build FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-avutil" #disable libswresample build FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-swresample" #disable libswscale build FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-swscale" #disable libpostproc build FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-postproc" #disable libavfilter build FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-avfilter" #enable libavresample build [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-avresample" #disable pthreads [auto] #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-pthreads" #disable Win32 threads [auto] #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-w32threads" #disable OS/2 threads [auto] #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-os2threads" #disable network support [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-network" #disable DCT code # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-dct" #disable DWT code # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-dwt" #disable LSP code # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-lsp" #disable LZO decoder code # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-lzo" #disable MDCT code # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-mdct" #disable RDFT code # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-rdft" #disable FFT code # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-fft" #Hardware accelerators: #disable DXVA2 code [autodetect] FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-dxva2" #disable VAAPI code [autodetect] FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-vaapi" #enable VDA code FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-vda" #disable VDPAU code [autodetect] FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-vdpau" #Individual component options: #disable all components listed below #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-everythins" #disable all encoders FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-encoders" #disable all decoders FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-decoders" #disable decoder aac FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=aac" #disable decoder aac_latm FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=aac_latm" #disable decoder ac3 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=ac3" #disable decoder ape FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=ape" #disable decoder flac FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=flac" #disable decoder flv FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=flv" #disable decoder h261 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h261" #disable decoder h263 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h263" #disable decoder h263i FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h263i" #disable decoder h263p FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h263p" #disable decoder h264 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h264" #disable decoder mp3 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=mp3" #disable decoder mp3float FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=mp3float" #disable decoder mp3on4 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=mp3on4" #disable decoder mp3on4float FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=mp3on4float" #disable decoder mpeg4 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=mpeg4" #disable decoder msmpeg4v1 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=msmpeg4v1" #disable decoder msmpeg4v2 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=msmpeg4v2" #disable decoder msmpeg4v3 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=msmpeg4v3" #disable decoder pcm_* FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=pcm_*" #disable decoder ra_144 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=ra_144" #disable decoder ra_288 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=ra_288" #disable decoder ralf FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=ralf" #disable decoder rv10 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=rv10" #disable decoder rv20 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=rv20" #disable decoder rv30 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=rv30" #disable decoder rv40 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=rv40" #disable decoder theora FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=theora" #disable decoder vc1 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vc1" #disable decoder vorbis FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vorbis" #disable decoder vp3 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp3" #disable decoder vp5 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp5" #disable decoder vp6 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp6" #disable decoder vp6a FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp6a" #disable decoder vp6f FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp6f" #disable decoder vp8 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp8" #disable decoder webp FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=webp" #disable decoder wmalossless FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmalossless" #disable decoder wmapro FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmapro" #disable decoder wmav1 FF_CFG_FLAGS="$FF_CFG_FLAGS --eanble-decoder=wmav1" #disable decoder wmav2 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmav2" #disable decoder wmv1 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmv1" #disable decoder wmv2 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmv2" #disable decoder wmv3 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmv3" #disable all hwaccels FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-hwaccels" #disable all muxers FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-muxers" #disable all muxer mpegts FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-muxer=mpegts" #disable all demuxers FF_CFG_FLAGS="$FF_CFG_FLAGS --diable-demuxers" #disable demuxer aac FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=aac" #disable demuxer ac3 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=ac3" #disable demuxer ape FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=ape" #disable demuxer asf FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=asf" #disable demuxer concat FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=concat" #disable demuxer data FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=data" #disable demuxer flac FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=flac" #disable demuxer flv FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=flv" #disable demuxer h261 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=h261" #disable demuxer h263 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=h263" #disable demuxer h264 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=h264" #disable demuxer hls FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=hls" #disable demuxer latm FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=latm" #disable demuxer loas FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=loas" #disable demuxer m4v FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=m4v" #disable demuxer matroska FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=matroska" #disable demuxer mov FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mov" #disable demuxer mp3 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mp3" #disable demuxer mpegps FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mpegps" #disable demuxer mpegts FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mpegts" #disable demuxer mpegtsraw FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mpegtsraw" #disable demuxer mpegvideo FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mpegvideo" #disable demuxer ogg FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=ogg" #disable demuxer pcm_* FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=pcm_*" #disable demuxer rm FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=rm" #disable demuxer rtp FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=rtp" #disable demuxer rtsp FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=rtsp" #disable demuxer swf FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=swf" #disable demuxer tta FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=tta" #disable demuxer vc1 FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=vc1" #disable demuxer vc1t FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=vc1t" #disable demuxer wav FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=wav" #disable demuxer xmv FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=xmv" #disable demuxer xwma FF_CFG_FLAGS="$FF_CFG_FLAGS --eanble-demuxer=xwma" #disable all parsers FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-parsers" #disable parser aac #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=aac" #disable parser aac_latm #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=aac_latm" #disable parser ac3 #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parse=ac3" #disable parser adx FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=adx" #disable parser bmp FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=bmp" #disable parser cavsvideo FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=cavsvideo" #disable parser cook FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=cook" #disable parser dca FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dca" #disable parser dirac FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dirac" #disable parser dnxhd FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dnxhd" #disable parser dvbsub FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dvbsub" #disable parser dvd_nav FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dvd_nav" #disable parser dvdsub FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dvdsub" #disable parser flac #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=flac" #disable parser gsm FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=gsm" #disable parser h261 #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=h261" #disable parser h263 #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=h263" #disable parser h264 #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=h264" #disable parser mjpeg FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=mjpeg" #disable parser mlp FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=mlp" #disable parser mpeg4video #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=mpeg4video" #disable parser mpegaudip #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=mpegaudip" #disable parser mpegvideo #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=mpegvideo" #disable parser png FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=png" #disable parser pnm FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=pnm" #disable parser rv30 #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=rv30" #disable parser rv40 #FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=rv40" #disable parser vc1 FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=vc1" #disable parser vorbis FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=vorbis" #disable parser vp3 FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=vp3" #disable parser vp8 FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=vp8" #disable all bsfs FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-bsfs" #disable all protocols FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-protocols" #disable all devices FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-devices" #disable all filters FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-filters" #External library support #enable reading of AviSynth script files [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-avisynth" #disable bzlib [autodetect] FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-bzlib" #enable fontconfig FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-fontconfig" #enable frei0r video filtering FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-frei0r" #enable gnutls [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-gnutls" #disable iconv [autodetect] FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-iconv" #enable LADSPA audio filtering FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-ladspa" #enable AAC+ encoding via libaacplus [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libaacplus" #enable libass subtitles rendering [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libass" #enable BluRay reading using libbluray [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libbluray" #enable textual display using libcaca FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libcaca" #enable CELT decoding via libcelt [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libcelt" #enable audio CD grabbing with libcdio FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libcdio" #enable IIDC-1394 grabbing using libdc1394 and libraw1394 [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libdc1394" #enable AAC encoding via libfaac [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libfaac" #enable AAC de/encoding via libfdk-aac [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libfdk-aac" #enable flite (voice synthesis) support via libflite [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libflite" #enable libfreetype [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libfreetype" #enable Game Music Emu via libgme [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libgme" #enable GSM de/encoding via libgsm [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libgsm" #enable iec61883 via libiec61883 [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libiec61883" #enable iLBC de/encoding via libilbc [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libilbc" #enable ModPlug via libmodplug [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libmodplug" #enable MP3 encoding via libmp3lame [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libmp3lame" #enable NUT (de)muxing via libnut, native (de)muxer exists [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libnut" #enable AMR-NB de/encoding via libopencore-amrnb [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libopencore-amrnb" # enable AMR-WB decoding via libopencore-amrwb [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libopencore-amrwb" #enable video filtering via libopencv [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libopencv" #enable JPEG 2000 de/encoding via OpenJPEG [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libopenjpeg" #enable Opus decoding via libopus [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libopus" #enable Pulseaudio input via libpulse [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libpulse" #enable quvi input via libquvi [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libquvi" #enable RTMP[E] support via librtmp [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-librtmp" #enable Dirac de/encoding via libschroedinger [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libschroedinger" #enable fixed-point MP3 encoding via libshine [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libshine" #enable Include libsoxr resampling [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libsoxr" #enable Speex de/encoding via libspeex [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libspeex" #enable SFTP protocol via libssh [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libssh" #enable H.264 decoding via libstagefright [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libstagefright-h264" #enable Theora encoding via libtheora [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libtheora" #enable MP2 encoding via libtwolame [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libtwolame" #enable Ut Video encoding and decoding via libutvideo [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libutvideo" #enable libv4l2/v4l-utils [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libv4l2" #enable video stabilization using vid.stab [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libvidstab" #enable AAC encoding via libvo-aacenc [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libvo-aacenc" #enable AMR-WB encoding via libvo-amrwbenc [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libvo-amrwbenc" #enable Vorbis en/decoding via libvorbis, native implementation exists [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libvorbis" #enable VP8 and VP9 de/encoding via libvpx [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libvpx" #enable wavpack encoding via libwavpack [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libwavpack" #enable H.264 encoding via x264 [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libx264" #enable AVS encoding via xavs [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libxavs" #enable Xvid encoding via xvidcore, native MPEG-4/Xvid encoder exists [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libxvid" #enable message passing via libzmq [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libzmq" #enable teletext support via libzvbi [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libzvbi" #enable OpenAL 1.1 capture support [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-openal" #enable OpenCL code FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-opencl" #enable openssl [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-openssl" #enable X11 grabbing [no] FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-x11grab" #disable zlib [autodetect] FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-zlib" #Advanced options (experts only): FF_CFG_FLAGS="$FF_CFG_FLAGS --cross-prefix=${FF_CROSS_PREFIX}" FF_CFG_FLAGS="$FF_CFG_FLAGS -enable-cross-compile" # FF_CFG_FLAGS="$FF_CFG_FLAGS --sysroot=PATH" # FF_CFG_FLAGS="$FF_CFG_FLAGS --sysinclude=PATH" FF_CFG_FLAGS="$FF_CFG_FLAGS --target-os=$FF_TARGET_OS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --target-exec=CMD" # FF_CFG_FLAGS="$FF_CFG_FLAGS --target-path=DIR" # FF_CFG_FLAGS="$FF_CFG_FLAGS --toolchain=NAME" # FF_CFG_FLAGS="$FF_CFG_FLAGS --nm=NM" # FF_CFG_FLAGS="$FF_CFG_FLAGS --ar=AR" # FF_CFG_FLAGS="$FF_CFG_FLAGS --as=AS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --yasmexe=EXE" # FF_CFG_FLAGS="$FF_CFG_FLAGS --cc=CC" # FF_CFG_FLAGS="$FF_CFG_FLAGS --cxx=CXX" # FF_CFG_FLAGS="$FF_CFG_FLAGS --dep-cc=DEPCC" # FF_CFG_FLAGS="$FF_CFG_FLAGS --ld=LD" # FF_CFG_FLAGS="$FF_CFG_FLAGS --host-cc=HOSTCC" # FF_CFG_FLAGS="$FF_CFG_FLAGS --host-cflags=HCFLAGS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --host-cppflags=HCPPFLAGS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --host-ld=HOSTLD" # FF_CFG_FLAGS="$FF_CFG_FLAGS --host-ldflags=HLDFLAGS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --host-libs=HLIBS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --host-os=OS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --extra-cflags=ECFLAGS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --extra-cxxflags=ECFLAGS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --extra-ldflags=ELDFLAGS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --extra-libs=ELIBS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --extra-version=STRING" # FF_CFG_FLAGS="$FF_CFG_FLAGS --optflags=OPTFLAGS" # FF_CFG_FLAGS="$FF_CFG_FLAGS --build-suffix=SUFFIX" # FF_CFG_FLAGS="$FF_CFG_FLAGS --malloc-prefix=PREFIX" # FF_CFG_FLAGS="$FF_CFG_FLAGS --progs-suffix=SUFFIX" # FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=ARCH" # FF_CFG_FLAGS="$FF_CFG_FLAGS --cpu=CPU" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-pic" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-sram" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-thumb" FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-symver" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-hardcoded-tables" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-safe-bitstream-reader" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-memalign-hack" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-lto" #Optimization options(experts only) FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-asm" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-altivec" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-amd3dnow" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-amd3dnowext" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-mmx" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-mmxext" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-sse" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-sse2" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-sse3" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-ssse3" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-sse4" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-sse42" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-avx" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-fma4" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-armv5te" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-armv6" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-armv6t2" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-vfp" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-neon" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-vis" FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-inline-asm" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-yasm" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-mips32r2" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-mipsdspr1" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-mipsdspr2" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-mipsfpu" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-fast-unaligned" # Developer options (useful when working on FFmpeg itself): # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-coverage" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-debug" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-debug=LEVEL" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-optimizations" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-extra-warnings" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-stripping" # FF_CFG_FLAGS="$FF_CFG_FLAGS --assert-level=level" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-memory-poisoning" # FF_CFG_FLAGS="$FF_CFG_FLAGS --valgrind=VALGRIND" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-ftrapv" # FF_CFG_FLAGS="$FF_CFG_FLAGS --samples=PATH" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-xmm-clobber-test" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-random" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-random" # FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-random=LIST" # FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-random=LIST" # FF_CFG_FLAGS="$FF_CFG_FLAGS --random-seed=VALUE"
五、编译ffmpeg:
FF_MAKEFLAGS= if which nproc >/dev/null then FF_MAKEFLAGS=-j`nproc` elif [ "$UNAMES" == "Darwin" ] && which sysctl >/dev/null then FF_MAKEFLAGS=-j`sysctl -n machdep.cpu.thread_count` fi if [ -f "./config.h" ]; then echo "\n resume configure \n" else ./configure $FF_CFG_FLAGS --extra-cflags="$FF_CFLAGS $FF_EXTRA_CFLAGS" --extra-ldflags="$FF_EXTRA_LDFLAGS" make clean fi cp config.* $FF_PREFIX make $FF_MAKEFLAGS make install
六、如果一切正常,我们可以得到libavcodec.so,libavformat.so等开头的目录,我们需要将这些.o文件链接成一个.so动态库:
rm libavcodec/log2_tab.o rm libavutil/log2_tab.o rm libswresample/log2_tab.o $CC -lm -lz -shared --sysroot=$FF_SYSROOT -Wl,--no-undefined -Wl,-z,noexecstack $FF_EXTRA_LDFLAGS compat/*.o libavutil/*.o libavutil/arm/*.o libavcodec/*.o libavcodec/arm/*.o libavformat/*.o libswresample/*.o libswresample/arm/*.o libswscale/*.o -o $FF_PREFIX/libffmpeg.so
七、构建完成之后我们可以strip一下动态库,去掉一些无用的信息,这样可以降低动态链接库的体积:
arm-linux-androideabi-strip --strip-unneeded libffmpeg.so
注:本文参考https://vec.io/posts/how-to-build-ffmpeg-with-android-ndk编写。