FFmpeg不僅提供了ffmpeg、ffplay和ffprobe三個可執行程式,還提供了八個工具庫,使得開發者能夠呼叫庫裡面的函式,從而實現更精準的定製化開發需求。這八個庫的名字是avcodec、avdevice、avfilter、avformat、avutil、postproc、swresample、swscale,下面分別對這些庫展開介紹。更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短影片上線》一書。
1、avcodec
avcodec是FFmpeg的音影片編解碼庫,它包含了各種音訊的編碼庫和解碼庫,以及各種影片的編碼庫和解碼庫。透過avcodec可以將原始的音影片資料編碼為符合某種碼流規則的資料壓縮包,也可以將資料壓縮包按照指定的碼流規則解壓為原始的音影片資料。儘管avcodec內建了大部分的音影片編解碼庫,可是有些碼流需要整合第三方的編解碼庫,比如影片格式h264要求整合第三方的x264,影片格式h265要求整合第三方的x265,音訊格式mp3要求整合第三方的mp3lame等等,libavcodec目錄下的諸多lib***.c程式碼就是用來整合第三方編解碼庫的。
2、avdevice
avdevice是FFmpeg的音影片裝置庫,它包含了音影片的各種輸入輸出裝置庫,其中輸入裝置指的是採集音影片訊號的裝置,輸出裝置指的是渲染音影片畫面的裝置。當然FFmpeg不會直接操作裝置硬體,而是透過第三方的軟體包去實現,比如採集媒體訊號用到了Windows平臺的VFW捕捉器(VFW全稱Video for Windows),以及VFW的升級版DirectShow捕捉器;渲染媒體畫面用到了Windows平臺的GDI接收器(GDI全稱Graphics Device Interface),以及跨平臺的SDL2媒體開發庫(SDL全稱Simple DirectMedia Layer)。當然,FFmpeg也支援音效處理庫OpenAL(全稱Open Audio Library)和圖形處理庫OpenGL(全稱Open Graphics Library)。
3、avfilter
avfilter是FFmpeg的音影片濾鏡庫,它包含了加工編輯音訊和影片的各種濾鏡包,其中音訊濾鏡的原始碼檔名形如af_***.c,影片濾鏡的原始碼檔名形如vf_***.c。音訊濾鏡多用於調整引數、混合音訊等處理,影片濾鏡多用於變換影片、特效畫面、新增部件等處理。
4、avformat
avformat是FFmpeg的音影片格式庫,它包含了各類媒體檔案格式庫,以及各種網路通訊協議庫。其中格式庫不僅包含影片格式mp4、avi、mov、rm等,音訊格式mp3、wav、aac、pcm等,還包含影像格式比如jpeg、gif、png、yuv等等。協議庫不僅包含檔案協議file,常規的通訊協議http、ftp、tcp、udp等,還包含流媒體傳輸協議比如rtsp、rtmp、hls、srt等等。
5、avutil
avutil是FFmpeg的音影片工具庫,它包含了常見的通用工具和各類演算法庫,其中通用工具包括字典操作、日誌記錄、快取互動、執行緒處理,以及加解密庫aes、md5、sha、base64、等;各類演算法包括排隊演算法fifo、排序演算法qsort、雜湊表hash、二叉樹tree等等。除此以外,avutil也囊括了色彩空間、音訊取樣等方面的公共函式。
6、postproc
postproc是FFmpeg的音影片後期效果處理庫,它主要用於進行後期的效果處理,如果程式碼中使用了濾鏡,編譯時就要連結這個庫,因為濾鏡用到了postproc的一些基礎函式。
7、swresample
swresample是FFmpeg的音訊重取樣庫,它主要用於音訊重取樣的相關功能,比如把音訊從單聲道變為多聲道,變更音訊的取樣頻率,轉換音訊的資料格式等等。
8、swscale
swscale是FFmpeg的影片影像轉換庫,它主要用於影像縮放、色彩空間轉換等功能,其中色彩空間轉換有時也被稱作畫素格式轉換,比如把影片幀從YUV格式轉換為RGB格式。
更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短影片上線》一書。