1. 程式人生 > >FFmpeg-音訊和視訊應用程式的瑞士軍刀

FFmpeg-音訊和視訊應用程式的瑞士軍刀

FFmpeg是一個開源免費跨平臺的視訊和音訊流方案,屬於自由軟體,採用LGPL或GPL許可證(依據你選擇的元件)。它提供了錄製、轉換以及流化音視訊的完整解決方案。它包含了非常先進的音訊/視訊編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec裡很多codec都是從頭開發的。

 簡介

FFmpeg在Linux平臺下開發,但它同樣也可以在其它作業系統環境中編譯執行,包括Windows、Mac OS X等。

FFmpeg's Logo

這個專案最早由Fabrice Bellard發起,現在由Michael Niedermayer維護。許多FFmpeg的開發人員都來自MPlayer專案,而且當前FFmpeg也是放在MPlayer專案組的伺服器上。專案的名稱來自MPEG
視訊編碼標準
,前面的"FF"代表"Fast Forward"。 FFmpeg是一套可以用來記錄、轉換數字音訊、視訊,並能將其轉化為流的開源計算機程式。它包括了目前領先的音/視訊編碼庫libavcodec。 FFmpeg是在Linux下開發出來的,但它可以在包括Windows在內的大多數作業系統中編譯。這個專案是由Fabrice Bellard發起的,現在由Michael Niedermayer主持。可以輕易地實現多種視訊格式之間的相互轉換,例如可以將攝錄下的視訊avi等轉成現在視訊網站所採用的flv格式。[1]

功能

多媒體視訊處理工具FFmpeg有非常強大的功能[2]包括視訊採集功能、視訊格式轉換
、視訊抓圖、給視訊加水印等。 視訊採集功能 FFmpeg是在Linux下開發出來的,但它可以在包括Windows在內的大多數作業系統中編譯。這個專案是由Fabrice Bellard發起的,現在由Michael Niedermayer主持。 ffmpeg視訊採集功能非常強大,不僅可以採集視訊採集卡或USB攝像頭的影象,還可以進行螢幕錄製,同時還支援以RTP方式將視訊流傳送給支援RTSP的流媒體伺服器,支援直播應用。 ffmpeg在Linux下的視訊採集 在Linux平臺上,ffmpeg對V4L2的視訊裝置提高了很好的支援,如: ./ffmpeg -t 10 -f video4linux
2 -s 176*144 -r 8 -i /dev/video0 -vcodec h263 -f rtp rtp://192.168.1.105:5060 > /tmp/ffmpeg.sdp 以上命令表示:採集10秒鐘視訊,對video4linux2視訊裝置進行採集,採集QCIF(176*144)的視訊,每秒8幀,視訊裝置為/dev/video0,視訊編碼為h263,輸出格式為RTP,後面定義了IP地址及埠,將該碼流所對應的SDP檔案重定向到/tmp/ffmpeg.sdp中,將此SDP檔案上傳到流媒體伺服器就可以實現直播了。 ffmpeg在windows下的視訊採集 在windows下關於ffmpeg視訊採集的資料非常少,但是ffmpeg還是支援windows下視訊採集的。ffmpeg支援windows下video for windows(VFW)裝置的視訊採集,不過VFW裝置已經過時,正在被WDM的視訊裝置所取代,但是ffmpeg還沒有支援WDM的計劃,不過好像有將WDM轉為VFW的工具,因此ffmpeg還是可以在windows下進行視訊採集的。 視訊格式轉換功能 ffmpeg視訊轉換功能。視訊格式轉換,比如可以將多種視訊格式轉換為flv格式,可不是視訊訊號轉換 。 ffmpeg可以輕易地實現多種視訊格式之間的相互轉換(wma,rm,avi,mod等),例如可以將攝錄下的視訊avi等轉成現在視訊網站所採用的flv格式。 視訊截圖功能 對於選定的視訊,擷取指定時間的縮圖。視訊抓圖,獲取靜態圖和動態圖,不提倡抓gif檔案;因為抓出的gif檔案大而播放不流暢 給視訊加水印功能 使用ffmpeg 視訊新增水印(logo)。

專案組成

FFmpeg是一套可以用來記錄、轉換數字音訊、視訊,並能將其轉化為流的開源計算機程式。它包括了目前領先的音/視訊編碼庫libavcodec等。 libavformat :用於各種音視訊封裝格式的生成和解析,包括獲取解碼所需資訊以生成解碼上下文結構 和讀取音視訊幀等功能; libavcodec :用於各種型別聲音/影象編解碼; libavutil :包含一些公共的工具函式; libswscale :用於視訊場景比例縮放、色彩對映轉換; libpostproc:用於後期效果處理; ffmpeg :該專案提供的一個工具,可用於格式轉換、解碼或電視卡即時編碼等; ffsever :一個 HTTP 多媒體即時廣播串流伺服器; ffplay :是一個簡單的播放器,使用ffmpeg 庫解析和解碼,通過SDL顯示;

格式和協議

支援的編碼 源自FFmpeg專案組的兩個視訊編碼: Snow FFV1 支援的格式 ASF AVI BFI[7] IFF[8] RL2[9] FLV MXF, Material eXchange Format, SMPTE 377M Matroska Maxis XA[10] MSN Webcam stream[11] MPEG transport stream TXD[6] OMA[12] GXF, General eXchange Format, SMPTE 360M mov,mp4,m4a,3gp, 支援的協議 HTTP RTP RTSP RealMedia RTSP/RDT TCP UDP Gopher RTMP RTMPT, RTMPE, RTMPTE, RTMPS (via librtmp) SDP MMS over TCP

相關版權

(Hall Of Shame)  FFmpeg被許多開源專案採用,比如ffmpeg2theora, VLC, MPlayer, HandBrake, Blender, Google Chrome等。還有DirectShow/VFWffdshow(external project)和QuickTime的Perian (external project)也採用了FFmpeg。 由於FFmpeg是在LGPL/GPL協議下發布的(如果使用了其中一些使用GPL協議釋出的模組則必須使用GPL協議),任何人都可以自由使用,但必須嚴格遵守LGPL/GPL協議。目前有很多播放軟體都使用了FFmpeg的程式碼,但它們並沒有遵守LGPL/GPL協議,沒有公開任何原始碼。我們應該對這種侵權行為表示恥辱。 2009年加入FFmpeg的播放軟體暴風影音、QQ影音、KMP、GOM PlayerPotPlayer(2010)都在其列。 2009年2月,韓國名軟KMPlayer被FFmpeg開源專案發現使用了它們的程式碼和二進位制檔案,但是沒有按照規定/慣例開放相應說明/原始碼。因此被人舉報,進入了FFmpeg官網上的恥辱黑名單。 2009年5月,網友cehoyos下載了暴風影音軟體,解壓之後發現其安裝程式內包含了大量的開源和私有解碼器:avcodec,avformat,avutil,x264,xvid,bass,wmvdmod等,之後暴風影音被正式加入到FFmpeg恥辱名單。 2009年11月,網友roo_zhou向FFmpeg舉報,指出QQ影音的credit只給出了修改的FFmpeg原始碼下載,聲稱是LGPL許可證。但實際是修改過的ffdshow,採用的是GPL許可證,之後QQ影音被正式加入到FFmpeg恥辱名單之列。 FFmpeg官網恥辱柱已經暫停,其繼任者Libav官網上依然在更新恥辱柱。

版本釋出

2012年01月27日,FFmpeg 0.9.1 釋出,修復了很多 bug 和安全方面的補丁,包括: CVE-2011-3893 and CVE-2011-3895,同時顯著提升對 H.264 的檢索支援。[3] 2012年01月29日,FFmpeg 0.10 釋出,這是一個主要的發行版本,包含大量的新特性和bug修復。[4]  2012年04月07日,FFmpeg 0.10.1 釋出,FFmpeg 0.10.1 修復了很多安全漏洞,超過 100 個 bug 修復,新增 swapuv 過濾器。[5] 2012年05月07,FFmpeg 0.10.3 釋出,該版本修復了 4xm 分路器、cook 解碼器、mm 分路器、mpeg 視訊解碼器、vqavideo 解碼器、xmv 分路器的安全問題,以及包含一些重要的 bug 修復。[6] 2012年06月09日,FFmpeg 0.11.1 釋出,該版本修復了 70 個 bug,其中有一些安全方面的問題。[