編輯:關於android開發
1 FFmpeg 的基本組成
FFmpeg 的基本組成包含Format、Codec、Filter、Devices、Utils等,結構如圖:
AvFormats: 主要為媒體文件的封裝格式,也可以稱之為多媒體編碼數據的容器,包含了音頻數據,視頻數據,字幕數據之類的容器;
AvCodecs:主要為媒體文件容器內的具體的數據對應的壓縮方式,例如音頻的aac壓縮數據,音頻的speex壓縮數據,視頻h264壓縮數據等,或ASS字幕數據等;
AvFilters:主要為媒體的音頻數據,視頻數據進行渲染,例如多個視頻文件視頻數據前景與背景進行疊加、透明處理、音頻重采樣、音頻合並等處理;
AvDevices:主要為媒體的播放輸出設備,媒體的采集設備,例如音頻采集設備,音頻輸出設備,視頻的采集設備,視頻的輸出設備等;
Utils:主要為FFmpeg中的AVFormats,AVCodecs,AVFilters等所用到的公用的接口;
Swscale: 主要為FFmpeg中做縮放,rgb轉yuv,混色計算等用的接口。
1.1 FFmpeg 的封裝模塊avformat
libavformat中實現了目前多媒體領域中的幾乎所有封裝格式,可以封裝,可以解封裝,根據需求不同,所支持的也有所不同,ffmpeg能否支持一種封裝格式的視頻的封裝與解封裝,完全取決於這個庫,例如mp4、flv、mkv等容器的封裝與解封裝;又或者RTMP、RTSP、TCP、UDP等協議的封裝與解封裝;關於封裝與解封裝的操作,對CPU的消耗不會特別嚴重,因為封裝與解封裝不涉及到復雜的計算,更多的是I/O,如果希望增加自己定制的封裝格式的話,需要在libavformat中增加自己的對應的format模塊。通過代碼的文件結構可以看得出來
1.2 FFmpeg 的編解碼模塊libavcodec
libavcodec中實現了目前多媒體領域幾乎所有的編解碼格式,可以編碼,可以解碼,不過有些編碼需要使用第三方的編碼器,例如H.264(AVC)編碼需要使用x264編碼器,H.265(HEVC)編碼需要使用x265編碼器,mp3(mp3lame)編碼需要使用libmp3lame編碼器等編碼器,ffmpeg本身同時也支持多種編碼格式,例如mpeg4、aac、mjpeg等編碼,如果希望增加自己的編碼格式,或者硬件編解碼,需要在libavcodec中增加自己的codec模塊,關於更多libavcode相關的信息以及使用信息將會在後面章節進行詳細的介紹。
1.3 FFmpeg 的萬金油libavfilter
Libavfilter 庫提供了一個通用的 音頻 / 視頻濾鏡框架,處理一些濾鏡相關的操作。在 libavfilter中,濾鏡框架可以有多個輸入和多個輸出。為了說明的各種存在的場景,我們參考一下下面這個filtergraph例子:
圖中這個例子中的filtergraph講輸入的視頻切割成了兩部分流,一部分流拋給crop與vclip進行操作,另一部分保持原樣,當crop與vflip操作完成後,將流合並到原有的overlay中,並顯示在最上面一層,輸出新的視頻,對應的命令行如下:
下面看一下具體的執行情況,用來驗證該命令的可行性:
- ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT






Android 利用內容提供者添加聯系人的操作,android提供者
Android 利用內容提供者添加聯系人的操作,android提供者上文中《Android 獲取系統的聯系人》主要介紹了怎樣獲取系統聯系人並實戰了一下,本文將介紹如何添加
解決Android Graphical Layout 界面效果不顯示,androidgraphical
解決Android Graphical Layout 界面效果不顯示,androidgraphical 解決Android Graphical Layout 界
Android清單文件AndroidMenifest.xml,android清單文件
Android清單文件AndroidMenifest.xml,android清單文件1.AndroidMenifes.xml清單文主要結構件結構 所謂主要結構就是每一個清
ImageLoader,androidimageloader
ImageLoader,androidimageloader1.准備工作 1)導入universal-image-loader-1.9.5.jar到項目中 2)創建M