ffmpeg configure配置选项

    • 帮助选项Help options
    • 标准选项Standard options
    • 许可证选项Licensing options
    • 配置选项Configuration options
    • 程序选项Program options
    • 文档选项Documentation options
    • 组件选项Component options
    • 个别组件选项Individual component options
    • 扩展库支持External library support
      • 硬件加速功能hardware acceleration features
    • 工具链选项Toolchain options
    • 高级选项Advanced options
    • 优化选项Optimization options
    • 开发者选项Developer options

帮助选项(Help options)

用于查看ffmpeg的能力

选项 说明
–help print this message
–list-decoders 显示所有可用的解码器(h264/mjpeg等)
–list-encoders 显示所有可用的编码器(h264/mjpeg等)
–list-hwaccels 显示所有支持的硬编解码器(h264_videotoolbox/h264_mediacodec等)
–list-demuxers 显示所有支持解复用的容器(mp4/h264等)
–list-muxers 显示所有支持复用的容器(mp4/h264等)
–list-parsers show all available parsers
–list-protocols 显示所有支持的传输协议(rtmp/rtp等)
–list-bsfs 显示所有可用的格式转换(h264_mp4toannexb/aac_adtstoasc等)
–list-indevs 显示所有支持的输入设备(alsa/v4l2等)
–list-outdevs 显示所有支持的输出设备(alsa/opengl等)
–list-filters 显示支持的所有过滤器(scale/volume/fps/allyuv等)

标准选项(Standard options)

编译配置

选项 说明
–logfile=FILE 配置过程中的log输出文件,默认输出到当前位置的ffbuild/config.log文件
–disable-logging 配置过程中不输出日志
–fatal-warnings 把配置过程中的任何警告当做致命的错误处理
–prefix=PREFIX 设定安装的跟目录,如果不指定默认是/usr
–bindir=DIR 设置可执行程序的安装位置,默认是[PREFIX/bin]
–datadir=DIR 设置测试程序以及数据的安装位置,默认是[PREFIX/share/ffmpeg]
–docdir=DIR 设置文档的安装目录,默认是[PREFIX/share/doc/ffmpeg]
–libdir=DIR 设置静态库的安装位置,默认是[PREFIX/lib]
–shlibdir=DIR 设置动态库的安装位置,默认是[LIBDIR]
–incdir=DIR 设置头文件的安装位置,默认是[PREFIX/include];一般来说用于依赖此头文件来开发就够了
–mandir=DIR 设置man文件的安装目录,默认是[PREFIX/share/man]
–pkgconfigdir=DIR 设置pkgconfig的安装目录,默认是[LIBDIR/pkgconfig],只有--enable-shared使能的时候这个选项才有效
–enable-rpath use rpath to allow installing libraries in paths not part of the dynamic linker search path use rpath when linking programs [USE WITH CARE]
–install-name-dir=DIR Darwin directory name for installed targets

许可证选项(Licensing options)

选择许可证,FFMPEG默认许可证LGPL 2.1,如果需要加gpl的库需要使用gpl的许可证,例如libx264就是gpl的,如果需要加入libx264则需要--enable-gpl

选项 说明
–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 不生产静态库,默认生成静态库
–enable-shared 生成动态库,默认不生成动态库
–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 禁止编译所有库和可执行程序
–enable-raise-major 增加主版本号

程序选项(Program options)

可执行程序开启选项,默认编译ffmpeg中的所有可执行程序,包括ffmpeg、ffplay、ffprobe、ffserver,不过Mac平台默认情况下不生成ffplay,目前暂未知道啥原因。

选项 说明
–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)

除了avresample模块,默认编译所有模块。一般来说用于轻量化ffmpeg库的大小,可以仅仅开启指定某些组件的某些功能。

选项 说明
–disable-avdevice disable libavdevice build
–disable-avcodec disable libavcodec build
–disable-avformat disable libavformat 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 [autodetect]
–disable-w32threads disable Win32 threads [autodetect]
–disable-os2threads disable OS/2 threads [autodetect]
–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
–disable-faan disable floating point AAN (I)DCT code
–disable-pixelutils disable pixel utils in libavutil

个别组件选项(Individual component options)

可以用于设定开启指定功能,例如禁止所有encoders,在这里可以开启特定的encoders(x264、aac等)

选项 说明
–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)

ffmpeg提供的一些功能是由其他扩展库支持的,如果需要使用需要明确声明,确定编译的第三方库的目标架构--arch相同就好了,在编译ffmpeg的时候需加入第三方库的头文和库搜索路径(通过extra-cflagsextra-ldflags指定即可),剩下的事ffmpeg都给你做好了。

  • libx264例子
    ffmpeg集成libx264官方文档
$ git clone http://source.ffmpeg.org/git/ffmpeg.git
$ cd x264
$ ./configure --prefix=$FFMPEG_PREFIX --enable-static --enable-shared
$ make -j8 && make install
选项 说明
–enable-avisynth enable reading of AviSynth script files [no]
–disable-bzlib disable bzlib [autodetect]
–enable-chromaprint enable audio fingerprinting with chromaprint [no]
–enable-frei0r enable frei0r video filtering [no]
–enable-gcrypt enable gcrypt, needed for rtmp(t)e support if openssl, librtmp or gmp is not used [no]
–enable-gmp enable gmp, needed for rtmp(t)e support if openssl or librtmp is not used [no]
–enable-gnutls enable gnutls, needed for https support if openssl is not used [no]
–disable-iconv disable iconv [autodetect]
–enable-jni enable JNI support [no]
–enable-ladspa enable LADSPA audio filtering [no]
–enable-libass enable libass subtitles rendering, needed for subtitles and ass filter [no]
–enable-libbluray enable BluRay reading using libbluray [no]
–enable-libbs2b enable bs2b DSP library [no]
–enable-libcaca enable textual display using libcaca [no]
–enable-libcelt enable CELT decoding via libcelt [no]
–enable-libcdio enable audio CD grabbing with libcdio [no]
–enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 and libraw1394 [no]
–enable-libebur128 enable libebur128 for EBU R128 measurement, needed for loudnorm filter [no]
–enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no]
–enable-libflite enable flite (voice synthesis) support via libflite [no]
–enable-libfontconfig enable libfontconfig, useful for drawtext filter [no]
–enable-libfreetype enable libfreetype, needed for drawtext filter [no]
–enable-libfribidi enable libfribidi, improves drawtext filter [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-libkvazaar enable HEVC encoding via libkvazaar [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-libopenh264 enable H.264 encoding via OpenH264 [no]
–enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no]
–enable-libopenmpt enable decoding tracked files via libopenmpt [no]
–enable-libopus enable Opus de/encoding via libopus [no]
–enable-libpulse enable Pulseaudio input via libpulse [no]
–enable-librubberband enable rubberband needed for rubberband filter [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-libsnappy enable Snappy compression, needed for hap encoding [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-libtesseract enable Tesseract, needed for ocr filter [no]
–enable-libtheora enable Theora encoding via libtheora [no]
–enable-libtwolame enable MP2 encoding via libtwolame [no]
–enable-libv4l2 enable libv4l2/v4l-utils [no]
–enable-libvidstab enable video stabilization using vid.stab [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-libxcb enable X11 grabbing using XCB [autodetect]
–enable-libxcb-shm enable X11 grabbing shm communication [autodetect]
–enable-libxcb-xfixes enable X11 grabbing mouse rendering [autodetect]
–enable-libxcb-shape enable X11 grabbing shape rendering [autodetect]
–enable-libxvid enable Xvid encoding via xvidcore, native MPEG-4/Xvid encoder exists [no]
–enable-libzimg enable z.lib, needed for zscale filter [no]
–enable-libzmq enable message passing via libzmq [no]
–enable-libzvbi enable teletext support via libzvbi [no]
–disable-lzma disable lzma [autodetect]
–enable-decklink enable Blackmagic DeckLink I/O support [no]
–enable-mediacodec enable Android MediaCodec support [no]
–enable-netcdf enable NetCDF, needed for sofalizer filter [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, needed for https support if gnutls is not used [no]
–disable-schannel disable SChannel SSP, needed for TLS support on Windows if openssl and gnutls are not used [autodetect]
–disable-sdl2 disable sdl2 [autodetect]
–disable-securetransport disable Secure Transport, needed for TLS support on OSX if openssl and gnutls are not used [autodetect]
–enable-x11grab enable X11 grabbing (legacy) [no]
–disable-xlib disable xlib [autodetect]
–disable-zlib disable zlib [autodetect]

硬件加速功能(hardware acceleration features)

ffmpeg默认实现了移动端(Android和IOS)的硬编解码,可以选择disable的都是默认开启的,可以关闭,可以选择enable的都是需要自己解决依赖的。

选项 说明
–disable-audiotoolbox disable Apple AudioToolbox code [autodetect]
–enable-cuda enable dynamically linked Nvidia CUDA code [no]
–enable-cuvid enable Nvidia CUVID support [autodetect]
–disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect]
–disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect]
–enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no]
–enable-libnpp enable Nvidia Performance Primitives-based code [no]
–enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no]
–disable-nvenc disable Nvidia video encoding code [autodetect]
–enable-omx enable OpenMAX IL code [no]
–enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
–disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
–disable-vda disable Apple Video Decode Acceleration code [autodetect]
–disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
–disable-videotoolbox disable VideoToolbox code [autodetect]

工具链选项(Toolchain options)

ffmpeg代码本身是支持跨平台的,要编译不同的平台需要配置不同平台的交叉编译工具链。ffmpeg都是c代码,所以不需要配置c++的sysroot。常用的就几个arch,cpu,cross-prefix,enable-cross-compile,sysroot,target-os,extra-cflags,extra-ldflags,enable-pic。现在Android和IOS几乎没有armv5的设备了,所以如果编译这两个平台配置armv7和armv8就好了。

选项 说明
–arch=ARCH 选择目标架构[armv7a/aarch64/x86/x86_64等]
–cpu=CPU 选择目标cpu[armv7-a/armv8-a/x86/x86_64]
–cross-prefix=PREFIX 设定交叉编译工具链的前缀,不算gcc/nm/as命令,例如android 32位的交叉编译链$ndk_dir/toolchains/arm-linux-androideabi-$toolchain_version/prebuilt/linux-$host_arch/bin/arm-linux-androideabi-
–progs-suffix=SUFFIX program name suffix []
–enable-cross-compile 如果目标平台和编译平台不同则需要使能它
–sysroot=PATH 交叉工具链的头文件和库位,例如Android 32位位置$ndk_dir/platforms/android-14/arch-arm
–sysinclude=PATH location of cross-build system headers
–target-os=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 []
–ln_s=LN_S use symbolic link tool LN_S [ln -s -f]
–strip=STRIP use strip tool STRIP [strip]
–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++]
–objcc=OCC use ObjC compiler OCC [gcc]
–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 设置cflags,如果是Android平台可以根据ndk内的设定,arm-linux-androideabi-4.6/setup.mk,建议参考你当前的setup来配置
–extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS []
–extra-objcflags=FLAGS add FLAGS to OBJCFLAGS []
–extra-ldflags=ELDFLAGS 参考cflags
–extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS []
–extra-ldlibflags=ELDFLAGS add ELDFLAGS to LDLIBFLAGS []
–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
–env=”ENV=override” override the environment variables

高级选项(Advanced options)

选项 说明
–malloc-prefix=PREFIX prefix malloc and related names with PREFIX
–custom-allocator=NAME use a supported custom allocator
–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
–sws-max-filter-size=N the max filter size swscale uses [256]

优化选项(Optimization options)

默认开启各个平台的汇编优化,有些嵌入式平台可能并不能完整的支持架构的所有汇编指令,所以需要关闭。(自己理解的,没有实战)

选项 说明
–disable-asm disable all assembly optimizations
–disable-altivec disable AltiVec optimizations
–disable-vsx disable VSX optimizations
–disable-power8 disable POWER8 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-aesni disable AESNI 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-mipsdsp disable MIPS DSP ASE R1 optimizations
–disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations
–disable-msa disable MSA optimizations
–disable-mipsfpu disable floating point MIPS optimizations
–disable-mmi disable Loongson SIMD optimizations
–disable-fast-unaligned consider unaligned accesses slow

开发者选项(Developer options)

调试用的一些开关

选项 说明
–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
–random-seed=VALUE seed value for –enable/disable-random
–disable-valgrind-backtrace do not print a backtrace under Valgrind (only applies to –disable-optimizations builds)

你可能感兴趣的:(媒体)