Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> FFmpeg使用手冊 - FFmpeg 編碼支持與定制

FFmpeg使用手冊 - FFmpeg 編碼支持與定制

編輯:關於android開發

FFmpeg使用手冊 - FFmpeg 編碼支持與定制


3.1 FFmpeg本身支持一些編碼、封裝與協議,但是支持的依然有限,有些是因為licence,有些是因為相對來說比較大,FFmpeg所做的是提供一套基礎的框架,而這些編碼、封裝與協議可以作為一個FFmpeg的模塊掛在FFmpeg中,這些模塊以第三方的外部庫的方式提供支持,可以通過FFmpeg的源碼的configure進行查看FFmpeg默認支持的編碼、封裝與協議的支持,不支持的可以再configure –help的時候查看所支持的第三方外部庫,可以通過對應的參數選項進行支持:


通過上圖可以看到,FFmpeg支持的外部庫相對來說比較多,主要包含如下列表:
bzip2 1.0.6
Fontconfig 2.11.94
Frei0r 20130909-git-10d8360
GnuTLS 3.3.15
libiconv 1.14
libass 0.12.2
libbluray 0.8.1
libbs2b 3.1.0
libcaca 0.99.beta18
dcadec 20150506-git-98fb3b6
FreeType 2.5.5
Game Music Emu 0.6.0
GSM 1.0.13-4
iLBC 20141214-git-ef04ebe
Modplug-XMMS 0.8.8.5
LAME 3.99.5
OpenCORE AMR 0.1.3
OpenJPEG 1.5.2
Opus 1.1
RTMPDump 20140707-git-a1900c3
Schroedinger 1.0.11
libsoxr 0.1.1
Speex 1.2rc2
Theora 1.1.1
TwoLAME 0.3.13
vid.stab 0.98
VisualOn AAC 0.1.3
VisualOn AMR-WB 0.1.2
Vorbis 1.3.5
vpx 1.4.0
WavPack 4.75.0
WebP 0.4.3
x264 20150223-git-121396c
x265 1.7
XAVS svn-r55
Xvid 1.3.3
XZ Utils 5.2.1
zlib 1.2.8
這些外部庫可以通過configure進行定制,命令行如下:

如果不需要這麼多配置選項,只是想支持H264視頻與AAC音頻編碼,可以講配置項簡化為如下:

如圖所示,如果要支持H264與AAC,需要系統中包括libx264與libfaac的第三方庫進行支持,否則會出現錯誤提示:

未找到libfaac錯誤提示

未找到libx264錯誤提示
如果需要支持H265編碼,可以與支持h265基本類似,從前面的help信息中可以看到,只需要增加—enable-libx265即可支持h265編碼,其他對應的編碼類似。
FFmpeg默認支持的編碼、封裝與協議相對比較多,所以編譯出來的FFmpeg體積比較大,在有些應用場景中並不需要FFmpeg所支持的一些編碼、封裝或者協議,可以通過configure --help查看到一些有用的裁剪操作:

可以通過這些選項關閉掉不需要用到的編碼、封裝與協議等模塊,驗證方法如下:

disable掉所有的模塊後,可以看到ffmpeg的編譯配置項輸出信息幾乎為空:

Disable所有的模塊之後,可以根據定制,支持上自己所需要的模塊,例如希望支持h264視頻編碼、aac音頻編碼、封裝為mp4,則可以通過如下方式進行支持:

配置後輸出的編譯配置信息如下:

支持h264、aac編碼與mp4封裝的FFmpeg編譯配置參數
從圖中可以看到,FFmpeg已經支持了h264編碼、aac編碼與mp4封裝格式的支持。這樣通過編譯後生成的ffmpeg即是配置裁剪過的ffmpeg,體積會比默認編譯的ffmpeg小很多。
3.2 FFmpeg 的編碼器支持
FFmpeg源代碼中可以包含的編碼非常多,常見的,不常見的都可以在編譯配置列表中見到,可以通過使用編譯配置命令configure --list-encoders參數來查看:

從圖中可以看出,ffmpeg支持的encoder比較全面,比如aac、ac3、h264、h265、mpeg4、mpeg2video、pcm、flv的編碼器支持。
3.3 FFmpeg 的解碼器支持
FFmpeg源代碼中本身包含了很多的解碼支持,解碼主要為輸入的時候進行的解碼,也可以理解為將壓縮過的編碼進行解壓縮,關於解碼的支持,可以通過./configure –list-decoders命令來進行查看:

從圖中可以看到ffmpeg所支持的解碼器模塊decoders,支持了mpeg4、h264、h265(HEVC)、mp3等。
3.4 FFmpeg 的復用(Muxing)支持
FFmpeg的復用為將壓縮後的編碼封裝到一個容器格式中(又叫Muxing),如果要查看FFmpeg源代碼中都可以支持哪些容器格式,可以用過命令./configure --list-muxers查看:

從圖中可以看到,ffmpeg支持生成裸流文件,例如h264、aac、pcm,也支持一些常見的格式,例如mp3、mp4、flv、hls、webm等。

3.5FFmpeg的解復用(Demuxing)支持
FFmpeg的解復用為將讀入的容器格式拆解開,將裡面的壓縮的音頻流、視頻流、字幕流、數據流等等提取出來(又叫Demuxing),如果要查看FFmpeg的源代碼中都可以支持哪些輸入的容器格式,可以通過命令./configure --list-demuxers 查看:

從圖中可以看到,ffmpeg源碼中已經支持的demuxer非常多,包含圖片(image)、mp3、flv、MP4、mov、avi等。

3.6FFmpeg 的通信協議支持
FFmpeg不僅僅支持本地的多媒體處理,而且還支持網絡流媒體的處理,支持的網絡流媒體協議相對來說也很全面,可以通過命令 ./configure --list-protocols 進行查看:

從圖中可以看到,ffmpeg支持的流媒體協議比較多,包括mms、http、hls(M3U8)、rtmp、rtp、甚至支持tcp、udp,也支持本地文件file協議,和多個文件拼接串流的支持concat,在後面的章節中會有詳細介紹。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved