功能
多媒體視頻處理工具FFmpeg有非常強大的功能包括視頻採集功能、視頻格式轉換、視頻抓圖、給視頻加水印等。
視頻採集功能
ffmpeg視頻採集功能非常強大,不僅可以採集視頻採集卡或USB攝像頭的圖像,還可以進行螢幕錄製,同時還支持以RTP方式將視頻流傳送給支持RTSP的流媒體伺服器,支持直播套用。
ffmpeg在Linux下的視頻採集
在Linux平台上,ffmpeg對V4L2的視頻設備提供了很好的支持,如:
./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 Player、 PotPlayer(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,其中有一些安全方面的問題。