ffmpeg

ffmpeg

FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,並能將其轉化為流的開源電腦程式。採用LGPL或GPL許可證。它提供了錄製、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec里很多code都是從頭開發的。 FFmpeg在Linux平台下開發,但它同樣也可以在其它作業系統環境中編譯運行,包括Windows、Mac OS X等。這個項目最早由Fabrice Bellard發起,2004年至2015年間由Michael Niedermayer主要負責維護。許多FFmpeg的開發人員都來自MPlayer項目,而且當前FFmpeg也是放在MPlayer項目組的伺服器上。項目的名稱來自MPEG視頻編碼標準,前面的"FF"代表"Fast Forward"。

基本信息

功能

多媒體視頻處理工具FFmpeg有非常強大的功能包括視頻採集功能、視頻格式轉換、視頻抓圖、給視頻加水印等。

視頻採集功能

FFmpeg's Logo FFmpeg's Logo

ffmpeg視頻採集功能非常強大,不僅可以採集視頻採集卡或USB攝像頭的圖像,還可以進行螢幕錄製,同時還支持以RTP方式將視頻流傳送給支持RTSP的流媒體伺服器,支持直播套用。

ffmpeg在Linux下的視頻採集

在Linux平台上,ffmpeg對V4L2的視頻設備提供了很好的支持,如:

FFMpeg FFMpeg

./ffmpeg -t 10 -f video4linux2 -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 命令集舉例

1.獲取視頻的信息

ffmpeg -i video.avi

2.將圖片序列合成視頻

ffmpeg -f image2 -i image%d.jpg video.mpg

上面的命令會把當前目錄下的圖片(名字如:image1.jpg. image2.jpg. 等...)合併成video.mpg

3.將視頻分解成圖片序列

ffmpeg -i video.mpg image%d.jpg

上面的命令會生成image1.jpg. image2.jpg. ...

支持的圖片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI

4.為視頻重新編碼以適合在iPod/iPhone上播放

ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4

說明:

* 源視頻:source_video.avi

* 音頻編碼:aac

* 音頻位率:128kb/s

* 視頻編碼:mpeg4

* 視頻位率:1200kb/s

* 視頻尺寸:320 X 180

* 生成的視頻:final_video.mp4

5.為視頻重新編碼以適合在PSP上播放

ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4

說明:

* 源視頻:source_video.avi

* 音頻編碼:aac

* 音頻位率:32kb/s

* 視頻編碼:xvid

* 視頻位率:1200kb/s

* 視頻尺寸:320 X 180

* 生成的視頻:final_video.mp4

6.從視頻抽出聲音.並存為Mp3

ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3

說明:

* 源視頻:source_video.avi

* 音頻位率:192kb/s

* 輸出格式:mp3

* 生成的聲音:sound.mp3

7.將wav檔案轉成Mp3

ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3

8.將.avi視頻轉成.mpg

ffmpeg -i video_origine.avi video_finale.mpg

9.將.mpg轉成.avi

ffmpeg -i video_origine.mpg video_finale.avi

10.將.avi轉成gif動畫(未壓縮)

ffmpeg -i video_origine.avi gif_anime.gif

11.合成視頻和音頻

ffmpeg -i son.wav -i video_origine.avi video_finale.mpg

12.將.avi轉成.flv

ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv

13.將.avi轉成dv

ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv

或者:

ffmpeg -i video_origine.avi -target pal-dv video_finale.dv

14.將.avi壓縮成divx

ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi

15.將Ogg Theora壓縮成Mpeg dvd

ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_terminate.mpg

16.將.avi壓縮成SVCD mpeg2

NTSC格式:

ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg

PAL格式:

ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg

17.將.avi壓縮成VCD mpeg2

NTSC格式:

ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg

PAL格式:

ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg

18.多通道編碼

ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2

19.從flv提取mp3

ffmpeg -i source.flv -ab 128k dest.mp3

格式

支持的編碼

源自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/VFW的ffdshow(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年7月22日,陳俊豪(格式工廠作者)因用到了ffmpeg和RMVB的編碼庫,用到了FFmpeg的解碼/編碼算法,違反FFmpeg的LGPL協定,登上了2009年7月22日FFmpeg的“恥辱柱”上。

2009年11月,網友roo_zhou向FFmpeg舉報,指出QQ影音的credit只給出了修改的FFmpeg源碼下載,聲稱是LGPL許可證。但實際是修改過的ffdshow,採用的是GPL許可證,之後QQ影音被正式加入到FFmpeg恥辱名單之列。

Libav項目啟動之後,FFmpeg官方版本也仍然在一直維護中。FFmpeg與libav屬於獨立的兩個項目。

版本發布

2014-12-5, FFmpeg2.5發布

2014-09-15, FFmpeg2.4發布

2013-07-10, FFmpeg2.2發布

2012年01月27日,FFmpeg 0.9.1 發布,修復了很多 bug 和安全方面的補丁,包括: CVE-2011-3893 and CVE-2011-3895,同時顯著提升對 H.264 的檢索支持。

2012年01月29日,FFmpeg 0.10 發布,這是一個主要的發行版本,包含大量的新特性和bug修復。

2012年04月07日,FFmpeg 0.10.1 發布,FFmpeg 0.10.1 修復了很多安全漏洞,超過 100 個 bug 修復,新增 swapuv 過濾器。

2012年05月07,FFmpeg 0.10.3 發布,該版本修復了 4xm 分路器、cook 解碼器、mm 分路器、mpeg 視頻解碼器、vqavideo 解碼器、xmv 分路器的安全問題,以及包含一些重要的 bug 修復。

2012年06月09日,FFmpeg 0.11.1 發布,該版本修復了 70 個 bug,其中有一些安全方面的問題。

相關詞條

相關搜尋

熱門詞條

聯絡我們