最新FFMPEG一鍵編譯指南

最新FFMPEG一鍵編譯指南

樓主主要關(guān)注iOS上面的開發(fā),所以本文只討論iOS平臺的一鍵編譯。不排除以后介紹Android平臺。

版本

截止2017.03.13, 在官網(wǎng)上的最新版本為3.2.4。本文以此來講述。

官網(wǎng)版本歷史

兩個重要的腳本

我想很多人編譯FFMPEG都是遵循這兩個流傳已久的腳本,并在此基礎(chǔ)上根據(jù)自身需求來定制FFMPEG。這些腳本也是隨著FFMPEG版本的更新而做相應(yīng)的更新,樓主兩年前就做過相關(guān)的介紹,對比起來,內(nèi)容已有不小的改動。

  1. build_ffmpeg.sh

    往往你在網(wǎng)上搜索的話,會找到很多這個腳本的版本。記住,最原始、最正宗的出處在這里。

  2. gas_preprocessor.pl

    請移步下載。

build_ffmpeg.sh都干了啥

樓主主要介紹這個腳本,至于另外一個,很少修改,所以不做介紹。具體來說,build_ffmpeg.sh做了如下幾件事情。

  1. 設(shè)置輸入,即你要編譯的FFMPEG的版本

    SOURCE=ffmpeg-3.2.4

    ++ffmpeg-3.2.4++必須要按照這個格式來寫,為什么后面再說。

  2. 設(shè)置輸出,即編譯好的lib放到什么位置

    FAT="FFmpeg-iOS"

    ++FFmpeg-iOS++是輸出路徑,表示最終的所有l(wèi)ib和頭文件放在當(dāng)前目錄下的FFmpeg-iOS。

  3. 設(shè)置編譯選項

    CONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs --disable-doc --enable-pic"

    有時候你可能只需要FFMPEG里面的一部分功能,在這里可以實現(xiàn)你的想法。

  4. 設(shè)置架構(gòu)

    ARCHS="arm64 armv7 x86_64 i386"

    上面的設(shè)置說明,你想編譯64位、32位的真機版,以及64位、32位的模擬器版??勺鰟h減。

  5. 嘗試下載安裝Yasm,如果你的Mac上沒有安裝

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    Yasm是x86平臺的匯編編譯器

  6. 嘗試下載安裝gas-preprocessor.pl,如果你的Mac上沒有安裝

    curl -L https://github.com/libav/gas-preprocessor/raw/master/gas-preprocessor.pl

  7. 嘗試下載FFMPEG源代碼,如果你的Mac上沒有指定版本的code

    curl http://www.ffmpeg.org/releases/$SOURCE.tar.bz2 | tar xj

    前面提到過++SOURCE++的賦值必須要按照一定的格式,那是因為官網(wǎng)的源文件的命名規(guī)則就是這樣的。

  8. 根據(jù)配置生成config.mk和config.h

     TMPDIR=${TMPDIR/%\/} $CWD/$SOURCE/configure \
      --target-os=darwin \
       --arch=$ARCH \
       --cc="$CC" \
       $CONFIGURE_FLAGS \
      --extra-cflags="$CFLAGS" \
      --extra-ldflags="$LDFLAGS" \
      --prefix="$THIN/$ARCH" \
      || exit 1
    
  9. 開始編譯

    make -j3 install $EXPORT || exit 1

裁剪才是本文想談的重點

在你的項目里,F(xiàn)FMPEG大多數(shù)的功能都不是你需要的,所以必須瘦身,減少lib的體積。這里以只需要編譯H264 decoder來說明。還記得上面提到的++CONFIGURE_FLAGS++嗎?加在這里就行。

  1. --disable-avfilter --disable-avdevice --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avformat --disable-swscale --disable-programs --disable-doc

    把大的模塊先干掉。

  2. --disable-everything

    注意這個everything不包括disable上面提及的那些模塊,那是哪些呢?看下面。

    --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?

  3. --enable-decoder=h264

    干自己的事。

其他

寫這篇文章時,查閱資料,看到官網(wǎng)有不同平臺的編譯指南,記錄下來以后參考。

本文如對你有所幫助,請點贊。如值得分享,請注明出處后轉(zhuǎn)載。
樓主在實踐和寫作過程中亦參考了不少好文,列于下,謝謝分享。

  1. ffmpeg編譯選項匯總
  2. Mac OS X 10.11 sudo 指令出問題了么?
  3. FFmpeg源代碼簡單分析:configure
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容