FFmpeg
Template:Expand language Template:NoteTA 腳本錯誤:沒有「Infobox」這個模塊。腳本錯誤:沒有「Check for unknown parameters」這個模塊。 FFmpeg 是一個開放原始碼的自由軟件,可以執行音訊和視訊多種格式的錄影、轉檔、串流功能[1],包含了libavcodec——這是一個用於多個專案中音訊和視訊的解碼器函式庫,以及libavformat——一個音訊與視訊格式轉換函式庫。
這個項目最初是由法國程式設計師法布里斯·貝拉(腳本錯誤:沒有「Lang」這個模塊。)發起的,而現在是由米夏埃爾·尼德邁爾(Michael Niedermayer)在進行維護。許多FFmpeg的開發者同時也是MPlayer項目的成員,FFmpeg在MPlayer項目中是被設計為伺服器版本進行開發。
歷史[編輯]
該項目由法布里斯·貝拉[2](Fabrice Bellard,使用化名「Gérard Lantau」)於2000年啟動,並由米夏埃爾·尼德邁爾(Michael Niedermayer)從2004年領導,直到2015年辭職。[3]一些FFmpeg的開發者也參與了MPlayer項目。
該項目的名稱靈感來源於MPEG視頻標準組織,其中「FF」代表「快進」(fast forward),因此FFmpeg代表「快進動態圖像專家組」。[4]其標誌是一個之字形掃描圖案,顯示了MPEG視頻編解碼器如何處理熵編碼。[5]
2011年3月13日,一組FFmpeg開發者決定將該項目分支,命名為腳本錯誤:沒有「ilh」這個模塊。。[6][7][8][9]此事件與項目管理中的問題有關,開發者們對FFmpeg的領導層存在分歧。[10][11][12]
2014年1月10日,兩名谷歌員工宣佈,在過去兩年中,通過模糊測試已修復了FFmpeg中的1000多個漏洞。[13]
2018年1月,FFmpeg的一個長期組件ffserver命令行程序被移除。[14]開發者此前已經廢棄了該程序,原因是由於其使用了內部應用程式接口,導致維護工作量大。[15]
該項目平均每三個月發佈一次新版本。儘管可以從網站上下載發佈版本,但FFmpeg開發者建議用戶使用他們原始碼Git版本控制系統中的最新構建來編譯軟件。
編解碼器歷史[編輯]
到目前為止,FFmpeg項目已創建了兩種視頻編碼格式及其對應的編解碼器,並且有一種容器格式。這兩種視頻編解碼器是無損的腳本錯誤:沒有「ilh」這個模塊。和既有無損又有損的Snow編解碼器。Snow的開發已經停滯,其比特流格式尚未最終確定,因此自2011年以來一直處於實驗階段。名為NUT的多媒體容器格式不再積極開發,但仍在維護中。[16]
2010年夏天,FFmpeg開發者Fiona Glaser、Ronald Bultje和David Conrad宣佈了ffvp8解碼器。經測試發現,ffvp8的速度比谷歌自己的腳本錯誤:沒有「ilh」這個模塊。解碼器更快。[17][18]從0.6版本開始,FFmpeg還支持WebM和VP8。[19]
2013年10月,FFmpeg添加了本地VP9解碼器[20]和OpenHEVC,一個開源的高效率視頻編碼(HEVC)解碼器。[21]2016年,本地AAC編碼器被認為是穩定的,因此移除了對腳本錯誤:沒有「ilh」這個模塊。和腳本錯誤:沒有「ilh」這個模塊。的兩個外部AAC編碼器的支持。FFmpeg 3.0保留了對腳本錯誤:沒有「ilh」這個模塊。編碼器的構建支持。[22]從3.4版本開始,FFmpeg支持FITS圖像格式。[23]從2018年11月的4.1版本開始,AV1可以在MP4和Matroska(包括WebM)中復用。[24][25]
組成元件[編輯]
此計劃由幾個元件組成:
- 命令列應用程式
- 函數庫
- 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確認輸入的編解碼器是否能運作。
支援的編碼器、格式和協議[編輯]
編碼器[編輯]
腳本錯誤:沒有「labelled list hatnote」這個模塊。 FFmpeg項目原生的編碼器:
- Snow
- 腳本錯誤:沒有「ilh」這個模塊。
FFmpeg已實現的:
- ITU-T視頻標準:H.261,[26] H.262/MPEG-2 Part 2, H.263[26]和H.264/MPEG-4 AVC[26]
- ITU-T音頻編解碼器標準:G.711 µ-law, G.711 A-law, G.721(也叫G.726 32k), G.722, G.722.2(也叫AMR-WB), G.723(也叫G.726 24k和40k)和G.726
- ISO/IEC MPEG視頻標準:MPEG-1 Part 2, H.262/MPEG-2 Part 2, MPEG-4 Part 2和H.264/MPEG-4 AVC
- ISO/IEC MPEG音頻標準:MP1, MP2, MP3, AAC, HE-AAC和MPEG-4 ALS
- ISO/IEC/ITU-T JPEG圖像標準:JPEG和JPEG-LS
- SMPTE視頻標準:VC-1(也稱作WMV3), VC-3(也稱作AVID DNxHD)和DPX圖像
- SMPTE音頻標準:SMPTE 302M
- DVD論壇的相關標準 / 杜比實驗室的音頻編解碼器:MLP(也稱TrueHD)和AC-3
- 3GPP音頻編碼器標準:AMR-NB, AMR-WB(也叫G.722.2)
- GSM相關的語音信號編解碼器:Full Rate
- Windows Media Player相關的視頻編解碼器:Microsoft RLE, Microsoft Video 1, Cinepak, Indeo 2, 3和5,[26] Motion JPEG, Microsoft MPEG-4 v1, v2和v3, WMV1, WMV2 and WMV3(也稱VC-1)
- Windows Media Player相關的音頻編解碼器:WMA1, WMA2和WMA Pro
- Windows Media Player相關的語音信號編解碼器:WMA Voice和MS-GSM
- RealPlayer相關的視頻編解碼器:RealVideo 1, 2, 3和4
- RealPlayer相關的音頻編解碼器:RealAudio 3, 6, 7, 8, 9和10
- RealPlayer相關的語音信號編解碼器:RealAudio 1, 2 (G.728的衍生), 4和5
- QuickTime相關的視頻編解碼器:Cinepak, Motion JPEG和Sorenson 3 Codec
- QuickTime相關的音頻編解碼器:QDesign音樂編解碼器2和ALAC
- Adobe Flash Player相關的視頻編解碼器:Sorenson 3 Codec, VP6和Flash Video (FLV)
- Adobe Flash Player相關的音頻編解碼器:Adobe SWF ADPCM和Nellymoser Asao
- Xiph.Org: Theora, Speex(通過libspeex實現), Vorbis和FLAC
- Sony: ATRAC1和ATRAC3[26]
- NTT: TwinVQ
- On2: Duck TrueMotion 1, Duck TrueMotion 2, VP3, VP5,[26] VP6[26]和VP8
- RAD Game Tools: Smacker video和Bink video
- Truespeech
- RenderWare: TXD[27]
The default MPEG-4 codec used by FFmpegs the FourCC of FMP4.
輸出格式[編輯]
- AIFF
- ASF
- AVI
- AVIF
- BFI[28]
- CAF
- FLV
- GIF
- GXF, General eXchange Format, SMPTE 360M
- HLS, HTTP Live Streaming
- IFF[29]
- ISO base media file format(包括QuickTime, 3GP和MP4)
- M2V
- Matroska(包括WebM)
- Maxis XA[30]
- MPEG-DASH[31]
- MPEG program stream
- MPEG transport stream(包括 AVCHD)
- MXF, Material eXchange Format, SMPTE 377M
- MSN Webcam stream[32]
- 腳本錯誤:沒有「anchor」這個模塊。NUT[33]
- Ogg
- OMA[34]
- RL2[35]
- Segment, for creating segmented video streams
- Smooth Streaming
- TXD[27]
- WTV
協議[編輯]
- IETF標準:TCP, UDP, Gopher, HTTP, RTP, RTSP和SDP
- 蘋果公司的相關標準: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項目能建立一個健康而友好的開發環境。[36]
隨後Fabrice Bellard等人於2011年3月13日跳出去開新專案,稱作Libav,Libav裏面每位成員的管理權限縮更小(至少不能任意關閉其他人更改程式碼權限)。而Debian也響應,宣佈2012年要將ffmpeg指令改成avconv[37]。
Libav跳槽之後有一定程度上更改FFmpeg的指令[38]。
Libav/FFmpeg版權[編輯]
由於Libav、FFmpeg是在LGPL、GPL下發佈的(如果使用了其中一些使用GPL協議發佈的模塊則必須使用GPL協議),任何人都可以在遵守協議的情況下自由使用。目前有很多播放軟件都使用了Libav、FFmpeg的代碼,但它們並沒有遵守LGPL,GPL協議,沒有公開任何原始碼。Libav、FFmpeg社區便將這些違反協議的公司、組織、個人的網址貼在「恥辱大廳」(又叫「恥辱柱」)上,並與這些公司/組織/個人商討如何解決版權爭議。[39]
參考資料[編輯]
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web腳本錯誤:沒有「Unsubst」這個模塊。Template:Cbignore Alt URL Template:Webarchive
- ↑ 腳本錯誤:沒有「citation/CS1」這個模塊。
- ↑ 腳本錯誤:沒有「citation/CS1」這個模塊。
- ↑ 腳本錯誤:沒有「citation/CS1」這個模塊。
- ↑ Template:Cite web
- ↑ 腳本錯誤:沒有「citation/CS1」這個模塊。
- ↑ 腳本錯誤:沒有「citation/CS1」這個模塊。
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ 腳本錯誤:沒有「citation/CS1」這個模塊。
- ↑ 腳本錯誤:沒有「citation/CS1」這個模塊。
- ↑ Template:Cite web
- ↑ Template:Cite news
- ↑ Template:Cite news
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ 26.0 26.1 26.2 26.3 26.4 26.5 26.6 Template:Cite web腳本錯誤:沒有「Unsubst」這個模塊。
- ↑ 27.0 27.1 Template:Cite web
- ↑ Template:Cite web腳本錯誤:沒有「Unsubst」這個模塊。
- ↑ Template:Cite web腳本錯誤:沒有「Unsubst」這個模塊。
- ↑ Template:Cite web腳本錯誤:沒有「Unsubst」這個模塊。
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
- ↑ Template:Cite web
參見[編輯]
外部連結[編輯]
腳本錯誤:沒有「Navbox」這個模塊。