最新FFMPEG一鍵編譯指南

最新FFMPEG一鍵編譯指南

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

版本

截止2017.03.13, 在官網(wǎng)上的最新版本為3.2.4攻柠。本文以此來(lái)講述赃磨。

官網(wǎng)版本歷史

兩個(gè)重要的腳本

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

  1. build_ffmpeg.sh

    往往你在網(wǎng)上搜索的話,會(huì)找到很多這個(gè)腳本的版本霉晕。記住庭再,最原始、最正宗的出處在這里牺堰。

  2. gas_preprocessor.pl

    請(qǐng)移步下載拄轻。

build_ffmpeg.sh都干了啥

樓主主要介紹這個(gè)腳本,至于另外一個(gè)伟葫,很少修改恨搓,所以不做介紹。具體來(lái)說(shuō),build_ffmpeg.sh做了如下幾件事情斧抱。

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

    SOURCE=ffmpeg-3.2.4

    ++ffmpeg-3.2.4++必須要按照這個(gè)格式來(lái)寫(xiě),為什么后面再說(shuō)辉浦。

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

    FAT="FFmpeg-iOS"

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

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

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

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

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

    ARCHS="arm64 armv7 x86_64 i386"

    上面的設(shè)置說(shuō)明弛槐,你想編譯64位懊亡、32位的真機(jī)版,以及64位乎串、32位的模擬器版店枣。可做刪減叹誉。

  5. 嘗試下載安裝Yasm鸯两,如果你的Mac上沒(méi)有安裝

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

    Yasm是x86平臺(tái)的匯編編譯器

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

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

  7. 嘗試下載FFMPEG源代碼桂对,如果你的Mac上沒(méi)有指定版本的code

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

    前面提到過(guò)++SOURCE++的賦值必須要按照一定的格式甩卓,那是因?yàn)楣倬W(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. 開(kāi)始編譯

    make -j3 install $EXPORT || exit 1

裁剪才是本文想談的重點(diǎn)

在你的項(xiàng)目里蕉斜,F(xiàn)FMPEG大多數(shù)的功能都不是你需要的逾柿,所以必須瘦身,減少lib的體積宅此。這里以只需要編譯H264 decoder來(lái)說(shuō)明机错。還記得上面提到的++CONFIGURE_FLAGS++嗎?加在這里就行父腕。

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

    把大的模塊先干掉弱匪。

  2. --disable-everything

    注意這個(gè)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

    干自己的事。

其他

寫(xiě)這篇文章時(shí)枝嘶,查閱資料帘饶,看到官網(wǎng)有不同平臺(tái)的編譯指南,記錄下來(lái)以后參考群扶。

本文如對(duì)你有所幫助及刻,請(qǐng)點(diǎn)贊镀裤。如值得分享,請(qǐng)注明出處后轉(zhuǎn)載缴饭。
樓主在實(shí)踐和寫(xiě)作過(guò)程中亦參考了不少好文暑劝,列于下,謝謝分享颗搂。

  1. ffmpeg編譯選項(xiàng)匯總
  2. Mac OS X 10.11 sudo 指令出問(wèn)題了么担猛?
  3. FFmpeg源代碼簡(jiǎn)單分析:configure
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市丢氢,隨后出現(xiàn)的幾起案子毁习,更是在濱河造成了極大的恐慌,老刑警劉巖卖丸,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異盏道,居然都是意外死亡稍浆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)猜嘱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)衅枫,“玉大人,你說(shuō)我怎么就攤上這事朗伶∠伊茫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵论皆,是天一觀的道長(zhǎng)益楼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)点晴,這世上最難降的妖魔是什么感凤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮粒督,結(jié)果婚禮上陪竿,老公的妹妹穿的比我還像新娘。我一直安慰自己屠橄,他們只是感情好族跛,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著锐墙,像睡著了一般礁哄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贮匕,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天姐仅,我揣著相機(jī)與錄音,去河邊找鬼。 笑死掏膏,一個(gè)胖子當(dāng)著我的面吹牛劳翰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播馒疹,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼佳簸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了颖变?” 一聲冷哼從身側(cè)響起生均,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腥刹,沒(méi)想到半個(gè)月后马胧,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衔峰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年佩脊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垫卤。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡威彰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出穴肘,到底是詐尸還是另有隱情歇盼,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布评抚,位于F島的核電站豹缀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏盈咳。R本人自食惡果不足惜耿眉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鱼响。 院中可真熱鬧鸣剪,春花似錦、人聲如沸丈积。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)江滨。三九已至铛纬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唬滑,已是汗流浹背告唆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工棺弊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人擒悬。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓模她,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親懂牧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侈净,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容