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视频编解码器如何处理熵编码。
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的速度比谷歌自己的libvpx解码器更快。从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,
*NTT: TwinVQ
*On2: Duck TrueMotion 1, Duck TrueMotion 2, VP3, VP5,
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
隨後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社區便將這些違反協議的公司、組織、個人的網址貼在“恥辱大廳”(又叫“恥辱柱”)上,并與這些公司/組織/個人商討如何解決版權爭議。
參考資料
参见
- 影片轉換
外部連結
*
评论 (0)