FFmepg的基本組成

一、FFmepg的基本組成

FFmpeg框架的基本組成包含AVFormat、AVCodec、AVFilter、AVDevice、AVUtil等模塊庫。

(1)FFmpeg的封裝模塊AVFormat

AVFormat實現了多媒體領域絕大數媒體封裝格式,包括封裝和解封裝,如MP4、FLV、KV、 TS等文件封裝格式,RTMP、RTSP、MMS、HLS等網絡協議封裝格式。FFmepg是否支持某種媒體封裝格式取決於編譯時是否包含了該格式的封裝庫。

(2)FFmpeg的編解碼模塊AVCodec

AVCodec包括大多數常用的編解碼格式,既支持編碼也支持解碼。除了支持MPEG4、AAC、MJPEG等自帶的媒體格式也支持H.264(x264編碼器)、H.265(X265編碼器)、MP3(libMP3lame編碼器)。

(3)FFmepg的濾鏡模塊AVFilter

AVFilter庫提供了一個通用的音頻、視頻、字幕等濾鏡處理框架。在AVFilter中,濾鏡框架可以有多個輸入和多個輸出。

(4)FFmpeg的視頻圖像轉換計算模塊swscale

swscale模塊提供了高級別的圖像轉換API,它能夠對圖像進行縮放和像素格式轉換。

(5)FFmpeg的音頻轉換計算模塊swresample

swresample提供了音頻重採樣API,支持音頻採樣、音頻通道佈局、佈局調整。

二、 FFmpeg的主要工具

(1)FFmepg的編解碼工具ffmpeg

在FFmpeg官網可下載ffmpeg.exe,它可以作爲命令行工具使用。如將.mp4文件轉化爲.avi文件,可使用如下命令。

ffmpeg -i input.mp4 output.avi

ffmpeg通過-i參數將input.mp4作爲輸入源,然後進行轉碼與轉封裝操作,輸出到output.avi中。ffmpeg轉碼工作流程如下圖。

 

 

由上圖所示,ffmpeg首先讀取輸入源,然後通過Demuxer將音視頻包進行解封裝,這個動作通過調用libavformat中的接口即可實現;接着通過Decoder進行解碼,將音視頻通過Decoder解包爲YUV或者PCM這樣的數據,Decoder通過libavcodec中的接口即可實現;然後通過Encoder將對應的數據進行編碼,編碼可以通過libavcodec中的接口實現;接下來將編碼後的音視頻數據包通過Muxer進行封裝,Muxer封裝通過libavformat中的接口即可實現,輸出成爲輸出流。

(2)FFmpeg的播放器ffplay

FFmpeg不但可以提供轉碼、轉封裝等功能,同時還提供了播放器相關功能,使用FFmpeg的avformat與avcodec,可以播放各種媒體文件或者流。

(3)FFmpeg的多媒體分析器ffprobe

ffprobe是一個非常強大的多媒體分析工具,可以從媒體文件或者媒體流程中獲得媒體信息,比如音頻的參數、視頻的參數、媒體容器的參數信息等。

ffprobe -show_streams atest.mp4

三、FFmpeg編碼支持

FFmpeg本身支持一些音視頻編碼格式、文件封裝格式與流媒體傳輸協議,但是支持的數量有限,可依據具體需求進行定製和裁剪。

(1)查看FFmpeg所支持的音視頻編碼格式、文件封裝格式與流媒體傳輸協議:

ffmpeg configure --help

(2)查看FFmpeg編碼器支持

ffmpeg configure -encoders

FFmpeg支持的編碼器比較全面,比如AAC、AC3、H.264、H.265、MPEG4、MPEG2VIDEO、PCM、FLV1的編碼器支持。

(3)查看FFmpeg解碼器支持

ffmpeg configure -decoders

decoders支持了MPEG4、H.264、H.265(HEVC)、MP3等格式。

(4)查看FFmpeg的通信協議支持

ffmpeg configure -protocols

FFmpeg支持的流媒體協議比較多,包括MMS、HTTP、HTTPS、HLS(M3U8)、RTMP 、RTP,甚至支持TCP、UDP等。

參考文獻:

[1] 劉歧,趙文傑.FFmpeg從入門到精通[M].北京:機械工業出版社,2018:3-29.

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章