FFmpeg

时间:2023-12-19 13:18  

FFmpeg
FFmpeg执行视频档转换时的画面
原作者Fabrice Bellard
开发者FFmpeg team
首次发布2000年12月20日,22年前
当前版本
  • 6.0 (2023年2月27日;稳定版本)
源代码库
  • git.ffmpeg.org/ffmpeg.git
编程语言C语言
汇编语言
C++
操作系统GNU/Linux
macOS
Microsoft Windows
Android
伯克利软件包操作系统
系统平台x86
ARM架构
PowerPC
MIPS
DEC Alpha
SPARC
类型多媒体框架
许可协议
  • GNU宽通用公共许可证2.1或更高版本
网站ffmpeg.org

FFmpeg 是一个开放源代码的自由软件,可以执行音频和视频多种格式的录影、转换、串流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器函式库,以及libavformat——一个音频与视频格式转换函式库。

“FFmpeg”这个单词中的“FF”指的是“Fast Forward(快速前进)”。“FFmpeg”的项目负责人在一封回信中说:“Just for the record, the original meaning of "FF" in FFmpeg is "Fast Forward"...”

这个项目最初是由法国程序员法布里斯·贝拉(Fabrice Bellard)发起的,而现在是由迈克尔·尼德梅尔(Michael Niedermayer)在进行维护。许多FFmpeg的开发者同时也是MPlayer项目的成员,FFmpeg在MPlayer项目中是被设计为服务器版本进行开发。

2011年3月13日,FFmpeg部分开发人士决定另组Libav,同时制定了一套关于项目继续发展和维护的规则。

组成组件

此计划由几个组件组成:

  • 命令行应用程序
    • 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

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社区便将这些违反协议的公司、组织、个人的网址贴在“耻辱大厅”(又叫“耻辱柱”)上,并与这些公司/组织/个人商讨如何解决著作权争议。

 

本文版权遵从外房网免责声明,更多问题请发送邮件至:
sam@glofang.com

为您推荐:

12小时在线QQ客服
周一至周日 9:00-21:00

广告联系

邮箱:glofang@glofang.com