FFMpeg的基本介绍
文章目錄
- 1 FFMpeg的基本概念
- 1.1 FFMpeg是什么
- 1.2 FFmpeg 的組成
- 1.3 FFmpeg 主要功能
1 FFMpeg的基本概念
1.1 FFMpeg是什么
FFmpeg 是一套可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。
采用 LGPL 或 GPL 許可證。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。
FFmpeg 在 Linux 平臺(tái)下開(kāi)發(fā),但它同樣也可以在其它操作系統(tǒng)環(huán)境中編譯運(yùn)行,包括Windows、Mac OS X 等。
這個(gè)項(xiàng)目最早由 Fabrice Bellard 發(fā)起,2004 年至 2015 年間由 Michael Niedermayer 主要負(fù)責(zé)維護(hù)。許多 FFmpeg 的開(kāi)發(fā)人員都來(lái)自 MPlayer 項(xiàng)目,而且當(dāng)前 FFmpeg 也是放在MPlayer 項(xiàng)目組的服務(wù)器上。項(xiàng)目的名稱來(lái)自 MPEG 視頻編碼標(biāo)準(zhǔn),前面的"FF"代表"Fast Forward"。
1.2 FFmpeg 的組成
構(gòu)成 FFmpeg 主要有三個(gè)部分:
第一部分:工具
第一部分是四個(gè)作用不同的工具軟件,分別是:ffmpeg.exe,ffplay.exe,ffserver.exe
和 ffprobe.exe。
- ffmpeg.exe:音視頻轉(zhuǎn)碼、轉(zhuǎn)換器
- ffplay.exe:簡(jiǎn)單的音視頻播放器
- ffserver.exe:流媒體服務(wù)器
- ffprobe.exe:簡(jiǎn)單的多媒體碼流分析器
第二部分:SDK
第二部分是可以供開(kāi)發(fā)者使用的 SDK,為各個(gè)不同平臺(tái)編譯完成的庫(kù)。
如果說(shuō)上面的四個(gè)工具軟件都是完整成品形式的玩具,那么這些庫(kù)就相當(dāng)于樂(lè)高積木一樣,我們可以根據(jù)自己的需求使用這些庫(kù)開(kāi)發(fā)自己的應(yīng)用程序。這些庫(kù)有:
- libavcodec:包含音視頻編碼器和解碼器。編解碼庫(kù),封裝了 Codec 層,但是有一些 codec 是具備自己的 License 的,FFmpe 不會(huì)默認(rèn)添加像 libx264、FDK-AAC、Lame 等庫(kù),但是 FFmpeg 是一個(gè)平臺(tái),可以將其他的第三方 codec 以插件的方式添加進(jìn)來(lái),為開(kāi)發(fā)者提供統(tǒng)一接口。
- libavutil:包含多媒體應(yīng)用常用的簡(jiǎn)化編程的工具,如隨機(jī)數(shù)生成器、數(shù)據(jù)結(jié)構(gòu)、數(shù)學(xué)函數(shù)等功能。核心工具庫(kù),最基礎(chǔ)模塊之一,其他模塊都會(huì)依賴該庫(kù)做一些基本的音視頻處理操作。
- libavformat:包含多種多媒體容器格式的封裝、解封裝工具。文件格式和協(xié)議庫(kù),封裝了 Protocol 層和 Demuxer、Muxer 層,使得協(xié)議和格式對(duì)于開(kāi)者來(lái)說(shuō)是透明的。
- libavfilter:包含多媒體處理常用的濾鏡功能。音視頻濾鏡庫(kù),該模塊包含了音頻特效和視頻特效的處理,在使用 FFmpeg 的 API 進(jìn)行編解碼的過(guò)程中,可以使用該模塊高效的為音視頻數(shù)據(jù)做特效處理。
- libavdevice:用于音視頻數(shù)據(jù)采集和渲染等功能的設(shè)備相關(guān)。輸入輸出設(shè)備庫(kù),比如需要編譯出播放聲音或者視頻的工具 ffplay,就需要確保該模塊是打開(kāi)的,同事也需要 libsdl 的預(yù)先編譯,該設(shè)備模塊播放聲音和視頻都又是使用 libsdl 庫(kù)。
- libswscale:用于圖像縮放和色彩空間和像素格式轉(zhuǎn)換功能。該模塊用于圖像格式轉(zhuǎn)換,可以將 YUV 的數(shù)據(jù)轉(zhuǎn)換為 RGB 的數(shù)據(jù)。
- libswresample:用于音頻重采樣和格式轉(zhuǎn)換等功能。用于音頻重采樣,可以對(duì)數(shù)字音頻進(jìn)行聲道數(shù)、數(shù)據(jù)格式、采樣率等多種基本信息的轉(zhuǎn)換。
- libpostproc:該模塊用于進(jìn)行后期處理,當(dāng)我們使用 filter 的時(shí)候,需要打開(kāi)這個(gè)模塊,filter 會(huì)用到這個(gè)模塊的一些基礎(chǔ)函數(shù)。
比較老的 ffmpeg 還會(huì)編譯出 avresamle 模塊,也是用于對(duì)音頻原始出具進(jìn)行重采樣的,但是已經(jīng)被廢棄,推薦使用 libswresample 替代。另外,庫(kù)里還可以包含對(duì) H.264/MPEG-4 AVC 視頻編碼的 X264 庫(kù),是最常用的有損視頻編碼器,支持 CBR、VBR 模式,可以在編碼的過(guò)程中直接改變碼率的設(shè)置,在直播的場(chǎng)景中非常適用!可以做碼率自適應(yīng)的功能。
第三部分:源碼
第三部分是整個(gè)工程的源代碼,無(wú)論是編譯出來(lái)的可執(zhí)行程序還是 SDK,都是由這些源代碼編譯出來(lái)的。
FFmpeg 的源代碼由 C 語(yǔ)言實(shí)現(xiàn),主要在 Linux 平臺(tái)上進(jìn)行開(kāi)發(fā)。
FFmpeg 不是一個(gè)孤立的工程,它還存在多個(gè)依賴的第三方工程來(lái)增強(qiáng)它自身的功能。
1.3 FFmpeg 主要功能
多媒體視頻處理工具 FFmpeg 有非常強(qiáng)大的功能包括視頻采集功能、視頻格式轉(zhuǎn)換、視頻抓圖、給視頻加水印等。
視頻采集功能:
- ffmpeg 視頻采集功能非常強(qiáng)大,不僅可以采集視頻采集卡或 USB 攝像頭的圖像,還可以進(jìn)行屏幕錄制,同時(shí)還支持以 RTP 方式將視頻流傳送給支持 RTSP 的流媒體服務(wù)器,支持直播應(yīng)用。
視頻格式轉(zhuǎn)換功能:
- ffmpeg 視頻轉(zhuǎn)換功能。視頻格式轉(zhuǎn)換,比如可以將多種視頻格式轉(zhuǎn)換為 flv 格式,可不是視頻信號(hào)轉(zhuǎn)換 。ffmpeg 可以輕易地實(shí)現(xiàn)多種視頻格式之間的相互轉(zhuǎn)換(wma,rm,avi,mod 等),例如可以將攝錄下的視頻 avi 等轉(zhuǎn)成視頻網(wǎng)站所采用的 flv 格式。
視頻截圖功能:
- 對(duì)于選定的視頻,截取指定時(shí)間的縮略圖。視頻抓圖,獲取靜態(tài)圖和動(dòng)態(tài)圖,不提倡抓 gif 文件;因?yàn)樽コ龅?gif 文件大而播放不流暢。
給視頻加水印功能:
- 使用 ffmpeg 視頻添加水印(logo)。
參考資料:
總結(jié)
以上是生活随笔為你收集整理的FFMpeg的基本介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 新股中签缴费,需要保证资金账户中有充足的
- 下一篇: 驱动设计的思想:面向对象/分层/分离