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

Quick Facts 原作者, 開發者 ...
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 編輯維基數據連結
Close

這個專案最初是由法國程式設計師法布里斯·貝拉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專案原生的編碼器:

  • Snow
  • FFV1英語FFV1

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]

參考資料

參見

外部連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.