天天看點

ffmpeg學習筆記

       對于每個初學者,剛開始接觸時,想必會有三個問題最為關心,即ffmpeg是什麼?能幹什麼?怎麼開始學習?本人前段時間開始接觸ffmpeg,在剛開始學習過程中,這三個問題尤其最後一個問題着實困擾了我一下。現在将我對ffmpeg的一點了解分享出來,希望對正在學習ffmpeg程式設計的同學有幫助。

       1. ffmpeg是什麼?

       (1)你可以把ffmpeg了解成一套音視訊解決方案,并且還是免費、開源、跨平台的解決方案。它提供了錄制、轉換以及流化音視訊等等功能。同時還包含了非常先進的音頻/視訊編解碼庫,這樣使用ffmpeg可以對采集的原始音視訊進行編碼存儲,或者将已有的音視訊檔案解碼播放。這裡簡單提一下,ffmpeg中視訊h264編碼依賴x264第三方視訊編碼庫,音頻MP3編碼依賴lame mp3第三方編碼庫。

       (2)同時,ffmpeg更是一組使用c語言開發的開源程式,與許許多多的開源程式一樣,它有自己的社群、有活躍的維護者,尤其是近2年,版本更新很快,差不多每個月都有更新。打開ffmpeg源檔案,看到成千上萬行的c代碼,在佩服作者的聰明才智同時,也不禁為自己的智商捉急。看到源檔案,也就可以了解ffmpeg api的實作細節,這樣就可以按照自己的需求進行修改,實作一個定制版的ffmpeg。當然,走到這一步還是需要點功夫的,從本人的學習過程來看,别說修改ffmpeg,剛開始面對ffmpeg一堆api,真是一頭霧水,無從下手,後面會講如何學習ffmpeg。

       2. ffmpeg能幹什麼?

       (1)你可以下載下傳安裝ffmpeg,如下圖所示,然後在控制台指令行中輸入ffmpeg相關指令,這樣就可以實作播放歌曲、視訊,甚至通過指令實作對音視訊檔案轉換、混合、剪輯等各種複雜處理。這種ffmpeg使用情景在伺服器端比較多,相信很多視訊類網站都架設了基于ffmpeg的流媒體伺服器,比如給伺服器上儲存的視訊加個水印,雖然我沒搞過,但相信就是一組指令的事吧。

ffmpeg學習筆記

       (2)你還可以下載下傳ffmpeg源碼,如下圖所示,在windows平台、android平台等各種平台下編譯ffmpeg源碼,以擷取不同平台下ffmpeg靜态庫或者動态庫,供自己的程式調用,以實作基于ffmpeg的音視訊編解碼等程式開發。這種ffmpeg使用情景在用戶端比較多,比如短視訊類app應用《微視》,它的音視訊編解碼工作就是調用ffmpeg完成的。當然,我近期正在搞的短視訊類app應用編解碼也是調用ffmpeg完成的。

ffmpeg學習筆記

       3. 如何學習ffmpeg?

       在網上搜尋ffmpeg的學習資源,大體可以搜出兩大類,一個是ffmpeg相關指令學習資料,也就是上一節中提到的在伺服器端安裝ffmpeg,然後通過指令的方式調用ffmpeg完成音視訊轉換、轉播等工作,這方面資料較多,另外由于本人沒深入去研究這些指令用法,這裡就不多講了;另一個就是ffmpeg api學習資料,api學習資料要比前者偏少些。對于ffmpeg api學習,在網上查來查去,回過頭會發現最好的入門學習資料其實是源碼doc/examples檔案下的幾個程式,這幾個程式都是獨立的demo示例程式,分别實作了媒體檔案打開、音視訊混合、音視訊編解碼等等基礎且常見的功能,通過分析這幾個demo示例程式,會逐漸掌握ffmpeg的api用法,這幾個demo示例程式每個檔案大小不一樣,推薦從體積最小的檔案看起,即代碼行數最少,這樣也不會産生望而生畏的心态了。當然,隻分析源碼是遠遠不夠的,還需要把這些demo運作起來,這樣才能對ffmpeg的參數及調用邏輯有更深入的了解,後面會講講如何在windows環境下搭建ffmpeg開發環境。

ffmpeg學習筆記