ffmpeg安裝第三方編碼器(encoder)庫,ffmpeg編碼h264

ffmpeg安裝第三方編碼器(encoder)庫git

關鍵詞:ffmpeg、編碼h26四、第三方encoderide

    安裝好了ffmpeg後,若是你使用ffmpeg工具去把某個視頻文件轉成h264視頻編碼、mp3音頻編碼or其餘ffmpeg自身不帶的xxx編碼類型,就會看到報錯信息,unknown encoder 'xxx'。此刻你須要的只要去安裝其餘的編碼器就好了,本質上實際上是把其餘的編碼器以庫的形式安裝好,例如,把正確的libx264.so or libx264.a存放在/usr/lib下 or /usr/local/lib下。工具

    舉兩個例子吧,視頻方面的編碼器就拿h264來講,音頻方面的例子就拿mp3(mp3lame)來講。編碼

    掃盲,Linux下安裝一個正規的軟件,通常都是三部曲,①、【./configure】(加一些可能的參數,好比enable一些功能,disable一些功能,究竟有哪些功能能夠開啓和關閉呢?通常經過./configure --help命令來查詢),②、【make】(編譯),③、【sudo make install】(把生成的二進制應用程序文件和.so和.a複製到/usr/local/下).net

     1、h264code

     動手搜一下ffmpeg的工程代碼庫,會發現每一個codec都有一下幾個成員變量,可是有好幾個codec缺乏encoder,h264就是其中一個了。先無論什麼緣由,ffmpeg沒有原生的支持h264,可是你能夠查看一下avcodec_register_all這個API,會發現一大片的REGISTER_ENCODER(XXX, xxx)視頻

REGISTER_DECODER(XXX, xxx)接口

這裏分不少塊,例如/* video codecs */,/* audio codecs */,/* external libraries */it

可是你在/* video codecs */這一塊卻看不到h264的REGISTER_ENDECODER (H264, h264);這句話,若是你堅持往下翻,你會在/* external libraries */這塊裏面發現REGISTER_ENCODER (LIBX264, libx264);因此ffmpeg是有給h264準備好了接口的,可是須要第三方庫來支持。io

    回到重點,怎麼裝呢?

    1.先下載x264的工程代碼,【git clone git://git.videolan.org/x264.git】。

    2.進入x264目錄,而後./configure --help看看它的幫助信息,咱們這裏須要的是x264以.so or .a的形式來支援ffmpeg,因此通常就關注shared和static關鍵詞就能夠了。執行./configure --enable-shared --enable-static就好了。

    3.完了make && sudo make install就能夠了。

    你會發現咱們在./configure的時候沒有指定前綴--prefix=/usr,很明顯,libx264.so和libx264.a就會複製到/usr/local/lib下去,記住這裏,等下會由於這裏要作一些修改。

    2、mp3lame

    上面說了h264,相信mp3lame理解起來就簡單多了。

    1.先下載mp3lame的工程代碼,http://sourceforge.net/projects/lame/files/lame/,爲何這裏要顯得多餘的講一下mp3lame呢,是這樣的。你們能夠看到x264用的是git,mp3lame是用的sourceforge,不妨再多說一個faac(也是一種原生ffmpeg不支持的音頻codec),faac用的是http://sourceforge.net/projects/faac/files/faac-src/,因此每一種codec或者很重要的軟件都有一個團隊或者社區在維護,因此須要什麼東西,儘可能去sourceforge或者git上找,其餘地方找的可能不夠新,可能不完整不正確。

    2.而後也是./configure --help先,看看哪些功能是咱們須要打開關閉的

    3.完了make && sudo make install就能夠了。

    很明顯,咱們又沒有指定--prefix-/usr,因此mp3lame的libmp3lame.so和libmp3lame.a就被賦值到了/usr/local/lib下了。

 

    3、從新編譯ffmpeg

    1.進入ffmpeg目錄,./configure --enable-gpl --enable-libx264 --enable-libmp3lame,而後就生成了新的makefile了。

    2.執行sudo make clean && make sudo make install。

    3.這樣ffmpeg就被從新編譯了,完了就能夠驗證一下,使用ffmpeg工具,把某個視頻文件中的視頻流轉碼成h264格式,音頻流轉碼成mp3lame格式,不妨試試。

    4.若是你真的嘗試了,你應該會看到相似於「libxxx.so找不到」的錯誤提示,解決辦法以下:

    (1).表象:ffmpeg運行的時候試圖去連接libxxx.so,可是卻找不到相應的libxxx.so。

    (2).疑惑:我以前明明安裝了libxxx.so的。

    (3).緣由:程序運行的時候默認是去/usr/lib下找libxxx.so,可是咱們以前安裝的確實在/usr/local/lib下,因此形成這個報錯。

    (4).解決辦法:有不少,我說一種我親測過的。

    在/etc/ld.so.conf文件中添加一行/etc/ld.so.conf,固然是用root用戶啦。而後執行ldconfig命令使得剛纔的修改生效,完了再運行ffmpeg的轉碼命令試試,能夠了吧。

    

    以前我嘗試過用ffplay來播放一個h264編碼的視頻,結果固然是能夠播放,我就天真的覺得ffmpeg支持h264了,其實否則,ffmpeg主要仍是用來解碼,因此部分格式的encoder卻沒有,因此纔會有第三方庫支援,爲何原生ffmpeg不支持某些格式呢?緣由我暫時不知道。爲了解決ffmpeg能夠編碼h264這個問題,我在網上搜索一些資料,而後總結成上文,在此過程當中我還收穫了一些Linux的知識,也已經寫出。

相關文章
相關標籤/搜索