mac 下面編譯安裝ffmpeg,用來推流,編解碼 轉自: http://www.linuxidc.com/Linux/2015-12/126093.htmhtml
最近由於一個項目要求,須要開發實時視頻編解碼功能,準備採用 FFmpeg 以 x264 方式進行實時的視頻編解碼。Windows 以及 Linux 環境下的 FFmpeg 動態庫、頭文件等資源都很是容易得到,編譯環境也容易構建,但 Mac OS X 下的開發編譯環境就不那麼容易了。由於 FFmpeg 默認沒有提供 Mac OS X 下的已經編譯好的動態連接庫(甚至連靜態庫都沒有提供),而網上找到的可能是編譯好的單獨的 FFmpeg 可執行程序,知足不了開發過程當中對 FFmpeg 動態庫(或靜態庫)的編譯鏈接要求,所以考慮本身動手從源代碼編譯安裝 FFmpeg,以得到 Mac OS X 下的 FFmpeg 動態連接庫(以及靜態庫)版本,並構建好開發編譯環境。linux
首先要確保 Mac OS X 下已經具有編譯開發環境,通常都是安裝 XCode 以及對應的 Command line tools。git
而後,從 FFmpeg 官方網站下載 FFmpeg 最新版本的源代碼,可直接下載打包好的源代碼壓縮文件,也能夠經過 git 獲取完整源代碼鏡像,推薦用 git,命令以下:github
git clone git://source.ffmpeg.org/ffmpeg.git ffmpegapi
這時不要急着立刻開始進行編譯配置!由於首先要明白一點,FFmpeg 是一個編解碼框架,可以支持各類不一樣的編解碼器,並採用統一的 api 去調用。但其默認只提供了針對各類媒體格式的解碼器(基本上涵蓋得比較全了),而編碼器默認提供不多的幾個開源的格式(或者已經無需專利保護的格式)。因此,若是你須要 FFmpeg 具有支持多種媒體格式的編碼能力,你須要額外下載並安裝那些編碼器(主要是經過安裝這些編碼器得到它們的頭文件、動態庫及靜態庫用於 FFmpeg 編譯),才能保證在 FFmpeg 編譯時載入這些編碼器的二進制代碼,使 FFmpeg 具有這些編碼功能。通過對比分析,就我這個項目需求而言,基本上編碼器須要先額外下載並安裝這幾個:x26四、fdk-aac、libvpx、libvorbis、LAME(mp3)就足夠了。ruby
接着,分別下載 x26四、fdk-aac、libvpx、libvorbis、LAME 的源代碼,而後分別編譯安裝。注意在執行各自的 configure 建立編譯配置文件時,最好都強制帶上 --enable-static 和 --enable-shared 參數以確保生成靜態庫和動態庫。另外由於是在 Mac OS X 環境下編譯,所以在各自編譯完後,都要執行 sudo make install,安裝到默認的 /usr/local 目錄下相應位置(Mac OS X 下不推薦 /usr),所以不要在 configure 時指定 --prefix,就用默認的 /usr/local 目錄前綴便可。框架
在安裝完上述編碼器後,就能夠開始編譯安裝 FFmpeg 了。進入 FFmpeg 的源代碼目錄,執行如下命令:curl
./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264 --enable-static --enable-sharedide
make工具
sudo make install
便可完成編譯安裝,FFmpeg 的頭文件將會複製到 /usr/local/include 下面相應位置,靜態庫及動態庫會被複制到 /usr/local/lib 目錄下,FFmpeg 的可執行程序(ffmpeg、ffprobe、ffserver)會被複制到 /usr/local/bin 目錄下,這樣 FFmpeg 的開發環境就構建好了。補充說明一點,由於默認狀況下 Mac OS X 沒有 SDL,因此 FFmpeg 編譯時檢測不到 SDL 支持,就不會編譯 ffplay 這個可執行程序了。
Linux下編譯FFmpeg之下載源文件並編譯 http://www.linuxidc.com/Linux/2012-02/54565.htm
Linux 編譯升級 FFmpeg 步驟 http://www.linuxidc.com/Linux/2013-08/88190.htm
CentOS 5.6 上安裝 FFMPEG http://www.linuxidc.com/Linux/2011-09/42793.htm
在Ubuntu下安裝FFmpeg http://www.linuxidc.com/Linux/2012-12/75408.htm
Ubuntu 12.04下編譯ffmpeg http://www.linuxidc.com/Linux/2013-02/78857.htm
Ubuntu 14.04下PPA安裝FFmpeg 2.2.2 http://www.linuxidc.com/Linux/2014-05/101322.htm
經過brew安裝ffmpeg須要的相關文件:
網上一搜,其實ffmpeg官網給出了很是詳細的在Mac上編譯ffmpeg的步驟:
http://ffmpeg.org/trac/ffmpeg/wiki/MacOSXCompilationGuide
首先,必須安裝XCode,XCode提供了Mac平臺開發環境必須的gcc編譯器,要注意的是XCode 4.5安裝後並無命令行的gcc可用,還須要打開XCode,在某個設置裏添加Command Line Tools,XCode就會自動下載並安裝好gcc,同時還有git也被安裝了。 2) 安裝homebrew
而後安裝homebrew,這是一個Mac平臺的包管理工具,相似Debian/Ubuntu的apt,提供了許多Mac沒有的Unix/Linux工具,例如wget。安裝homebrew很簡單:
ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
ffmpeg須要的依賴包幾乎均可以經過brew install安裝:
brew install automake celt faac fdk-aac lame libass libtool libvorbis libvpx libvo-aacenc opencore-amr openjpeg opus sdl schroedinger shtool speex texi2html theora wget x264 xvid yasm
官網的命令行多了一個git,這個XCode自帶,不必再裝了。 4) 安裝libaacplus
這個包無法經過homebrew安裝,因此只能本身下載安裝,官網有一個詳細的命令行步驟:
wget http://217.20.164.161/~tipok/aacplus/libaacplus-2.0.2.tar.gz tar xzf libaacplus-2.0.2.tar.gz cd libaacplus-2.0.2
sed -i '.bck' -e 's/libtool/glibtool/' autogen.sh ./autogen.sh make && make install cd ..
直接按照官網的命令行編譯,報ERROR: libopenjpeg not found,其實openjpeg是安裝了的,只是沒找到相應的頭文件,網上google,一個國外網友給出了簡單解決方案:
首先,肯定openjpeg的安裝目錄在/usr/local/Cellar/openjpeg/1.5.1,而後,把相應的路徑加入到gcc的搜索路徑中:
export CFLAGS="-I/usr/local/Cellar/openjpeg/1.5.1/include/openjpeg-1.5"
而後開始編譯:
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg cd ffmpeg ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libaacplus --enable-libass --enable-libcelt --enable-libfaac --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-openssl --enable-libopus --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvo-aacenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid --prefix=/usr/local make && make install
運行ffmpeg,輸出以下:
ffmpeg version N-48064-gcfa5300 Copyright (c) 2000-2012 the FFmpeg developers built on Dec 21 2012 10:24:39 with llvm-gcc 4.2.1 (LLVM build 2336.11.00) configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postpr oc --enable-libaacplus --enable-libass --enable-libcelt --enable-libfaac --enabl e-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-openssl --enable-libop us --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvo -aacenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid -- prefix=/usr/local libavutil 52. 12.100 / 52. 12.100 libavcodec 54. 81.100 / 54. 81.100 libavformat 54. 49.102 / 54. 49.102 libavdevice 54. 3.102 / 54. 3.102 libavfilter 3. 29.100 / 3. 29.100 libswscale 2. 1.103 / 2. 1.103 libswresample 0. 17.102 / 0. 17.102 libpostproc 52. 2.100 / 52. 2.100 Hyper fast Audio and Video encoder usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfi le}...
Use -h to get full help or, even better, run 'man ffmpeg'
如今,能夠找一個flv文件測試,把它轉換成mp4:
ffmpeg -i psy-style.flv -vcodec copy -acodec copy psy-style.mp4
因爲用了copy模式,ffmpeg不會從新轉碼,原有畫質不變,只是把文件封裝從flv變爲mp4,瞬間就可完成。
下面這個哥們在max下面編譯ffmpeg遇到的問題: Mac OS X下編譯並搭建ffmpeg開發環境及常見錯誤處理 http://blog.csdn.net/willib/article/details/52530328