FFmpeg

多媒體框架
(重定向自Libav

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

FFmpeg
FFmpeg執行影片檔轉檔時的畫面
FFmpeg執行影片檔轉檔時的畫面
原作者Fabrice Bellard
開發者FFmpeg team
首次发布2000年12月20日[1]在维基数据编辑,23年前
当前版本
  • 7.1(2024年9月30日;穩定版本)[2]
編輯維基數據鏈接
源代码库 編輯維基數據鏈接
编程语言C
[3]汇编语言
[4]C++[4]在维基数据编辑
操作系统GNU/Linux
macOS
Microsoft Windows
Android
[5]伯克利軟件套件作業系統在维基数据编辑
平台x86
ARM架構
PowerPC
MIPS
DEC Alpha
SPARC在维基数据编辑
类型多媒体框架在维基数据编辑
许可协议
  • GNU宽通用公共许可证2.1或更高版本
編輯維基數據鏈接
网站ffmpeg.org 編輯維基數據鏈接

这个项目最初是由法國程式設計師法布里斯·贝拉Fabrice Bellard)发起的,而现在是由米夏埃尔·尼德迈尔(Michael Niedermayer)在进行维护。许多FFmpeg的开发者同时也是MPlayer项目的成员,FFmpeg在MPlayer项目中是被设计为服务器版本进行开发。

历史

该项目由法布里斯·贝拉[7](Fabrice Bellard,使用化名“Gérard Lantau”)于2000年启动,并由米夏埃尔·尼德迈尔(Michael Niedermayer)从2004年领导,直到2015年辞职。[8]一些FFmpeg的开发者也参与了MPlayer项目。

该项目的名称灵感来源于MPEG视频标准组织,其中“FF”代表“快进”(fast forward),因此FFmpeg代表“快进动态图像专家组”。[9]其标志是一个之字形扫描图案,显示了MPEG视频编解码器如何处理熵编码[10]

2011年3月13日,一组FFmpeg开发者决定将该项目分支,命名为Libav[11][12][13][14]此事件与项目管理中的问题有关,开发者们对FFmpeg的领导层存在分歧。[15][16][17]

2014年1月10日,两名谷歌员工宣布,在过去两年中,通过模糊测试已修复了FFmpeg中的1000多个漏洞。[18]

2018年1月,FFmpeg的一个长期组件ffserver命令行程序被移除。[19]开发者此前已经废弃了该程序,原因是由于其使用了内部应用程序接口,导致维护工作量大。[20]

该项目平均每三个月发布一次新版本。尽管可以从网站上下载发布版本,但FFmpeg开发者建议用户使用他们源代码Git版本控制系统中的最新构建来编译软件。

编解码器历史

到目前为止,FFmpeg项目已创建了两种视频编码格式及其对应的编解码器,并且有一种容器格式。这两种视频编解码器是无损的FFV1英语FFV1和既有无损又有损的Snow编解码器。Snow的开发已经停滞,其比特流格式尚未最终确定,因此自2011年以来一直处于实验阶段。名为NUT的多媒体容器格式不再积极开发,但仍在维护中。[21]

2010年夏天,FFmpeg开发者Fiona Glaser、Ronald Bultje和David Conrad宣布了ffvp8解码器。经测试发现,ffvp8的速度比谷歌自己的libvpx英语Libvpx解码器更快。[22][23]从0.6版本开始,FFmpeg还支持WebMVP8[24]

2013年10月,FFmpeg添加了本地VP9解码器[25]和OpenHEVC,一个开源的高效率视频编码(HEVC)解码器。[26]2016年,本地AAC编码器被认为是稳定的,因此移除了对VisualOn英语VisualOn自由高级音频编码英语FAAC的两个外部AAC编码器的支持。FFmpeg 3.0保留了对Fraunhofer FDK AAC英语Fraunhofer FDK AAC编码器的构建支持。[27]从3.4版本开始,FFmpeg支持FITS图像格式。[28]从2018年11月的4.1版本开始,AV1可以在MP4Matroska(包括WebM)中复用。[29][30]

組成元件

此計劃由幾個元件組成:

  • 命令列應用程式
    • ffmpeg:用於對視訊檔案或音訊檔案轉換格式
    • ffplay:一個簡單的播放器,基於SDL與FFmpeg函式庫
    • ffprobe:用於顯示媒體檔案的資訊,見MediaInfo
  • 函數庫
    • libswresample
    • libavresample
    • libavcodec:包含全部FFmpeg音訊/視訊編解碼函式庫
    • libavformat:包含demuxers和muxer函式庫
    • libavutil:包含一些工具函式庫
    • libpostproc:對於視訊做前處理的函式庫
    • libswscale:對於影像作縮放的函式庫
    • libavfilter

參數

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

下列為較常使用的參數:

主要參數

  • -i——設定輸入檔名。
  • -f——設定輸出格式。
  • -y——若輸出檔案已存在時則覆蓋檔案。
  • -fs——超過指定的檔案大小時則結束轉換。
  • -t——指定输出文件的持续时间,以秒为单位。
  • -ss——從指定時間開始轉換,以秒为单位。
  • -ss-t一起使用時代表從-ss的時間開始轉換持續時間為-t的影片,例如:-ss 00:00:01.00 -t 00:00:10.00即從00:00:01.00開始轉換到00:00:11.00
  • -title——設定標題。
  • -timestamp——設定時間戳。
  • -vsync——增減Frame使影音同步。
  • -c——指定输出文件的编码。
  • -metadata——更改输出文件的元数据
  • -help——查看帮助信息。

影像參數

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

聲音參數

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

注意事項

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

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

编码器

FFmpeg项目原生的编码器:

FFmpeg已实现的:

The default MPEG-4 codec used by FFmpegs 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项目能建立一个健康而友好的开发环境。[41]

隨後Fabrice Bellard等人於2011年3月13日跳出去開新專案,稱作Libav,Libav裡面每位成員的管理權限縮更小(至少不能任意關閉其他人更改程式碼權限)。而Debian血統也響應,宣布2012年要將ffmpeg指令改成avconv[42]

Libav跳槽之後有一定程度上更改FFmpeg的指令[43]

Libav/FFmpeg版权

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

參考資料

  1. ^ Initial revision. 
  2. ^ FFmpeg 7.1 "Péter". 2024年9月30日 [2024年9月30日]. 
  3. ^ The ffmpeg Open Source Project on Open Hub: Languages Page. Open Hub. [2018年7月14日]. 
  4. ^ 4.0 4.1 The ffmpeg Open Source Project on Open Hub: Languages Page. [2019年1月8日]. 
  5. ^ FFmpeg Media Encoder. 
  6. ^ FFmpeg Documentation. [2009-08-26]. (原始内容存档于2010-09-18). 
  7. ^ Niedermayer, Michael. [FFmpeg-devel] FFmpegs future and resigning as leader. 31 July 2015 [2015-09-22]. (原始内容存档于2015-08-15). 
  8. ^ Bellard, Fabrice. FFmpeg naming and logo. FFmpeg developer mailing list. 2006-02-18 [2011-12-24]. (原始内容存档于2012-04-26) (英语). 
  9. ^ Carlsen, Steve. TIFF 6.0 specification (PS). Aldus Corporation: 98. 1992-06-03 [2016-08-14]. Zig-Zag Scan [失效連結] Alt URL 互联网档案馆存檔,存档日期2012-07-03.
  10. ^ Libav project site, [2012-01-04], (原始内容存档于2012-01-03) 
  11. ^ Ronald S. Bultje, Project renamed to Libav, 2011-03-14 [2012-01-04], (原始内容存档于2016-11-07) 
  12. ^ A group of FFmpeg developers just forked as Libav, Phoronix, 2011-03-14 [2012-01-04], (原始内容存档于2011-09-15) 
  13. ^ 红薯. FFmpeg项目改名为libav. 开源中国社区. 2011-03-15 [2011-06-14]. (原始内容存档于2011-09-03). 
  14. ^ What happened to FFmpeg, 2011-03-30 [2012-05-19], (原始内容存档于2018-09-02) 
  15. ^ FFMpeg turmoil, 2011-01-19 [2012-01-04], (原始内容存档于2012-01-12) 
  16. ^ The FFmpeg/Libav situation. blog.pkh.me. [2015-09-22]. (原始内容存档于2012-07-01). 
  17. ^ FFmpeg and a thousand fixes. googleblog.com. January 10, 2014 [21 October 2016]. (原始内容存档于22 October 2016). 
  18. ^ ffserver – FFmpeg. trac.ffmpeg.org. [2018-02-03]. (原始内容存档于2018-02-04). 
  19. ^ ffserver program being dropped. ffmpeg.org. 2016-07-10 [2018-02-03]. (原始内容存档于2016-07-16) (英语). 
  20. ^ NUT. Multimedia Wiki. 2012 [2014-01-03]. (原始内容存档于2014-01-03). 
  21. ^ Glaser, Fiona, Diary Of An x264 Developer: Announcing the world's fastest VP8 decoder, 2010-07-23 [2012-01-04], (原始内容存档于2010-09-30) 
  22. ^ FFmpeg Announces High-Performance VP8 Decoder, Slashdot, 2010-07-24 [2012-01-04], (原始内容存档于2011-12-21) 
  23. ^ FFmpeg Goes WebM, Enabling VP8 for Boxee & Co. newteevee.com. 2010-06-17 [2012-01-04]. (原始内容存档于2010-06-20). ...with VLC, Boxee, MythTV, Handbrake and MPlayer being some of the more popular projects utilizing FFmpeg... 
  24. ^ Native VP9 decoder is now in the Git master branch. Launchpad. 2013-10-03 [2013-10-21]. (原始内容存档于2013-10-22). 
  25. ^ FFmpeg Now Features Native HEVC/H.265 Decoder Support. Softpedia. 2013-10-16 [2013-10-16]. (原始内容存档于2014-06-15). 
  26. ^ FFmpeg. February 15th, 2016, FFmpeg 3.0 "Einstein". 2016-02-15 [2016-04-02]. (原始内容存档于2016-07-16). 
  27. ^ FFmpeg. October 15th, 2017, FFmpeg 3.4 "Cantor". 2017-10-15 [2019-05-10]. (原始内容存档于2016-07-16). 
  28. ^ FFmpeg. November 6th, 2018, FFmpeg 4.1 "al-Khwarizmi". 2018-11-06 [2019-05-10]. (原始内容存档于2016-07-16). 
  29. ^ Jan Ozer. Good News: AV1 Encoding Times Drop to Near-Reasonable Levels. StreamingMedia.com. 2019-03-04 [2019-05-10]. (原始内容存档于2021-05-14). 
  30. ^ 31.0 31.1 31.2 31.3 31.4 31.5 31.6 banan. Changelog. FFmpeg trunk SVN. FFmpeg website. 17 April 2007 [26 April 2007]. [永久失效連結]
  31. ^ 32.0 32.1 ivo. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 2007-05-07 [2010-12-24]. (原始内容存档于2007-08-11). 
  32. ^ vitor. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 13 April 2008 [14 April 2008]. [永久失效連結]
  33. ^ vitor. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 30 March 2008 [30 March 2008]. [永久失效連結]
  34. ^ benoit. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 14 April 2008 [14 April 2008]. [永久失效連結]
  35. ^ Michael Niedermayer, Timothy Gu. RELEASE NOTES for FFmpeg 2.5 "Bohr". VideoLAN. 2014-12-05 [2014-12-05]. (原始内容存档于2014-12-08). 
  36. ^ ramiro. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 18 March 2008 [18 March 2008]. (原始内容存档于2008年8月17日). 
  37. ^ NUT. Multimedia Wiki. 2012 [2014-01-03]. (原始内容存档于2014-01-03). 
  38. ^ banan. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 8 June 2008 [8 June 2008]. (原始内容存档于2009年1月14日). 
  39. ^ faust3. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 21 March 2008 [21 March 2008]. (原始内容存档于2008年4月25日). 
  40. ^ blackhat. FFmpeg發生政變. Solidot. 2011-01-20 [2021-10-15]. (原始内容存档于2018-12-18). 
  41. ^ Debian Bug Tracker. [2014-02-04]. (原始内容存档于2015-02-11). 
  42. ^ News. libav.org. [2014-09-08]. (原始内容存档于2014-09-08). 
  43. ^ FFmpeg开发者接受采访 - 开源中国社区. [2011-03-05]. (原始内容存档于2011-03-19). 

参见

外部連結