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
                           指定測試示例的位置
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容

  • 前言 隨著音視頻領域的火熱,在很多領域(教育,游戲,娛樂,體育,跑步,餐飲,音樂等)嘗試做音視頻直播/點播功能,那...
    passiontim閱讀 3,307評論 1 46
  • 前言 如此強大的FFmpeg,能夠實現視頻采集、視頻格式轉化、視頻截圖、視頻添加水印、視頻切片、視頻錄制、視頻推流...
    sillen閱讀 5,395評論 2 45
  • 前言 如此強大的FFmpeg,能夠實現視頻采集、視頻格式轉化、視頻截圖、視頻添加水印、視頻切片、視頻錄制、視頻推流...
    騷之哈塞給閱讀 25,791評論 6 39
  • 陪你喝醉的人注定不能送你回家 而我現在的男朋友 他總能送我回家 也沒有特別愛喝酒 和我能不喝就不喝的男盆友相對來說...
    愛你的佐呀閱讀 118評論 0 0
  • 今天中午因為領導沒空,臨時安排我下午跟著其它部門領導去參加一個項目的討論。 大家在對方的會議室里談了一下午,因為之...
    風飄啊飄閱讀 193評論 0 0