1. 程式人生 > >ffmpeg安裝第三方庫

ffmpeg安裝第三方庫

安裝好了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/下)

     一、h264

     動手搜一下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 */

 

但是你在/* video codecs */這一塊卻看不到h264的REGISTER_ENDECODER (H264, h264);這句話,如果你堅持往下翻,你會在/* external libraries */這塊裡面發現REGISTER_ENCODER (LIBX264, libx264);所以ffmpeg是有給h264準備好了介面的,但是需要第三方庫來支援。

 

    回到重點,怎麼裝呢?

 

    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下去,記住這裡,等下會因為這裡要做一些修改。

 

    二、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下了。

 

    三、重新編譯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的知識,也已經寫出。

轉載至:https://blog.csdn.net/zmlcool/article/details/8141097