FFmpeg

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的速度比谷歌自己的解码器更快。从0.6版本开始，FFmpeg还支持WebM和VP8。

2013年10月，FFmpeg添加了本地VP9解码器和OpenHEVC，一个开源的高效率视频编码（HEVC）解码器。2016年，本地AAC编码器被认为是稳定的，因此移除了对和的两个外部AAC编码器的支持。FFmpeg 3.0保留了对编码器的构建支持。从3.4版本开始，FFmpeg支持FITS图像格式。从2018年11月的4.1版本开始，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 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

FFmpeg已实现的：
ITU-T视频标准：H.261, H.262/MPEG-2 Part 2, H.263和H.264/MPEG-4 AVC
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, 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
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 MPEG-4 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
 MPEG-DASH
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 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项目能建立一个健康而友好的开发环境。

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

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

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

參考資料

参见
 影片轉換

外部連結

Category:C函式庫
Category:开源软件
Category:多媒體
Category:多媒体框架
Category:视频编解码器
Category:音频编解码器
Category:自由跨平台軟體