FFmpeg
此條目可参照英語維基百科相應條目来扩充。 (2017年2月4日) |
原作者 | Fabrice Bellard |
---|---|
開發者 | FFmpeg team |
当前版本 | 4.2.3(2020年5月21日 | )
源代码库 | |
编程语言 | C語言 |
操作系统 | 跨平台 |
平台 | 跨平台 |
类型 | 多媒體 |
许可协议 | GNU宽通用公共许可证 |
网站 | ffmpeg |
FFmpeg 是一個開放原始碼的自由軟體,可以執行音訊和視訊多種格式的錄影、轉檔、串流功能[1],包含了libavcodec——這是一個用於多個專案中音訊和視訊的解碼器函式庫,以及libavformat——一個音訊與視訊格式轉換函式庫。
「FFmpeg」这个单词中的「FF」指的是「Fast Forward(快速前進)」[2]。有些新手写信给「FFmpeg」的项目负责人,询问FF是不是代表“Fast Free”或者“Fast Fourier”等意思,「FFmpeg」的项目负责人回信说:“Just for the record, the original meaning of "FF" in FFmpeg is "Fast Forward"...”
这个项目最初是由法布里斯·贝拉发起的,而现在是由Michael Niedermayer在进行维护。许多FFmpeg的开发者同时也是MPlayer项目的成员,FFmpeg在MPlayer项目中是被设计为服务器版本进行开发。
2011年3月13日,FFmpeg部分開發人士決定另組Libav,同时制定了一套关于项目继续发展和维护的规则。[3][4]
組成元件
此計劃由幾個元件組成:
- 命令列應用程式
- 函數庫
- libswresample
- libavresample
- libavcodec:包含全部FFmpeg音訊/視訊編解碼函式庫
- libavformat:包含demuxers和muxer函式庫
- libavutil:包含一些工具函式庫
- libpostproc:對於視訊做前處理的函式庫
- libswscale:對於影像作縮放的函式庫
- libavfilter
參數
FFmpeg可使用眾多參數,參數內容會根據ffmpeg版本而有差異,使用前建議先參考參數及編解碼器的敘述。此外,參數明細可用ffmpeg -h
顯示;編解碼器名稱等明細可用ffmpeg -formats
顯示。
下列為較常使用的參數:
主要參數
-i
——設定輸入檔名。-f
——設定輸出格式。-y
——若輸出檔案已存在時則覆蓋檔案。-fs
——超過指定的檔案大小時則結束轉換。-t
——指定输出文件的持续时间,以秒为单位。-ss
——從指定時間開始轉換,以秒为单位。-t
從-ss
時間開始轉換(如-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,[5] H.262/MPEG-2 Part 2, H.263[5]和H.264/MPEG-4 AVC[5]
- 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,[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[5]
- NTT: TwinVQ
- On2: Duck TrueMotion 1, Duck TrueMotion 2, VP3, VP5,[5] VP6[5]和VP8
- RAD Game Tools: Smacker video和Bink video
- Truespeech
- RenderWare: TXD[6]
The default MPEG-4 codec used by FFmpegs the FourCC of FMP4.
輸出格式
- AIFF
- ASF
- AVI
- BFI[7]
- CAF
- FLV
- GIF
- GXF, General eXchange Format, SMPTE 360M
- HLS, HTTP Live Streaming
- IFF[8]
- ISO base media file format(包括QuickTime, 3GP和MP4)
- M2V
- Matroska(包括WebM)
- Maxis XA[9]
- MPEG-DASH[10]
- MPEG program stream
- MPEG transport stream(包括 AVCHD)
- MXF, Material eXchange Format, SMPTE 377M
- MSN Webcam stream[11]
- NUT[12]
- Ogg
- OMA[13]
- RL2[14]
- Segment, for creating segmented video streams
- Smooth Streaming
- TXD[6]
- 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项目能建立一个健康而友好的开发环境。[15]
隨後Fabrice Bellard等人於2011年3月13日跳出去開新專案,稱作Libav,Libav裡面每位成員的管理權限縮更小(至少不能任意關閉其他人更改程式碼權限)。而Debian血統也響應,宣布2012年要將ffmpeg指令改成avconv[16]。
Libav跳槽之後有一定程度上更改FFmpeg的指令[17]。
Libav/FFmpeg版权
由于Libav、FFmpeg是在LGPL、GPL下发布的(如果使用了其中一些使用GPL协议发布的模块则必须使用GPL协议),任何人都可以在遵守协议的情况下自由使用。目前有很多播放软件都使用了Libav、FFmpeg的代码,但它们并没有遵守LGPL,GPL协议,没有公开任何源代码。Libav、FFmpeg社區便將這些違反協議的公司、組織、個人的網址貼在“恥辱大廳”(又叫“恥辱柱”)上,并與這些公司/組織/個人商討如何解決版權爭議。[18]
參考資料
- ^ FFmpeg Documentation
- ^ Bellard, Fabrice. FFmpeg naming and logo. FFmpeg developer mailing list. Mplayer website. 2006-02-18 [2007-03-29]. (原始内容存档于2007-09-30).
- ^ 红薯. FFmpeg项目改名为libav. 开源中国社区. 2011-03-15 [2011-06-14].
- ^ libav官方网站. [2011-06-14].
- ^ 5.0 5.1 5.2 5.3 5.4 5.5 5.6 banan. Changelog. FFmpeg trunk SVN. FFmpeg website. 17 April 2007 [26 April 2007].[永久失效連結]
- ^ 6.0 6.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].
- ^ 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日).
- ^ FFmpeg發生政變-中國開源社區
- ^ Debian Bug Tracker
- ^ http://libav.org/news.html#fftools_rename
- ^ FFmpeg开发者接受采访 - 开源中国社区