[原]如何用Android NDK编译FFmpeg

来源:互联网 发布:信信通是正规软件吗 编辑:程序博客网 时间:2024/06/05 15:03
[原]如何用Android NDK编译FFmpeg
2014-08-26 21:43 by 雪夜&流星, 3778 阅读, 8 评论, 收藏, 编辑

我们知道在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 filtersStandard 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 pathLicensing 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 buildDocumentation 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 pagesComponent 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 codeHardware 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 filtersExternal 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 optimizationAdvanced 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 slowDeveloper 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-randomNOTE: Object files are built at the place where configure is launched.
复制代码

   这些选项,这些选项是需要我们设置,有些选项可以是FFmpeg优化选项,可以针对CPU进行优化,也有一些选项可以不用编译进去,这样就可以减少编译出来的FFmpeg动态链接库的体积。

三、设置NDK:

    

复制代码
export ANDROID_NDK=/path/to/your/android/ndk/rootexport FF_BUILD_ROOT=`pwd`export FF_BUILD_NAME=ffmpegexport FF_ANDROID_PLATFORM=android-14export FF_TOOLCHAIN_PATH=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/toolchainexport FF_SYSROOT=$FF_TOOLCHAIN_PATH/sysrootexport 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/outputFF_CROSS_PREFIX=arm-linux-androideabiPATH=$FF_TOOLCHAIN_PATH/bin:$PATHCC="ccache ${FF_CROSS_PREFIX}-gcc"LD=${FF_CROSS_PREFIX}-ldAR=${FF_CROSS_PREFIX}-arSTRIP=${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 libsFF_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 speedFF_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 swscaleFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-swsacle-alpha"#Program options:#do not build command line programsFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-programs"#disable ffmpeg buildFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-ffmpeg"#disable ffplay buildFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-ffplay"#disable ffprobe buildFF_CFG_FLAGS="$FF_CFG_FLAGS --diable-ffprobe"#disable ffserver buildFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-ffserver"#Documentation options:#do not build documentationFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-doc"#do not build HTML documentation pagesFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-htmlpages"#do not build man documentation pagesFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-manmpages"#do not build POD documentation pagesFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-podpages"#do not build text documentation pagesFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-txtpages"#Componet options:disable libpostproc build#disable libavdevice buildFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-avdevice"#disable libavcodec buildFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-avcodec"#disable libavformat buildFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-avformat"#disable libavutil buildFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-avutil"#disable libswresample buildFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-swresample"#disable libswscale buildFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-swscale"#disable libpostproc buildFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-postproc"#disable libavfilter buildFF_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 codeFF_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 encodersFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-encoders"#disable all decodersFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-decoders"#disable decoder aacFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=aac"#disable decoder aac_latmFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=aac_latm"#disable decoder ac3FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=ac3"#disable decoder apeFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=ape"#disable decoder flacFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=flac"#disable decoder flvFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=flv"#disable decoder h261FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h261"#disable decoder h263FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h263"#disable decoder h263iFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h263i"#disable decoder h263pFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h263p"#disable decoder h264FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=h264"#disable decoder mp3FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=mp3"#disable decoder mp3floatFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=mp3float"#disable decoder mp3on4FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=mp3on4"#disable decoder mp3on4floatFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=mp3on4float"#disable decoder mpeg4FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=mpeg4"#disable decoder msmpeg4v1FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=msmpeg4v1"#disable decoder msmpeg4v2FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=msmpeg4v2"#disable decoder msmpeg4v3FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=msmpeg4v3"#disable decoder pcm_*FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=pcm_*"#disable decoder ra_144FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=ra_144"#disable decoder ra_288FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=ra_288"#disable decoder ralfFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=ralf"#disable decoder rv10FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=rv10"#disable decoder rv20FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=rv20"#disable decoder rv30FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=rv30"#disable decoder rv40FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=rv40"#disable decoder theoraFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=theora"#disable decoder vc1FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vc1"#disable decoder vorbisFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vorbis"#disable decoder vp3FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp3"#disable decoder vp5FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp5"#disable decoder vp6FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp6"#disable decoder vp6aFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp6a"#disable decoder vp6fFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp6f"#disable decoder vp8FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=vp8"#disable decoder webpFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=webp"#disable decoder wmalosslessFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmalossless"#disable decoder wmaproFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmapro"#disable decoder wmav1FF_CFG_FLAGS="$FF_CFG_FLAGS --eanble-decoder=wmav1"#disable decoder wmav2FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmav2"#disable decoder wmv1FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmv1"#disable decoder wmv2FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmv2"#disable decoder wmv3FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-decoder=wmv3"#disable all hwaccelsFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-hwaccels"#disable all muxersFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-muxers"#disable all muxer mpegtsFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-muxer=mpegts"#disable all demuxersFF_CFG_FLAGS="$FF_CFG_FLAGS --diable-demuxers"#disable demuxer aacFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=aac"#disable demuxer ac3FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=ac3"#disable demuxer apeFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=ape"#disable demuxer asfFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=asf"#disable demuxer concatFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=concat"#disable demuxer dataFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=data"#disable demuxer flacFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=flac"#disable demuxer flvFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=flv"#disable demuxer h261FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=h261"#disable demuxer h263FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=h263"#disable demuxer h264FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=h264"#disable demuxer hlsFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=hls"#disable demuxer latmFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=latm"#disable demuxer loasFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=loas"#disable demuxer m4vFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=m4v"#disable demuxer matroskaFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=matroska"#disable demuxer movFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mov"#disable demuxer mp3FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mp3"#disable demuxer mpegpsFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mpegps"#disable demuxer mpegtsFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mpegts"#disable demuxer mpegtsrawFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mpegtsraw"#disable demuxer mpegvideoFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=mpegvideo"#disable demuxer oggFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=ogg"#disable demuxer pcm_*FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=pcm_*"#disable demuxer rmFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=rm"#disable demuxer rtpFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=rtp"#disable demuxer rtspFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=rtsp"#disable demuxer swfFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=swf"#disable demuxer ttaFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=tta"#disable demuxer vc1FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=vc1"#disable demuxer vc1tFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=vc1t"#disable demuxer wavFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=wav"#disable demuxer xmvFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-demuxer=xmv"#disable demuxer xwmaFF_CFG_FLAGS="$FF_CFG_FLAGS --eanble-demuxer=xwma"#disable all parsersFF_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 adxFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=adx"#disable parser bmpFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=bmp"#disable parser cavsvideoFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=cavsvideo"#disable parser cookFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=cook"#disable parser dcaFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dca"#disable parser diracFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dirac"#disable parser dnxhdFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dnxhd"#disable parser dvbsubFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dvbsub"#disable parser dvd_navFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dvd_nav"#disable parser dvdsubFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=dvdsub"#disable parser flac#FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=flac"#disable parser gsmFF_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 mjpegFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=mjpeg"#disable parser mlpFF_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 pngFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=png"#disable parser pnmFF_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 vc1FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=vc1"#disable parser vorbisFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=vorbis"#disable parser vp3FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=vp3"#disable parser vp8FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-parser=vp8"#disable all bsfsFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-bsfs"#disable all protocolsFF_CFG_FLAGS="$FF_CFG_FLAGS --enable-protocols"#disable all devicesFF_CFG_FLAGS="$FF_CFG_FLAGS --disable-devices"#disable all filtersFF_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 fontconfigFF_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 filteringFF_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 libcacaFF_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 libcdioFF_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 codeFF_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/nullthen    FF_MAKEFLAGS=-j`nproc`elif [ "$UNAMES" == "Darwin" ] && which sysctl >/dev/nullthen    FF_MAKEFLAGS=-j`sysctl -n machdep.cpu.thread_count`fiif [ -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 cleanficp config.* $FF_PREFIXmake $FF_MAKEFLAGSmake install
复制代码

 

六、如果一切正常,我们可以得到libavcodec.so,libavformat.so等开头的目录,我们需要将这些.o文件链接成一个.so动态库:

复制代码
rm libavcodec/log2_tab.orm libavutil/log2_tab.orm 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编写。