FFmpeg

维基百科,自由的百科全书
(重定向自Libav
跳转至: 导航搜索
Libav / FFmpeg
FFmpeg Logo new.svg
FFmpeg.png
FFmpeg
開發者 Libav / FFmpeg team
穩定版本 1.2.1/
2013年5月10日;12天前 (2013-05-10)
程式語言 C語言
作業系統 跨平台
平台 多平台
開發狀態 開發中
類型 多媒體
許可協議 GNU Lesser General Public License
網站 http://libav.org
http://ffmpeg.org/

FFmpeg是一個自由軟體,可以執行音訊和視訊多種格式的錄影、轉檔、串流功能[1],包含了libavcodec ─這是一個用於多個專案中音訊和視訊的解碼器函式庫,以及 libavformat ——一個音訊與視訊格式轉換函式庫。

"FFmpeg"这个单词中的 "FF" 指的是 "Fast Forward"[2]。有些新手写信给"FFmpeg"的项目负责人,询问FF是不是代表“Fast Free”或者“Fast Fourier”等意思,"FFmpeg"的项目负责人回信说“Just for the record, the original meaning of "FF" in FFmpeg is "Fast Forward"...”

这个项目最初是由Fabrice Bellard发起的,而现在是由Michael Niedermayer在进行维护。许多FFmpeg的开发者同时也是MPlayer项目的成员,FFmpeg在MPlayer项目中是被设计为服务器版本进行开发。

2011年3月13日,FFmpeg 部分開發人士決定另組 libav,网址 http://libav.org ,同时制定了一套关于项目继续发展和维护的规则。[3][4]

目录

組成元件 [编辑]

此計劃由幾個元件組成:

  • ffmpeg 是一個命令列工具,用來對視訊檔案轉換格式,也支援對電視卡即時編碼
  • ffserver 是一個 HTTP 多媒體即時廣播串流伺服器,支援時光平移
  • ffplay 是一個簡單的播放器,基於 SDL 與 FFmpeg 函式庫
  • libavcodec 包含了全部 FFmpeg 音訊/視訊 編解碼函式庫
  • libavformat 包含 demuxers 和 muxer 函式庫
  • libavutil 包含一些工具函式庫
  • libpostproc 對於視訊做前處理的函式庫
  • libswscale 對於影像作縮放的函式庫

參數 [编辑]

FFmpeg可使用眾多參數,參數內容會根據ffmpeg版本而有差異,使用前建議先參考參數及編解碼器的敘述。此外,參數明細可用 ffmpeg -h 顯示;編解碼器名稱等明細可用 ffmpeg -formats 顯示。

下列為較常使用的參數。

主要參數 [编辑]

  • -i 設定輸入檔名。
  • -f 設定輸出格式。
  • -y 若輸出檔案已存在時則覆蓋檔案。
  • -fs 超過指定的檔案大小時則結束轉換。
  • -ss 從指定時間開始轉換。
  • -title 設定標題。
  • -timestamp 設定時間戳。
  • -vsync 增減Frame使影音同步。

影像參數 [编辑]

  • -b 設定影像流量,預設為200Kbit/秒。( 單位請參照下方注意事項
  • -r 設定FrameRate值,預設為25。
  • -s 設定畫面的寬與高。
  • -aspect 設定畫面的比例。
  • -vn 不處理影像,於僅針對聲音做處理時使用。
  • -vcodec 設定影像影像編解碼器,未設定時則使用與輸入檔案相同之編解碼器。

聲音參數 [编辑]

  • -ab 設定每Channel(最近的SVN版為所有Channel的總合)的流量。( 單位請參照下方注意事項
  • -ar 設定採樣率。
  • -ac 設定聲音的Channel數。
  • -acodec 設定聲音編解碼器,未設定時與影像相同,使用與輸入檔案相同之編解碼器。
  • -an 不處理聲音,於僅針對影像做處理時使用。
  • -vol 設定音量大小,256為標準音量。(要設定成兩倍音量時則輸入512,依此類推。)

注意事項 [编辑]

  • 以-b及ab參數設定流量時,根據使用的ffmpeg版本,須注意單位會有kbits/sec與bits/sec的不同。(可用ffmpeg -h顯示說明來確認單位。)
例如,單位為bits/sec的情況時,欲指定流量64kbps時需輸入『 -ab 64k 』;單位為kbits/sec的情況時則需輸入『 -ab 64 』。
  • 以-acodec及-vcodec所指定的編解碼器名稱,會根據使用的ffmpeg版本而有所不同。例如使用AAC編解碼器時,會有輸入aac與libfaac的情況。此外,編解碼器有分為僅供解碼時使用與僅供編碼時使用,因此一定要利用ffmpeg -formats確認輸入的編解碼器是否能運作。

範例 [编辑]

  • 將MPEG-1影片轉換成MPEG-4格式之範例
ffmpeg -i inputfile.mpg -f mp4 -acodec libfaac -vcodec mpeg4 -b 256k -ab 64k outputfile.mp4
  • 將MP3聲音轉換成MPEG-4格式之範例
ffmpeg -i inputfile.mp3 -f mp4 -acodec libaac -vn -ab 64k outputfile.mp4
  • 將DVD的VOB檔轉換成VideoCD格式的MPEG-1檔之範例
ffmpeg -i inputfile.vob -f mpeg -acodec mp2 -vcodec mpeg1video -s 352x240 -b 1152k -ab 128k outputfile.mpg
  • 將AVI影片轉換成H.264格式的M4V檔之範例
ffmpeg -i inputfile.avi -f mp4 -acodec libfaac -vcodec libx264 -b 512k -ab 320k outputfile.m4v
  • 將任何影片轉換成東芝REGZA可辨識的MPEG2格式之範例
ffmpeg -i inputfile -target ntsc-svcd -ab 128k -aspect 4:3 -s 720x480 outputfile.mpg
  • 連接複數的AVI影片檔之範例(在此範例中須一度暫時將AVI檔轉換成MPEG-1檔(MPEG-1, MPEG-2 PS, DV格式亦可連接))
ffmpeg -i input1.avi -sameq inputfile_01.mpg
ffmpeg -i input2.avi -sameq inputfile_02.mpg
cat inputfile_01.mpg inputfile_02.mpg > inputfile_all.mpg
ffmpeg -i inputfile_all.mpg -sameq outputfile.avi

支援的编码器、格式和协议 [编辑]

编码器 [编辑]

更多資料:libavcodec

FFmpeg项目原生的编码器:

FFmpeg已实现的:

The default MPEG-4 codec used by FFmpeg for encoding has the FourCC of FMP4.

格式 [编辑]

协议 [编辑]

  • IETF 标准: TCP, UDP, Gopher, HTTP, RTP, RTSPSDP
  • 苹果公司的相关标准: HTTP Live Streaming
  • RealMedia 的相关标准: RealMedia RTSP/RDT
  • Adobe 的相关标准: RTMP, RTMPT (由librtmp实现), RTMPE (由librtmp实现), RTMPTE (由librtmp) 和 RTMPS (由librtmp实现)
  • 微软的相关标准: MMS 在 TCP 上和 MMS 在 HTTP上

社區內部問題 [编辑]

2011年1月19日,FFmpeg 的现任维护者 Michael Niedermayer 在邮件列表上披露,FFmpeg 发生了“政变”,一些开发者占领了官方网站,关闭了其他人的寫入權限。随后政变者宣布 FFmpeg “建立新政权”,维护任务将由他们接手,宣称只有维护团队才能拥有主源码库的寫入權限。

“新内阁”成员之一的 Diego Biurrun 解释了他们的行动,称“政變”是迫不得已,表示他们原本想联络每一个開發者,但沒成功,因为不是每个人都在IRC上,或者能及时回电话邮件短信。“革命”的原因是为了统一,FFmpeg 社区分裂的情况严重到他们已经看不下去了。他们期望FFmpeg项目能建立一个健康而友好的开发环境。[13]

隨後 Fabrice Bellard 等人於 2011 年 3 月 13 日跳出去開新專案,稱作 Libav ,Libav 裡面每位成員的管理權限縮更小(至少不能任意關閉其他人更改程式碼權限)。事實上目前 FFmpeg 儼然成空殼,因為大部分新程式碼都是在 Libav 出來較多,FFmpeg 僅剩少數人在維護[來源請求]。而 Debian 血統也響應,宣布 2012 年要將 ffmpeg 指令改成 avconv。

Libav 跳槽之後有一定程度上更改 FFmpeg 的指令,詳細請參考 http://libav.org/ 下方日誌 August 09 2011 段。

Libav/FFmpeg版权 [编辑]

由于Libav、FFmpeg是在LGPLGPL协议下发布的(如果使用了其中一些使用GPL协议发布的模块则必须使用GPL协议),任何人都可以自由使用,但必须严格遵守LGPL、GPL协议。目前有很多播放软件都使用了Libav、FFmpeg的代码,但它们并没有遵守LGPL,GPL协议,没有公开任何源代码。Libav、FFmpeg 社區便將這些違反協議的公司、組織、個人的網址貼上“恥辱大廳”(又叫“恥辱柱”)上,并與這些公司/組織/個人商討如何解決版權爭議。[14]

注釋 [编辑]

  1. ^ FFmpeg Documentation
  2. ^ Bellard, Fabrice. FFmpeg naming and logo. FFmpeg developer mailing list. Mplayer website. 18 February 2006 [2007-03-29]. 
  3. ^ 红薯. FFmpeg 项目改名为 libav. 开源中国社区. March 15, 2011 [June 14, 2011]. 
  4. ^ libav官方网站. [June 14, 2011]. 
  5. ^ 5.0 5.1 5.2 5.3 5.4 5.5 5.6 banan. Changelog. FFmpeg trunk SVN. FFmpeg website. 17 April 2007 [26 April 2007]. 
  6. ^ 6.0 6.1 ivo. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 7 May 2007 [24 December 2010]. 
  7. ^ vitor. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 13 April 2008 [14 April 2008]. 
  8. ^ vitor. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 30 March 2008 [30 March 2008]. 
  9. ^ faust3. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 21 March 2008 [21 March 2008]. 
  10. ^ benoit. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 14 April 2008 [14 April 2008]. 
  11. ^ ramiro. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 18 March 2008 [18 March 2008]. 
  12. ^ banan. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 8 June 2008 [8 June 2008]. 
  13. ^ FFmpeg發生政變-中國開源社區
  14. ^ FFmpeg开发者接受采访 - 开源中国社区

外部連結 [编辑]