徐聰
摘 要:多媒體技術(shù)尤其以視頻和音頻方面為主的處理技術(shù)應(yīng)用范圍十分廣泛,涉及到實時監(jiān)控、遠程視頻會議等各方面。
關(guān)鍵詞:FFmpeg;視頻;音頻;處理方法;分析
在油田企業(yè)生產(chǎn)經(jīng)營和信息化建設(shè)中,多媒體技術(shù)尤其以視頻和音頻方面為主的處理技術(shù)應(yīng)用范圍十分廣泛,涉及到實時監(jiān)控、遠程視頻會議等各方面。本文介紹一種名為FFmpeg的計算機程序,其使用C語言進行編譯,該程序在視頻和音頻數(shù)字文件的處理方面有很高的效率。
一、FFmpeg程序介紹
1、FFmpeg所包含的視頻庫和音頻庫如下:
一是Libavformat庫:用于各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結(jié)構(gòu)和讀取音視頻幀等功能;二是libavcodec庫:用于各種類型聲音/圖像編解碼;三是libavutil庫:包含一些公共的工具函數(shù);四是libswscale庫:用于視頻場景比例縮放、色彩映射轉(zhuǎn)換;五是libpostproc庫:用于后期效果處理。
2、FFmpeg提供的項目程序如下:
一是ffmpeg:該項目提供的一個工具,可用于格式轉(zhuǎn)換、解碼或電視卡即時編碼等;二是ffsever:一個HTTP多媒體即時廣播串流服務(wù)器;三是ffplay:一個簡單的播放器,使用ffmpeg庫解析和解碼,通過SDL顯示。
二、FFmpeg的各種參數(shù)
FFmpeg使用直觀的命令行符號設(shè)計,符號簡單,易于用戶使用。以下為FFmpeg的常用命令行符號參數(shù),分為主要參數(shù)、視頻參數(shù)、音頻參數(shù)。
1、主要參數(shù):(1)‘-L——顯示視頻許可;(2)‘-h,-?, -help,--help——顯示幫助選項;(3)‘-version——顯示視頻版本信息;(4)‘-formats——顯示可用的視頻格式。
格式名稱的字段有以下幾種:(1)‘D——可以解碼;(2)‘E——可以編碼;(3)‘-codecs—— 顯示可用的編解碼器;(4)‘V/A/S——視頻/音頻/字幕編解碼器(5)‘S—— 編解碼器支持多幀;(6)‘D——編碼器支持直接渲染;(7)‘T—— 編解碼器可以處理在隨機位置截取的輸入視頻,而不是只在幀邊界進行處理;(8)‘-bsfs——顯示可用的比特流過濾器;(9)‘-protocols——顯示可用的協(xié)議;(10)‘-filters——顯示可用的libavfilter過濾器;(11)‘-pix_fmts——顯示可用的圖像格式;(12)‘-f fmt——強制格式化;(13)‘-i filename——輸入視頻文件名;(14)‘-y——覆蓋輸出文件;(15)‘-t duration—— 限制轉(zhuǎn)碼/捕獲視頻序列的持續(xù)時間,以秒為指定單位;(16)‘-fs limit_size ——設(shè)置文件大小的限制;(17)‘-scodec codec——強制轉(zhuǎn)換字幕;(18)‘-newsubtitle——向當(dāng)前輸出流中加入字幕流;(19)‘-target type——設(shè)定特定文件類型,例如vcd, svcd,dvd,dv,dv50、pal-vcd,ntsc-svcd等,所有該類型相關(guān)的參數(shù)(比特率、信號解編碼器、緩沖區(qū)大?。稍摮绦蜃詣由?。
2、視頻參數(shù)。‘-b bitrate——設(shè)置視頻比特率(默認為200kb/s);
‘-dframes number——設(shè)置該文件的幀數(shù)目;
‘-r fps——設(shè)置幀速率 (Hz 值, 分數(shù)或縮寫,默認為25);
‘-s size——設(shè)置幀大小,格式為寬乘高,例如:‘svga 800x600、‘xga 1024x768 、‘sxga 1280x1024 、‘wsxga 1600x1024 、‘hd720 1280x720、‘hd1080 1920x1080;
‘-vn ——禁用視頻錄制;
‘-newvideo——在當(dāng)前輸出流中加入一段新的視頻流。
4、音頻參數(shù)。-ab ——設(shè)定每Channel(最近的SVN版為所有Channel的總和)的流量,
-ar ——設(shè)定采樣率;
-ac ——設(shè)定聲音的Channel數(shù);
-acodec ——設(shè)定聲音編碼器,未設(shè)定時與影像相同,使用與輸入檔案相同的編解碼器;
-an ——不處理聲音,于僅針對影像做處理時使用;
-vol ——設(shè)定音量大小,256為標(biāo)準(zhǔn)音量。(要設(shè)定成兩倍音量時則輸入512,依此類推。)
FFmpeg支持的協(xié)議:
IETF 標(biāo)準(zhǔn): TCP, UDP, Gopher, HTTP, RTP, RTSP 和 SDP。
蘋果公司的相關(guān)標(biāo)準(zhǔn): HTTP Live Streaming。
RealMedia 的相關(guān)標(biāo)準(zhǔn): RealMedia RTSP/RDT。
Adobe 的相關(guān)標(biāo)準(zhǔn): RTMP, RTMPT (由librtmp實現(xiàn)), RTMPE (由librtmp實現(xiàn)), RTMPTE (由librtmp) 和 RTMPS (由librtmp實現(xiàn))。
微軟的相關(guān)標(biāo)準(zhǔn): MMS 在 TCP 上和 MMS 在 HTTP上。
三、FFmpeg主要功能
在我們油田企業(yè)日常信息化活動中,F(xiàn)Fmpeg所提供的主要功能有視頻轉(zhuǎn)換、視頻采集、音頻提取和視頻截圖。
1、視頻轉(zhuǎn)換:FFmpeg的視頻轉(zhuǎn)換功能十分強大,該程序可以將多種視頻格式進行轉(zhuǎn)換。例如使用下列命令行:./ffmpeg -y -i "C:\Users\Public\Videos\Sample Videos\Wildlife.wmv" -acodec libmp3lame -vcodec msmpeg4 -b:a 192k -b:v 1000k -vf scale=640:480 -ar 44100 "C:\Users\ Public\Videos \Wildlife.avi"
可以將WMV格式的視頻轉(zhuǎn)換為MS Compatible AVI格式。例如將一個AVI格式的視頻轉(zhuǎn)碼為MPG格式,只需輸入以下命令行:ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg便可以將目標(biāo)文件myfile從AVI格式轉(zhuǎn)碼為MPG格式,在TMP文件夾中以VCD的名稱和MPG的格式存儲。
然而用戶仍然可以手動設(shè)置符合標(biāo)準(zhǔn)的視頻格式,下面命令行是上述命令行的拓展,其中-bf 2是指定該MPG格式為MPEG-2:ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg在日常工作中,由于很多視頻設(shè)備或視頻軟件只能夠解碼部分格式的視頻,例如移動播放設(shè)備所支持的視頻格式具有局限性,但是因為視頻文件的獲得是由多種渠道得來的,其格式并不一定符合存儲或播放設(shè)備的要求,所以用戶可以使用上述功能將所需視頻轉(zhuǎn)換為與設(shè)備或軟件相適應(yīng)的格式,便于視頻信息的播放與存儲。此外,在保證視頻可視質(zhì)量的條件下,該功能可以將占空間過大的視頻通過格式轉(zhuǎn)換的方式對視頻文件進行有效的壓縮,從而釋放存儲空間,因而使存儲設(shè)備的空間得到最大化的利用。
2、視頻采集: FFmpeg的視頻采集功能也非常強大,不僅可以采集視頻采集卡或USB攝像頭等輸出端輸出的圖像,還可以進行屏幕錄制,同時還支持以RTP(Real-time Transport Protocol,實時傳輸協(xié)議)方式將視頻流傳送給支持RTSP的流媒體服務(wù)器,支持直播應(yīng)用,信號延遲時間極短,在遠程視頻會議中起到重要作用。FFmpeg視頻采集可以分為以下兩種:
(1)FFmpeg在Linux操作系統(tǒng)下的視頻采集
在Linux平臺上,ffmpeg對V4L2的視頻設(shè)備提供了很好的支持,如:./ffmpeg -t 10 -f video4linux2 -s 176*144 -r 8 -i /dev/video0 -vcodec h263 -f rtp rtp://192.168.1.105:5060 > /tmp/ffmpeg.sdp以上命令表示:采集10秒鐘視頻,對video4linux2視頻設(shè)備進行采集,采集QCIF(176 C ?44)的視頻,每秒8幀,視頻設(shè)備為/dev/video0,視頻編碼為H263,輸出格式為RTP,后面定義了IP地址及端口,將該碼流所對應(yīng)的SDP文件重定向到/tmp/ffmpeg.sdp中,將此SDP文件上傳到流媒體服務(wù)器就可以實現(xiàn)直播了。
(2)FFmpeg在Windows操作系統(tǒng)下的視頻采集
在Windows下關(guān)于FFmpeg視頻采集的資料較少,但是FFmpeg還是支持Windows下視頻采集的。FFmpeg支持Windows下video for Windows(VFW)設(shè)備的視頻采集,不過VFW設(shè)備已經(jīng)過時,正在被WDM 即Wavelength Division Multiplexing,波分多路復(fù)用的視頻設(shè)備所取代,但是ffmpeg還沒有支持WDM的計劃,不過好像有將WDM轉(zhuǎn)為VFW的工具,因此ffmpeg還是可以在windows下進行視頻采集的。
3、音頻提?。?/ffmpeg? -y -i "C:\Users\Public\Videos\Sample Videos\Wildlife.wmv" -acodec libmp3lame -b:a 160k -ac 2 -ar 44100 "C:\Users\Tianshu Yin\Documents\Wildlife.mp3"上述命令執(zhí)行后該程序便將WMV格式視頻中的音頻部分以mp3的格式提取出來。事實上,F(xiàn)Fmpeg可以將絕大多數(shù)視頻格式中的音頻提取出來,便于用戶對所需音頻部分進行進一步的解碼轉(zhuǎn)碼、分析和存儲。
4、視頻截圖。利用此功能,用戶可以從攝像機、攝像頭攝制或從互聯(lián)網(wǎng)上下載的視頻文件中截取圖片:ffmpeg -i test.avi -r 1 -s WxH -f image2 test-%03d.jpeg上述命令可以將目標(biāo)文件即AVI格式的test從開始處以1幀/秒的速度進行截圖操作,所形成的圖片將以‘test-001.jpeg, ‘test-002.jpeg等文件形式存儲在電腦中,所形成的新圖片文件可以根據(jù)用戶的需求重新調(diào)整縱橫比。此外,如果視頻文件較大,用戶還可以將-ss命令符添加到命令行中,從而可以實現(xiàn)在視頻文件中選擇其中某一時間點開始進行截圖操作,所截圖片數(shù)量適中,不會出現(xiàn)整個視頻文件都被截圖產(chǎn)生大量圖片的情況,防止非必須的存儲空間浪費。
參考文獻:
[1]郭晶晶;劉光堯;汪磊;李志剛;FFmpeg在視頻圖像處理中的應(yīng)用[J]; 刑事技術(shù);2020年第 45期