FFmpeg 是一個開放原始碼的自由軟體，可以執行音訊和視訊多種格式的錄影、轉檔、串 流功能，包含了 libavcodec 這是一個用於多個專案中音訊和視訊的解碼器函式庫，以及 libavformat 一個音訊與視訊格式轉換函式庫。 這個專案最初是由法國程式設計師法布里斯貝拉發起的，而現在是由米夏埃爾尼德邁爾（Michael Niedermayer）在進行維護。許多 FFmpeg 的開發者同時也是 MPlayer 專案的成員，FFmpeg 在 MPlayer 專案中是被設計為伺服器版本進行開發。 歷史 該專案由法布里斯貝拉（Fabrice Bellard，使用化名 Gérard Lantau）於 2000 年啟動，並由米夏埃爾尼德邁爾（Michael Niedermayer）從 2004 年領導，直到 2015 年辭職。一些 FFmpeg 的開發者也參與了 MPlayer 專案。 該專案的名稱靈感來源於 MPEG 影片標準組織，其中 FF 代表 快進（fast forward），因此 FFmpeg 代表 快進動態影像專家組。其標誌是一個之字形掃描圖案，顯示了 MPEG 影片編解碼器如何處理熵編碼。 Alt URL 2011 年 3 月 13 日，一組 FFmpeg 開發者決定將該專案分支，命名為。此事件與專案管理中的問題有關，開發者們對 FFmpeg 的領導層存在分歧。 2014 年 1 月 10 日，兩名谷歌員工宣佈，在過去兩年中，透過模糊測試已修復了 FFmpeg 中的 1000 多個漏洞。 2018 年 1 月，FFmpeg 的一個長期元件 ffserver 命令列程式被移除。開發者此前已經廢棄了該程式，原因是由於其使用了內部應用程式介面，導致維護工作量大。 該專案平均每三個月釋出一次新版本。儘管可以從網站上下載釋出版本，但 FFmpeg 開發者建議使用者使用他們原始碼 Git 版本控制系統中的最新構建來編譯軟體。 編解碼器歷史 到目前為止，FFmpeg 專案已建立了兩種影片編碼格式及其對應的編解碼器，並且有一種容器格式。這兩種影片編解碼器是無損的和既有無損又有損的 Snow 編解碼器。Snow 的開發已經停滯，其位元流格式尚未最終確定，因此自 2011 年以來一直處於實驗階段。名為 NUT 的多媒體容器格式不再積極開發，但仍在維護中。 2010 年夏天，FFmpeg 開發者 Fiona Glaser、Ronald Bultje 和 David Conrad 宣佈了 ffvp8 解碼器。經測試發現，ffvp8 的速度比谷歌自己的解碼器更快。從 06 版本開始，FFmpeg 還支援 WebM 和 VP8。 2013 年 10 月，FFmpeg 添加了本地 VP9 解碼器和 OpenHEVC，一個開源的高效率影片編碼（HEVC）解碼器。2016 年，本地 AAC 編碼器被認為是穩定的，因此移除了對和的兩個外部 AAC 編碼器的支援。FFmpeg 30 保留了對編碼器的構建支援。從 34 版本開始，FFmpeg 支援 FITS 影像格式。從 2018 年 11 月的 41 版本開始，AV1 可以在 MP4 和 Matroska（包括 WebM）中複用。 組成元件 此計劃由幾個元件組成： 命令列應用程式 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 00000100 t 00001000 即從 00000100 開始轉換到 00001100。 title 設定標題。 timestamp 設定時間戳。 vsync 增減 Frame 使影音同步。 c 指定輸出檔案的編碼。 metadata 更改輸出檔案的元資料。 help 檢視幫助資訊。 影像引數 bv 設定影像流量，預設為 200Kbit 秒。（單位請參照下方注意事項） r 設定幀率值，預設為 25。 s 設定畫面的寬與高。 aspect 設定畫面的比例。 vn 不處理影像，於僅針對聲音做處理時使用。 vcodec cv 設定影像編解碼器，未設定時則使用與輸入檔案相同之編解碼器。 聲音引數 ba 設定每 Channel（最近的 SVN 版為所有 Channel 的總合）的流量。（單位請參照下方注意事項） ar 設定取樣率。 ac 設定聲音的 Channel 數。 acodec ca 設定聲音編解碼器，未設定時與影像相同，使用與輸入檔案相同之編解碼器。 an 不處理聲音，於僅針對影像做處理時使用。 vol 設定音量大小，256 為標準音量。（要設定成兩倍音量時則輸入 512，依此類推。） 注意事項 以 bv 及 ba 引數設定流量時，根據使用的 ffmpeg 版本，須注意單位會有 kbitssec 與 bitssec 的不同。（可用 ffmpeg h 顯示說明來確認單位。） 例如，單位為 bitssec 的情況時，欲指定流量 64kbps 時需輸入 ba 64k；單位為 kbitssec 的情況時則需輸入 ba 64。 以 acodec 及 vcodec 所指定的編解碼器名稱，會根據使用的 ffmpeg 版本而有所不同。例如使用 AAC 編解碼器時，會有輸入 aac 與 libfaac 的情況。此外，編解碼器有分為僅供解碼時使用與僅供編碼時使用，因此一定要利用 ffmpeg formats 確認輸入的編解碼器是否能運作。 支援的編碼器、格式和協議 編碼器 FFmpeg 專案原生的編碼器： Snow FFmpeg 已實現的： ITUT 影片標準：H261 H262MPEG2 Part 2 H263 和 H264MPEG4 AVC ITUT 音訊編解碼器標準：G711 µlaw G711 Alaw G721（也叫 G726 32k） G722 G7222（也叫 AMRWB） G723（也叫 G726 24k 和 40k）和 G726 ISOIEC MPEG 影片標準：MPEG1 Part 2 H262MPEG2 Part 2 MPEG4 Part 2 和 H264MPEG4 AVC ISOIEC MPEG 音訊標準：MP1 MP2 MP3 AAC HEAAC 和 MPEG4 ALS ISOIECITUT JPEG 影像標準：JPEG 和 JPEGLS SMPTE 影片標準：VC1（也稱作 WMV3） VC3（也稱作 AVID DNxHD）和 DPX 影像 SMPTE 音訊標準：SMPTE 302M DVD 論壇的相關標準 杜比實驗室的音訊編解碼器：MLP（也稱 TrueHD）和 AC3 3GPP 音訊編碼器標準：AMRNB AMRWB（也叫 G7222） GSM 相關的語音訊號編解碼器：Full Rate Windows Media Player 相關的影片編解碼器：Microsoft RLE Microsoft Video 1 Cinepak Indeo 2 3 和 5 Motion JPEG Microsoft MPEG4 v1 v2 和 v3 WMV1 WMV2 and WMV3（也稱 VC1） Windows Media Player 相關的音訊編解碼器：WMA1 WMA2 和 WMA Pro Windows Media Player 相關的語音訊號編解碼器：WMA Voice 和 MSGSM RealPlayer 相關的影片編解碼器：RealVideo 1 2 3 和 4 RealPlayer 相關的音訊編解碼器：RealAudio 3 6 7 8 9 和 10 RealPlayer 相關的語音訊號編解碼器：RealAudio 1 2 G728 的衍生 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 XiphOrg Theora Speex（透過 libspeex 實現） Vorbis 和 FLAC Sony ATRAC1 和 ATRAC3 NTT TwinVQ On2 Duck TrueMotion 1 Duck TrueMotion 2 VP3 VP5 VP6 和 VP8 RAD Game Tools Smacker video 和 Bink video Truespeech RenderWare TXD The default MPEG4 codec used by FFmpegs the FourCC of FMP4 輸出格式 AIFF ASF AVI AVIF BFI CAF FLV GIF GXF General eXchange Format SMPTE 360M HLS HTTP Live Streaming IFF ISO base media file format（包括 QuickTime 3GP 和 MP4） M2V Matroska（包括 WebM） Maxis XA MPEGDASH MPEG program stream MPEG transport stream（包括 AVCHD） MXF Material eXchange Format SMPTE 377M MSN Webcam stream NUT Ogg OMA RL2 Segment for creating segmented video streams Smooth Streaming TXD WTV 協議 IETF 標準：TCP UDP Gopher HTTP RTP RTSP 和 SDP 蘋果公司的相關標準：HTTP Live Streaming RealMedia 的相關標準：RealMedia RTSPRDT 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 專案能建立一個健康而友好的開發環境。 隨後 Fabrice Bellard 等人於 2011 年 3 月 13 日跳出去開新專案，稱作 Libav，Libav 裡面每位成員的管理許可權縮更小（至少不能任意關閉其他人更改程式碼許可權）。而 Debian 血統也響應，宣佈 2012 年要將 ffmpeg 指令改成 avconv。 Libav 跳槽之後有一定程度上更改 FFmpeg 的指令。 LibavFFmpeg 版權 由於 Libav、FFmpeg 是在 LGPL、GPL 下發布的（如果使用了其中一些使用 GPL 協議釋出的模組則必須使用 GPL 協議），任何人都可以在遵守協議的情況下自由使用。目前有很多播放軟體都使用了 Libav、FFmpeg 的程式碼，但它們並沒有遵守 LGPL，GPL 協議，沒有公開任何原始碼。Libav、FFmpeg 社群便將這些違反協議的公司、組織、個人的網址貼在 恥辱大廳（又叫 恥辱柱）上，並與這些公司 組織 個人商討如何解決版權爭議。 參考資料 參見 影片轉換 外部連結 CategoryC 函式庫 Category 開源軟體 Category 多媒體 Category 多媒體框架 Category 影片編解碼器 Category 音訊編解碼器 Category 自由跨平臺軟體