FFmpeg
此条目可参照英语维基百科相应条目来扩充。 (2017年2月4日) |
FFmpeg 是一个开放源代码的自由软件,可以执行音频和视频多种格式的录影、转换、串流功能[6],包含了libavcodec——这是一个用于多个项目中音频和视频的解码器函数库,以及libavformat——一个音频与视频格式转换函数库。
原作者 | Fabrice Bellard |
---|---|
开发者 | FFmpeg team |
首次发布 | 2000年12月20日[1],23年前 |
当前版本 |
|
源代码库 | |
编程语言 | C [3]汇编语言 [4]C++[4] |
操作系统 | GNU/Linux macOS Microsoft Windows Android [5]伯克利软件包操作系统 |
平台 | x86 ARM架构 PowerPC MIPS DEC Alpha SPARC |
类型 | 多媒体框架 |
许可协议 |
|
网站 | ffmpeg |
这个项目最初是由法国程序员法布里斯·贝拉(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和既有无损又有损的Snow编解码器。Snow的开发已经停滞,其比特流格式尚未最终确定,因此自2011年以来一直处于实验阶段。名为NUT的多媒体容器格式不再积极开发,但仍在维护中。[21]
2010年夏天,FFmpeg开发者Fiona Glaser、Ronald Bultje和David Conrad宣布了ffvp8解码器。经测试发现,ffvp8的速度比谷歌自己的libvpx解码器更快。[22][23]从0.6版本开始,FFmpeg还支持WebM和VP8。[24]
2013年10月,FFmpeg添加了本地VP9解码器[25]和OpenHEVC,一个开源的高效率视频编码(HEVC)解码器。[26]2016年,本地AAC编码器被认为是稳定的,因此移除了对VisualOn和自由高级音频编码的两个外部AAC编码器的支持。FFmpeg 3.0保留了对Fraunhofer FDK AAC编码器的构建支持。[27]从3.4版本开始,FFmpeg支持FITS图像格式。[28]从2018年11月的4.1版本开始,AV1可以在MP4和Matroska(包括WebM)中复用。[29][30]
组成组件
编辑此计划由几个组件组成:
参数
编辑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
FFmpeg已实现的:
- ITU-T视频标准:H.261,[31] H.262/MPEG-2 Part 2, H.263[31]和H.264/MPEG-4 AVC[31]
- 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,[31] 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[31]
- NTT: TwinVQ
- On2: Duck TrueMotion 1, Duck TrueMotion 2, VP3, VP5,[31] VP6[31]和VP8
- RAD Game Tools: Smacker video和Bink video
- Truespeech
- RenderWare: TXD[32]
The default MPEG-4 codec used by FFmpegs the FourCC of FMP4.
输出格式
编辑- AIFF
- ASF
- AVI
- AVIF
- BFI[33]
- CAF
- FLV
- GIF
- GXF, General eXchange Format, SMPTE 360M
- HLS, HTTP Live Streaming
- IFF[34]
- ISO base media file format(包括QuickTime, 3GP和MP4)
- M2V
- Matroska(包括WebM)
- Maxis XA[35]
- MPEG-DASH[36]
- MPEG program stream
- MPEG transport stream(包括 AVCHD)
- MXF, Material eXchange Format, SMPTE 377M
- MSN Webcam stream[37]
- NUT[38]
- Ogg
- OMA[39]
- RL2[40]
- Segment, for creating segmented video streams
- Smooth Streaming
- TXD[32]
- WTV
协议
编辑社区内部问题
编辑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是在LGPL、GPL下发布的(如果使用了其中一些使用GPL协议发布的模块则必须使用GPL协议),任何人都可以在遵守协议的情况下自由使用。目前有很多播放软件都使用了Libav、FFmpeg的代码,但它们并没有遵守LGPL,GPL协议,没有公开任何源代码。Libav、FFmpeg社区便将这些违反协议的公司、组织、个人的网址贴在“耻辱大厅”(又叫“耻辱柱”)上,并与这些公司/组织/个人商讨如何解决著作权争议。[44]
参考资料
编辑- ^ 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日].
- ^ 4.0 4.1 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).
- ^ 31.0 31.1 31.2 31.3 31.4 31.5 31.6 banan. Changelog. FFmpeg trunk SVN. FFmpeg website. 17 April 2007 [26 April 2007].[永久失效链接]
- ^ 32.0 32.1 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).