FFmpeg

FFmpeg 是一個開放原始碼的自由軟體，可以執行音訊和視訊多種格式的錄影、轉檔、串流功能，包含了libavcodec——這是一個用於多個專案中音訊和視訊的解碼器函式庫，以及libavformat——一個音訊與視訊格式轉換函式庫。 这个项目最初是由法國程式設計師法布里斯·贝拉（Fabrice Bellard）发起的，而现在是由邁克爾·尼德梅爾（Michael Niedermayer）在进行维护。许多FFmpeg的开发者同时也是MPlayer项目的成员，FFmpeg在MPlayer项目中是被设计为服务器版本进行开发。 该项目由法布里斯·贝拉（Fabrice Bellard，使用化名“Gérard Lantau”）于2000年启动，并由邁克爾·尼德梅爾（Michael Niedermayer）从2004年领导，直到2015年辞职。一些FFmpeg的开发者也参与了MPlayer项目。 该项目的名称灵感来源于MPEG视频标准组织，其中“FF”代表“快进”（fast forward），因此FFmpeg代表“快进动态图像专家组”。其标志是一个之字形扫描图案，显示了MPEG视频编解码器如何处理熵编码。 2011年3月13日，一组FFmpeg开发者决定将该项目分支，命名为Libav。此事件与项目管理中的问题有关，开发者们对FFmpeg的领导层存在分歧。 2014年1月10日，两名谷歌员工宣布，在过去两年中，通过模糊测试已修复了FFmpeg中的1000多个漏洞。 2018年1月，FFmpeg的一个长期组件ffserver命令行程序被移除。开发者此前已经废弃了该程序，原因是由于其使用了内部应用程序接口，导致维护工作量大。 该项目平均每三个月发布一次新版本。尽管可以从网站上下载发布版本，但FFmpeg开发者建议用户使用他们源代码Git版本控制系统中的最新构建来编译软件。 到目前为止，FFmpeg项目已创建了两种视频编码格式及其对应的编解码器，并且有一种容器格式。这两种视频编解码器是无损的FFV1（英语：FFV1）和既有无损又有损的Snow编解码器。Snow的开发已经停滞，其比特流格式尚未最终确定，因此自2011年以来一直处于实验阶段。名为NUT的多媒体容器格式不再积极开发，但仍在维护中。 2010年夏天，FFmpeg开发者Fiona Glaser、Ronald Bultje和David Conrad宣布了ffvp8解码器。经测试发现，ffvp8的速度比谷歌自己的libvpx（英语：Libvpx）解码器更快。从0.6版本开始，FFmpeg还支持WebM和VP8。 2013年10月，FFmpeg添加了本地VP9解码器和OpenHEVC，一个开源的高效率视频编码（HEVC）解码器。2016年，本地AAC编码器被认为是稳定的，因此移除了对VisualOn（英语：VisualOn）和自由高级音频编码（英语：FAAC）的两个外部AAC编码器的支持。FFmpeg 3.0保留了对Fraunhofer FDK AAC（英语：Fraunhofer FDK AAC）编码器的构建支持。从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 FFV1（英语：FFV1） 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是在LGPL、GPL下发布的（如果使用了其中一些使用GPL协议发布的模块则必须使用GPL协议），任何人都可以在遵守协议的情况下自由使用。目前有很多播放软件都使用了Libav、FFmpeg的代码，但它们并没有遵守LGPL，GPL协议，没有公开任何源代码。Libav、FFmpeg社區便將這些違反協議的公司、組織、個人的網址貼在“恥辱大廳”（又叫“恥辱柱”）上，并與這些公司/組織/個人商討如何解決版權爭議。 Initial revision.  FFmpeg 7.1 "Péter". 2024年9月30日 [2024年9月30日].  The ffmpeg Open Source Project on Open Hub: Languages Page. Open Hub. [2018年7月14日].  The ffmpeg Open Source Project on Open Hub: Languages Page. [2019年1月8日].  FFmpeg Media Encoder.  FFmpeg Documentation. [2009-08-26]. （原始内容存档于2010-09-18）.  FFmpeg License and Legal Considerations. ffmpeg.org. [2012-01-04]. （原始内容存档于2012-01-03）.  Niedermayer, Michael. [FFmpeg-devel] FFmpegs future and resigning as leader. 31 July 2015 [2015-09-22]. （原始内容存档于2015-08-15）.  Bellard, Fabrice. FFmpeg naming and logo. FFmpeg developer mailing list. 2006-02-18 [2011-12-24]. （原始内容存档于2012-04-26） （英语）.  Carlsen, Steve. TIFF 6.0 specification (PS). Aldus Corporation: 98. 1992-06-03 [2016-08-14]. Zig-Zag Scan [失效連結] Alt URL 互联网档案馆的存檔，存档日期2012-07-03. Libav project site, [2012-01-04], （原始内容存档于2012-01-03）  Ronald S. Bultje, Project renamed to Libav, 2011-03-14 [2012-01-04], （原始内容存档于2016-11-07）  A group of FFmpeg developers just forked as Libav, Phoronix, 2011-03-14 [2012-01-04], （原始内容存档于2011-09-15）  红薯. FFmpeg项目改名为libav. 开源中国社区. 2011-03-15 [2011-06-14]. （原始内容存档于2011-09-03）.  What happened to FFmpeg, 2011-03-30 [2012-05-19], （原始内容存档于2018-09-02）  FFMpeg turmoil, 2011-01-19 [2012-01-04], （原始内容存档于2012-01-12）  The FFmpeg/Libav situation. blog.pkh.me. [2015-09-22]. （原始内容存档于2012-07-01）.  FFmpeg and a thousand fixes. googleblog.com. January 10, 2014 [21 October 2016]. （原始内容存档于22 October 2016）.  ffserver – FFmpeg. trac.ffmpeg.org. [2018-02-03]. （原始内容存档于2018-02-04）.  ffserver program being dropped. ffmpeg.org. 2016-07-10 [2018-02-03]. （原始内容存档于2016-07-16） （英语）.  NUT. Multimedia Wiki. 2012 [2014-01-03]. （原始内容存档于2014-01-03）.  Glaser, Fiona, Diary Of An x264 Developer: Announcing the world's fastest VP8 decoder, 2010-07-23 [2012-01-04], （原始内容存档于2010-09-30）  FFmpeg Announces High-Performance VP8 Decoder, Slashdot, 2010-07-24 [2012-01-04], （原始内容存档于2011-12-21）  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...  Native VP9 decoder is now in the Git master branch. Launchpad. 2013-10-03 [2013-10-21]. （原始内容存档于2013-10-22）.  FFmpeg Now Features Native HEVC/H.265 Decoder Support. Softpedia. 2013-10-16 [2013-10-16]. （原始内容存档于2014-06-15）.  FFmpeg. February 15th, 2016, FFmpeg 3.0 "Einstein". 2016-02-15 [2016-04-02]. （原始内容存档于2016-07-16）.  FFmpeg. October 15th, 2017, FFmpeg 3.4 "Cantor". 2017-10-15 [2019-05-10]. （原始内容存档于2016-07-16）.  FFmpeg. November 6th, 2018, FFmpeg 4.1 "al-Khwarizmi". 2018-11-06 [2019-05-10]. （原始内容存档于2016-07-16）.  Jan Ozer. Good News: AV1 Encoding Times Drop to Near-Reasonable Levels. StreamingMedia.com. 2019-03-04 [2019-05-10]. （原始内容存档于2021-05-14）.  banan. Changelog. FFmpeg trunk SVN. FFmpeg website. 17 April 2007 [26 April 2007]. [永久失效連結] ivo. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 2007-05-07 [2010-12-24]. （原始内容存档于2007-08-11）.  vitor. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 13 April 2008 [14 April 2008]. [永久失效連結] vitor. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 30 March 2008 [30 March 2008]. [永久失效連結] benoit. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 14 April 2008 [14 April 2008]. [永久失效連結] Michael Niedermayer, Timothy Gu. RELEASE NOTES for FFmpeg 2.5 "Bohr". VideoLAN. 2014-12-05 [2014-12-05]. （原始内容存档于2014-12-08）.  ramiro. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 18 March 2008 [18 March 2008]. （原始内容存档于2008年8月17日）.  NUT. Multimedia Wiki. 2012 [2014-01-03]. （原始内容存档于2014-01-03）.  banan. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 8 June 2008 [8 June 2008]. （原始内容存档于2009年1月14日）.  faust3. FFmpeg development mailing list. FFmpeg development. FFmpeg website. 21 March 2008 [21 March 2008]. （原始内容存档于2008年4月25日）.  blackhat. FFmpeg發生政變. Solidot. 2011-01-20 [2021-10-15]. （原始内容存档于2018-12-18）.  Debian Bug Tracker. [2014-02-04]. （原始内容存档于2015-02-11）.  News. libav.org. [2014-09-08]. （原始内容存档于2014-09-08）.  FFmpeg开发者接受采访 - 开源中国社区. [2011-03-05]. （原始内容存档于2011-03-19）.  影片轉換 官方网站