軟件開(kāi)發(fā)工具屬于哪種類型的軟件提升seo排名
FFmpeg是一個(gè)開(kāi)源的多媒體框架,它包含了一個(gè)用于音頻和視頻編解碼的庫(kù)。它可以執(zhí)行各種多媒體操作,如格式轉(zhuǎn)換、視頻剪輯、音頻處理等。可以用來(lái)記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開(kāi)源計(jì)算機(jī)程序。
FFmpeg的結(jié)構(gòu)
默認(rèn)的編譯會(huì)生成 4 個(gè)可執(zhí)行文件和 8 個(gè)靜態(tài)庫(kù)??蓤?zhí)行文件包括用于轉(zhuǎn)碼、推流、Dump 媒體文件的 ffmpeg、用于播放媒體文件的ffplay、用于獲取媒體文件信息的 ffprobe,以及作為簡(jiǎn)單流媒體服務(wù)器的 ffserver。8 個(gè)靜態(tài)庫(kù)其實(shí)就是 FFmpeg 的 8 個(gè)模塊,具體包括如下內(nèi)容:
- AVUtil:核心工具庫(kù),該模塊是最基礎(chǔ)的模塊之一,下面的許多其他模塊都會(huì)依賴該庫(kù)做一些基本的音視頻處理操作。
- AVFormat:文件格式和協(xié)議庫(kù),該模塊是最重要的模塊之一,封裝了 Protocol 層和 Demuxer、Muxer 層,使得協(xié)議和格式對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是透明的。
- AVCodec:編解碼庫(kù),該模塊也是最重要的模塊之一,封裝了 Codec 層,但是有一些 Codec 是具備自己的 License 的,FFmpeg 是不會(huì)默認(rèn)添加像 libx264、FDK-AAC、lame 等庫(kù)的,但是 FFmpeg 就像一個(gè)平臺(tái)一樣,可以將其他的第三方的 Codec 以插件的方式添加進(jìn)來(lái),然后為開(kāi)發(fā)者提供統(tǒng)一的接口。
- AVFilter:音視頻濾鏡庫(kù),該模塊提供了包括音頻特效和視頻特效的處理,在使用 FFmpeg 的 API 進(jìn)行編解碼的過(guò)程中,直接使用該模塊為音視頻數(shù)據(jù)做特效處理是非常方便同時(shí)也非常高效的一種方式。
- AVDevice:輸入輸出設(shè)備庫(kù),比如,需要編譯出播放聲音或者視頻的工具 ffplay,就需要確保該模塊是打開(kāi)的,同時(shí)也需要 libSDL的預(yù)先編譯,因?yàn)樵撛O(shè)備模塊播放聲音與播放視頻使用的都是 libSDL 庫(kù)。
- SwrRessample:該模塊可用于音頻重采樣,可以對(duì)數(shù)字音頻進(jìn)行聲道數(shù)、數(shù)據(jù)格式、采樣率等多種基本信息的轉(zhuǎn)換。
- SWScale:該模塊是將圖像進(jìn)行格式轉(zhuǎn)換的模塊,比如,可以將 YUV 的數(shù)據(jù)轉(zhuǎn)換為 RGB 的數(shù)據(jù)。
- PostProc:該模塊可用于進(jìn)行后期處理,當(dāng)我們使用 AVFilter 的時(shí)候需要打開(kāi)該模塊的開(kāi)關(guān),因?yàn)?Filter中 會(huì)使用到該模塊的一些基礎(chǔ)函數(shù)。
FFmpeg的簡(jiǎn)單使用
- 將input.avi轉(zhuǎn)換成output.mp4:
ffmpeg -i input.avi output.mp4
- 增加一些要求:
ffmpeg -threads 4 -i input.avi -ab 32 -flags +loop -vol 200 -vf yadif input.mp4
-ab:設(shè)置比特率
-vol:音量提高到200%
- 轉(zhuǎn)碼時(shí)修改尺寸:
ffmpeg -i input.avi -s 640x320 input.mp4
- 將視頻轉(zhuǎn)成m3u8點(diǎn)播文件
ffmpeg.exe -i input.avi -strict -2 -hls_time 10 -hls_list_size 0 -c:v libx264 -c:a aac -f hls input.m3u8
-hls_time 10:每個(gè)ts文件10秒左右。這個(gè)會(huì)根據(jù)具體情況,盡量維系在10秒一個(gè)ts
-hls_list_size 0:m3u8索引里保留所有的ts路徑
- 將視頻轉(zhuǎn)成加密的m3u8點(diǎn)播文件
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -hls_time 10 -hls_list_size 0 -hls_key_info_file key_info input.m3u8
key_info需要替換成自己的路徑,因?yàn)樾枰用?#xff0c;所以需要準(zhǔn)備二個(gè)文件一個(gè)是:key.key,一個(gè)是key_info。詳細(xì)的不在這里作介紹,如果有興趣可以看視頻實(shí)際了解詳細(xì)使用方法。
- 截圖:
ffmpeg -ss 00:02:06 -i input.mp4 -f image2 -y poster.jpg
-ss:截圖的時(shí)間點(diǎn)
- 連續(xù)截圖:
ffmpeg -y -i input.mp4 -vf “fps=1/2,scale=iw/4:-1,tile=10x10” -an %d.png
fps=1/2:每2秒截一張圖,如果是每秒截一張的話應(yīng)該是fps=1
scale:所截圖片大小,上面的代碼是設(shè)置寬為原始的1/4大小,高度自動(dòng),相當(dāng)于iw/4:ih/4,也可以設(shè)置成固定值如120:80
tile:網(wǎng)格化,自動(dòng)將100張圖合并成一張大圖
- 連續(xù)截圖的另外一個(gè)方法
ffmpeg -i my_dream.mp4 -vf fps=1/2 -q:v 2 -s 120x67 preview/%d.png
fps=1/2:每2秒截一張圖,如果是每秒截一張的話應(yīng)該是fps=1
-s:尺寸
這種方式截出來(lái)的是小圖,需要自己再拼合。
本文主要是對(duì)音視頻開(kāi)發(fā)中的FFmpeg的技術(shù)簡(jiǎn)單的介紹以及他的原理與簡(jiǎn)單使用,有關(guān)FFmpeg的技術(shù)還有很多。可以參考以下的技術(shù)路線:摘要《音視頻入門精通手冊(cè)》詳細(xì)類容可以查看。
最后注意
FFmpeg是一個(gè)全球領(lǐng)先的多媒體框架,能夠友好的在大部分設(shè)備實(shí)現(xiàn)解碼、編碼、轉(zhuǎn)碼、復(fù)用、解復(fù)用、轉(zhuǎn)碼、混流、流媒體、過(guò)濾和播放。FFmpeg能夠在各個(gè)平臺(tái)(Linux、Mac OS X、Microsoft Windows、BSDs、Solaris等)和架構(gòu)(x86、arm、mips等)中運(yùn)行和編譯。值得注意的是,FFMpeg并不是直接就可以用于各種視頻的編解碼工作,它只是一個(gè)框架。真正執(zhí)行編解碼工作的通常會(huì)用到其它編解碼器。