iOS开发FFmpeg编译裁剪支持avi

写篇日记是因为在使用IJKPlayer做直播视频时遇到过avi视频以及一些MP4格式视频无法播放的问题,记录一下挖过的坑,希望也能帮助到遇到这些问题的小伙伴


1. 编译ijkplayer

项目中如果涉及到直播或者要求支持更多的视频格式播放时,原生已经无法满足你的需求了,这个时候使用github上最热门的ijkplayer就能极大减轻工作量,可以基本满足各种需求,当然唯一的不足就是不能缓存播放的视频。以下为开源项目地址:

https://github.com/Bilibili/ijkplayer.git

下载ijkplayer与ffmpeg

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
cd ijkplayer-ios
git checkout -B latest k0.8.4
./init-ios.sh

2. ffmpeg裁剪配置

事实上ijkplayer的github主页上已经列出三种配置文件给你选了

module-lite.sh  module-lite-hevc.sh  module-default.sh

默认配置为module-lite.sh,然而这个阉割版的配置文件有很多格式没法支持到。这个时候就想到用module-default.sh了,这个配置文件基本支持市面上所有的格式了,是不是很easy~ 然而编译出来的库真机模拟器合并后一看,尼玛500多M~ 此时的我是这样的。。

所以使用时一定要根据项目实际需要,对ffmpeg进行裁剪。但是与其在module-default上裁剪还不如在module-lite里根据产品的需要进行相应的扩展来的更简单。不啰嗦直接贴出我的配置,只在lite里稍微扩展了几行而已,应付rtmp直播以及h264 mp4 avi格式的视频播放是完全没问题的。

#! /usr/bin/env bash

#--------------------
# Standard options:
export COMMON_FF_CFG_FLAGS=
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --prefix=PREFIX"

# Licensing options:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-gpl"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-version3"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-nonfree"

# Configuration options:
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-static"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-shared"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-small"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-runtime-cpudetect"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-gray"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-swscale-alpha"

# Program options:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-programs"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffmpeg"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffplay"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffprobe"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffserver"

# Documentation options:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-doc"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-htmlpages"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-manpages"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-podpages"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-txtpages"

# Component options:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-avdevice"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-avcodec"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-avformat"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-avutil"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-swresample"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-swscale"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-postproc"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-avfilter"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-avresample"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-pthreads"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-w32threads"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-os2threads"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-network"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-dct"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-dwt"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-lsp"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-lzo"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-mdct"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-rdft"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-fft"

# Hardware accelerators:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-d3d11va"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-dxva2"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vaapi"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vda"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vdpau"

# Individual component options:
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-everything"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-encoders"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-encoder=png"

# ./configure --list-decoders
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-decoders"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=aac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=aac_latm"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=flv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=h264"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mp3*"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=vp6f"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=flac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=hevc"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mpeg4"

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-hwaccels"

# ./configure --list-muxers
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-muxers"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-muxer=mp4"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=avi"

# ./configure --list-demuxers
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-demuxers"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=aac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=concat"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=data"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=flv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=hls"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=live_flv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mov"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mp3"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mpegps"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mpegts"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=mpegvideo"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=flac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=hevc"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=avi"

# ./configure --list-parsers
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-parsers"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-parser=aac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-parser=aac_latm"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-parser=h264"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-parser=flac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-parser=hevc"

# ./configure --list-bsf
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-bsfs"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=chomp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=dca_core"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=dump_extradata"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=hevc_mp4toannexb"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=imx_dump_header"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=mjpeg2jpeg"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=mjpega_dump_header"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=mov2textsub"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=mp3_header_decompress"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=mpeg4_unpack_bframes"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=noise"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=remove_extradata"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=text2movsub"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=vp9_superframe"

# ./configure --list-protocols
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocols"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=async"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=bluray"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=concat"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=crypto"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=ffrtmpcrypt"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=ffrtmphttp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=gopher"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=icecast"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=librtmp*"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=libssh"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=md5"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=mmsh"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=mmst"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=rtmp*"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtmp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtmpt"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=rtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=sctp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=srtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=subfile"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-protocol=unix"

#
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-devices"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-filters"

# External library support:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-iconv"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-audiotoolbox"
#export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-videotoolbox"

事实上我们想要支持avi格式视频的播放只需要在复用(muxer)与解复用(demuxer)里加上对avi的支持就行了,没错两行配置就完满支持avi格式视频的播放啦~
小伙伴们可以根据自己的需求再对不需要的功能进行裁剪或者新增音视频格式的支持修改配置文件,例如想要支持rtsp就去protocols列表里加入支持咯。
笔者就遇到过用精简版配置编译的ffmpeg播放运营提供的mp4格式视频只有声音没有图像的窘境,因此猜想是视频流没法解码导致的,于是就需要用到这个神器MediaInfo去查看他们提供的视频的详细信息了。

可以很清楚的看到视频流是用的MPEG-4编码的,看了一下lite配置里是没有配mpeg4解码器的,在list-decoders里配上以下这行就解决啦~

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mpeg4"

同理遇到某些视频播放有问题都可以这样分析然后添加配置,这样一来合成的库也只有一百来M大小了,当然大家如果想更精简也可以进一步瘦身的。

3. 编译ffmpeg

最后按照以下步骤编译就OK了,关于ijkplayer的打包网上很多文章就不赘述了。

cd config
rm module.sh
ln -s module-lite.sh module.sh
cd ios
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

最后附上ffmpeg编译参数详解

Usage: configure [options]
用 法:configure [选项]
Options: [defaults in brackets after descriptions]
选   项:[描述之后的方括号里的是默认值]

Standard options:
标准选项:
  --help                   print this message
                           打印这个信息,例如:./configure --help > ffmpegcfg.txt
  --logfile=FILE           log tests and output to FILE [config.log]
                           记录测试日志并输出到的文件[默认:config.log]
  --disable-logging        do not log configure debug information
                           不记录调试日志信息
  --prefix=PREFIX          install in PREFIX []
                           安装程序到指定目录[默认:空]
  --bindir=DIR             install binaries in DIR [PREFIX/bin]
                           安装程序到指定目录[默认:/bin]
  --datadir=DIR            install data files in DIR [PREFIX/share/ffmpeg]
                           安装数据文件到指定目录[默认:/share/ffmpeg]
  --libdir=DIR             install libs in DIR [PREFIX/lib]
                           安装静态库到指定目录[默认:/lib]
  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]
                           安装共享库到指定目录[默认:/lib]
  --incdir=DIR             install includes in DIR [PREFIX/include]
                           安装头文件到指定目录[默认:/include]
  --mandir=DIR             install man page in DIR [PREFIX/share/man]
                           安装man page到指定路径[默认:/share/man]
Configuration options:
配置选项:
  --disable-static         do not build static libraries [no]
                           不构建静态库[默认:关闭]                 
  --enable-shared          build shared libraries [no]
                           构建共享库[默认:关闭]
  --enable-gpl             allow use of GPL code, the resulting libs
                           and binaries will be under GPL [no]
                           允许使用 GPL 代码,
                           产生的库和程序将隶属于 GPL[默认:关闭]
  --enable-version3        upgrade (L)GPL to version 3 [no]
                           升级GPL到版本3[默认:关闭]
  --enable-nonfree         allow use of nonfree code, the resulting libs
                           and binaries will be unredistributable [no]
                           允许使用非免费的代码,
                           产生的库和二进制程序将是不可再发行的[默认:关闭]
  --disable-doc            do not build documentation
                           不构造文档
  --disable-ffmpeg         disable ffmpeg build
                           禁止 ffmpeg 构造
  --disable-ffplay         disable ffplay build
                           禁止 ffplay 构造
  --disable-ffprobe        disable ffprobe build
                           禁止 ffprobe 构造
  --disable-ffserver       disable ffserver build
                           禁止 ffserver 构造
  --disable-avdevice       disable libavdevice build
                           禁止 libavdevice 构造
  --disable-avcodec        disable libavcodec build
                           禁止 libavcodec 构造
  --disable-avcore         disable libavcore build
                           禁止 libavcore 构造
  --disable-avformat       disable libavformat build
                           禁止 libavformat 构造
  --disable-swscale        disable libswscale build
                           禁止 libswscale 构造
  --enable-postproc        enable GPLed postprocessing support [no]
                           启用 GPLed 后加工支持[默认:关闭]
  --disable-avfilter       disable video filter support [no]
                           禁止视频过滤器支持[默认:关闭]
  --disable-pthreads       disable pthreads [auto]
                           禁用 pthreads [默认:自动]
  --enable-w32threads      use Win32 threads [no]
                           使用 Win32 线程[默认:关闭]
  --enable-x11grab         enable X11 grabbing [no]
                           启用 X11 攫取[默认:关闭]
  --disable-network        disable network support [no]
                           禁用网络支持[默认:不禁用]
  --disable-mpegaudio-hp   faster (but less accurate) MPEG audio decoding [no]
                           快速的 MPEG 音频解码方式(但精度低)[默认:禁用]
  --enable-gray            enable full grayscale support (slower color)
                           启用全部灰度的支持(感光性较低的颜色)
  --disable-swscale-alpha  disable alpha channel support in swscale
                           在软缩放时 禁止 阿尔法 通道支持
  --disable-fastdiv        disable table-based division
                           禁止以表格为主划分
  --enable-small           optimize for size instead of speed
                           启用大小优化,牺牲速度
  --disable-aandct         disable AAN DCT code
                           禁止 AAN DCT 码
  --disable-dct            disable DCT code
                           禁止 DCT 码
  --disable-fft            disable FFT code
                           禁止 FFT 码
  --disable-golomb         disable Golomb code
                           禁止 Golomb 码
  --disable-huffman        disable Huffman code
                           禁止 Huffman 码
  --disable-lpc            disable LPC code
                           禁止 LPC 码
  --disable-mdct           disable MDCT code
                           禁止 MDCT 码
  --disable-rdft           disable RDFT code
                           禁止 RDFT 码
  --disable-vaapi          disable VAAPI code
                           禁止 VAAPI 码
  --disable-vdpau          disable VDPAU code
                           禁止 VDPAU 码
  --disable-dxva2          disable DXVA2 code
                           禁止 DXVA2 码
  --enable-runtime-cpudetect detect cpu capabilities at runtime (bigger binary)
                             启用在运行时侦测 CPU 性能(更大的二进制程序)
  --enable-hardcoded-tables use hardcoded tables instead of runtime generation
                            启用硬编码表而不是运行时产生
  --enable-memalign-hack   emulate memalign, interferes with memory debuggers
                           模拟memalign,内存调试器干扰
  --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
                           禁用全部协议
  --disable-indev=NAME     disable input device NAME
                           禁用指定的输入设备
  --disable-outdev=NAME    disable output device NAME
                           禁用指定的输出设备
  --disable-indevs         disable input devices
                           禁用输入设备
  --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
                           禁用全部的过滤器
  --list-decoders          show all available decoders
                           显示全部可用的解码器
  --list-encoders          show all available encoders
                           显示全部可用的编码器
  --list-hwaccels          show all available hardware accelerators
                           显示全部可用的硬件加速器
  --list-muxers            show all available muxers
                           显示全部可用的混合器
  --list-demuxers          show all available demuxers
                           显示全部可用的解混器
  --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
                           显示全部可用的过滤器
External library support:
外部库支持:
  --enable-avisynth        enable reading of AVISynth script files [no]
                           启用读取 AVISynth 脚本文件[默认:关闭]                        
  --enable-bzlib           enable bzlib [autodetect]
                           启用 bzlib[默认:自动侦测]                     
  --enable-frei0r          enable frei0r video filtering
                           启用 frei0r 视频筛选                           
  --enable-libopencore-amrnb enable AMR-NB de/encoding via libopencore-amrnb [no]
                             启用 AMR-NB 编解码通过 libopencore-amrnb[默认:关闭]
                             1. AMR: Adaptive Multi-Rate 相对相对WB而言又称 AMR-NB,
                                     自适应多速率编码,主要用于移动设备的音频,
                                     压缩比比较大,但相对其他的压缩格式质量比较差,
                                     由于多用于人声,通话,效果还是很不错的。
                                     语音带宽范围:300-3400Hz,8KHz抽样;
                             2. AMR-WB: AMR WideBand,
                                        是一种同时被国际标准化组织ITU-T和3GPP采用的宽带
                                        语音编码标准,也称为G722.2标准。
                                        语音带宽范围: 50-7000Hz,16KHz抽样                 
  --enable-libopencore-amrwb enable AMR-WB decoding via libopencore-amrwb [no]
                             启用 AMR-WB 编解码通过 libopencore-amrwb[默认:关闭]
  --enable-libopencv       enable video filtering via libopencv [no]
                           通过 libopencv启用视频筛选 [默认:关闭]
  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394
                           and libraw1394 [no]
                           启用 libdc1394、libraw1394 抓取 IIDC-1394[默认:关闭]                  
  --enable-libdirac        enable Dirac support via libdirac [no]
  --enable-libfaac         enable FAAC support via libfaac [no]
                           通过 libfaac 启用 FAAC 支持[默认:关闭]                    
  --enable-libgsm          enable GSM support via libgsm [no]
                           通过 libgsm 启用 GSM 支持[默认:关闭]                       
  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]
                           通过 libmp3lame 启用 MP3 编码[默认:关闭]
  --enable-libnut          enable NUT (de)muxing via libnut,
                           native (de)muxer exists [no]
                           启用 NUT (解)混合通过 libnut,
                           本地的 (解)混合器存在[默认:关闭]
                           注:NUT是一种容器格式。                
  --enable-libopenjpeg     enable JPEG 2000 decoding via OpenJPEG [no]
                           通过 OpenJPEG启用 JPEG2000 解码 [默认:关闭]                   
  --enable-librtmp         enable RTMP[E] support via librtmp [no]
                           通过 librtmp 启用 RTMP[E]支持 [默认:关闭]
    --enable-libschroedinger enable Dirac support via libschroedinger [no]
                           通过 libschroedinger启用 Dirac 支持 [默认:关闭]
  --enable-libspeex        enable Speex decoding via libspeex [no]
                           通过 libspeex启用 Speex 解码[默认:关闭]
  --enable-libtheora       enable Theora encoding via libtheora [no]
                           通过 libtheora启用 Theora 编码[默认:关闭]
  --enable-libvorbis       enable Vorbis encoding via libvorbis,
                           native implementation exists [no]
                           通过 libvorbis 启用 Vorbis 编码方式,本地装置存在[默认:关闭]
  --enable-libvpx          enable VP8 support via libvpx [no]
  --enable-libx264         enable H.264 encoding via x264 [no]
                           通过 x264 启用 H.264 编码方式[默认:关闭]        
  --enable-libxavs         enable AVS encoding via xavs [no]
  --enable-libxvid         enable Xvid encoding via xvidcore,
                           native MPEG-4/Xvid encoder exists [no]
                           通过 xvidcore 启用 Xvid 编码方式,
                           本地 MPEG-4/Xvid 编码器存在[默认:关闭]         
  --enable-mlib            enable Sun medialib [no]
                           启用 Sun medialib [默认:关闭]         
  --enable-zlib            enable zlib [autodetect]
                           启用 zlib [默认:自动侦测]
Advanced options (experts only):
  --source-path=PATH       path to source code [/home/nsc/workspace/android_code/ffmpeg]
                           源码的路径[默认:/home/nsc/workspace/android_code/ffmpeg]                 
  --cross-prefix=PREFIX    use PREFIX for compilation tools []
                           为编译工具指定路径          
  --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
                           在目标系统上创建计划目录的路径
  --nm=NM                  use nm tool
                           使用指定的 nm 工具。注:列出目标文件的符号清单。
  --ar=AR                  use archive tool AR [ar]
                           使用指定的归档成静态库工具[默认:ar]
                           注:可以用来创建、修改库,也可以从库中提出单个模块。
  --as=AS                  use assembler AS []
                           使用指定的汇编程序[默认:]
  --cc=CC                  use C compiler CC [gcc]
                           指定使用哪种C编译器[默认:gcc]                      
  --ld=LD                  use linker LD
                           使用指定的链接器
  --host-cc=HOSTCC         use host C compiler HOSTCC
                           使用主机C编译器HOSTCC
  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host
                           宿主编译时,使用HCFLAGS
  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host
                           宿主连接时,使用HLDFLAGS
  --host-libs=HLIBS        use libs HLIBS when linking for host
                           宿主连接时,使用HLIBS库
  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS []
                           添加 ECFLAGS 到 CFLAGS[默认:空]                     
  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS []
                           添加 ELDFLAGS 到 LDFLAGS [默认:空]                     
  --extra-libs=ELIBS       add ELIBS []
                           添加 ELIBS [默认:空]                       
  --extra-version=STRING   version string suffix []
  --build-suffix=SUFFIX    library name suffix []
                           库名后缀[默认:空]               
  --arch=ARCH              select architecture []
                           选择微处理器体系结构[默认:空]       
  --cpu=CPU                select the minimum required CPU 
                           (affects instruction selection, 
                            may crash on older CPUs)
                           选用要求的最低CPU(影响指令选择,可能在过时的CPU上崩溃)      
  --disable-asm            disable all assembler optimizations
                           禁用全部汇编程序优化
  --disable-altivec        disable AltiVec optimizations
                           禁用 AltiVec 优化              
  --disable-amd3dnow       disable 3DNow! optimizations
                           禁用 3DNow! 优化
  --disable-amd3dnowext    disable 3DNow! extended optimizations
                           禁用 3DNow! 扩展优化
  --disable-mmx            disable MMX optimizations
                           禁用 MMX 优化                          
  --disable-mmx2           disable MMX2 optimizations
                           禁用 MMX2 优化                     
  --disable-sse            disable SSE optimizations
                           禁用 SSE 优化                         
  --disable-ssse3          disable SSSE3 optimizations
                           禁用 SSSE3 优化                           
  --disable-armv5te        disable armv5te optimizations
                           禁用 armv5te 优化                       
  --disable-armv6          disable armv6 optimizations
                           禁用 armv6 优化                           
  --disable-armv6t2        disable armv6t2 optimizations
                           禁用 armv6t2 优化                           
  --disable-armvfp         disable ARM VFP optimizations
                           禁用 ARM VFP 优化                           
  --disable-iwmmxt         disable iwmmxt optimizations
                           禁用 iwmmxt 优化                           
  --disable-mmi            disable MMI optimizations
                           禁用 MMI 优化                       
  --disable-neon           disable neon optimizations
                           禁用 neon 优化                           
  --disable-vis            disable VIS optimizations
                           禁用 VIS 优化                           
  --disable-yasm           disable use of yasm assembler
                           禁用 yasm 汇编器                          
  --enable-pic             build position-independent code
                           创造不依赖(于)位置的代码
  --malloc-prefix=PFX      prefix malloc and related names with PFX
                           在 malloc 和 相关名称 前加指定前缀
  --enable-sram            allow use of on-chip SRAM
                           允许使用片内静态随机存储器
  --disable-symver         disable symbol versioning
                           禁用符号版本控制
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
                           禁止可执行程序剥脱共享库  
  --samples=PATH           location of test samples for FATE
                           指定测试示例的位置

你可能感兴趣的:(iOS开发FFmpeg编译裁剪支持avi)