吳凡+代毅+高冠南
摘 要:隨著Internet的普及,用戶原創(chuàng)內(nèi)容逐漸受到人們的重視,對教育視頻點播系統(tǒng)提出了新的要求,即為教育者和受教育者提供視頻上傳功能。然而當前視頻種類繁多,數(shù)字化處理后的視頻數(shù)據(jù)量非常大,如何有效壓縮視頻數(shù)據(jù)和音頻數(shù)據(jù)并將其存儲為適當?shù)母袷匠蔀榉掌鞫素酱鉀Q的問題。FFmpeg及MEncoder兩種開源、跨平臺的視頻壓縮處理命令行程序,已成為目前最流行的視頻壓縮和處理軟件核心。文章在測試二者差異性基礎上,結合二者優(yōu)點及視頻編碼信息,設計服務器端視頻轉碼模塊,為開發(fā)者提供服務器端統(tǒng)一視頻文件格式技術解決方案。
關鍵詞:教育視頻點播系統(tǒng);視頻轉碼;FFmpeg;MEncoder
中圖分類號:G431 文獻標志碼:B 文章編號:1673-8454(2014)10-0067-04
一、引言
計算機網(wǎng)絡技術逐漸成熟及多媒體應用日益普及的同時,視頻點播(VOD)系統(tǒng)開始興起并逐漸成為人們獲取網(wǎng)絡信息的重要手段,其在遠程教育中的應用已成為開展遠程教育的一個重要方面。[1]視頻點播系統(tǒng)以視聽、交互及根據(jù)用戶需求提供服務為特征應用于教育,不僅為受教育者提供實時同步的音、視頻等多種多媒體信息。同時,在一定程度上實現(xiàn)了按需教育,打破了傳統(tǒng)教育手段時間和空間上的局限,使受教育者可以根據(jù)自己的需求,自主選擇和獲取自己感興趣的各種多媒體信息。[2]
教育視頻點播(EVOD)系統(tǒng),即應用于教育的視頻點播系統(tǒng),其結構和數(shù)據(jù)傳輸方式與普通視頻點播系統(tǒng)相同,所不同的是視頻資料主要面向?qū)W生自主學習、學生課外知識拓展、教師課堂教學及教師專業(yè)發(fā)展等方面,一般要求具有科學性和教育性。[3]由此可見,教育視頻點播系統(tǒng)的發(fā)展很大程度上依賴于視頻點播技術的進步。Web 2.0的迅猛發(fā)展,移動網(wǎng)接入速度的提高,及終端處理能力的逐步增強,在推動視頻點播系統(tǒng)面向用戶參與、主導及建設的同時,對教育視頻點播系統(tǒng)也提出了新的要求。
二、教育視頻點播系統(tǒng)面臨的挑戰(zhàn)
互聯(lián)網(wǎng)的普及,催生了用戶原創(chuàng)內(nèi)容(UGC)的概念,即用戶將自己原創(chuàng)的內(nèi)容通過互聯(lián)網(wǎng)平臺分享給其他用戶。這表明用戶使用互聯(lián)網(wǎng)的方式已由以下載為主轉變?yōu)橄螺d與上傳并重。YouTube、MySpace、優(yōu)酷等主流視頻點播網(wǎng)站,都已支持原創(chuàng)視頻的上傳與分享功能。UGC在視頻點播系統(tǒng)的成功應用,對教育視頻點播系統(tǒng)提出了新的要求,即為教育者和受教育者提供視頻上傳功能,系統(tǒng)自動分享與維護,以方便教育資源傳播的便易性和快捷性,加強師生、生生之間的交流,進一步提高學生的學習效果及教師隊伍的教學水平。
目前教育視頻點播系統(tǒng)面向開放的同時,也面臨視頻編碼信息(格式、分辨率、編解碼器等)多元化而帶來的眾多視頻標準及大量不同格式的視頻信息交織在一起的混亂局面。[4]限定上載視頻格式雖然能夠解決此類問題,卻增加了使用者的負擔。如何將龐大的視頻數(shù)據(jù)和音頻數(shù)據(jù)進行有效壓縮并以適當格式存儲已成為教育視頻點播系統(tǒng)一個非常重要的問題。統(tǒng)一視頻文件格式,不僅有利于瀏覽器的兼容播放,降低受教育者使用成本,增強界面友好性,便于網(wǎng)站服務器端的管理,而且視頻素材易于應用到教學中,具有重要的意義。[5]針對這一問題,筆者主要對服務器端的兩種視頻格式轉換技術FFmpeg和MEncoder進行研究,為教育視頻點播系統(tǒng)開發(fā)者提供服務器端統(tǒng)一視頻文件格式技術解決方案。
三、視頻格式轉換技術
當前最流行的視頻壓縮和處理軟件核心為FFmpeg和MEncoder兩種。兩者都是開源、跨平臺的視頻壓縮處理命令行程序,而且很多FFmpeg的開發(fā)者同時也是Mplayer的開發(fā)者,所以兩者聯(lián)系緊密。此外,F(xiàn)Fmpeg和MEncoder也被廣泛應用于大多數(shù)的視頻播放軟件,例如暴風影音播放器利用了FFmpeg,Mplayer播放器利用了MEncoder。
1.FFmpeg
FFmpeg是如今應用非常廣泛的開源免費項目,提供對音視頻進行錄制、轉換及編解碼功能為一體的完整解決方案。它包含了目前領先的音視頻編解碼庫libavcodec,并對libavcodec庫中的很多codec重新開發(fā),以保證質(zhì)量和性能。FFmpeg基于Linux平臺開發(fā),但同樣可以在Windows等主流操作系統(tǒng)中編譯運行,很多優(yōu)秀的播放器如暴風影音、TCPMP、VLC都采用FFmpeg解碼器。
(1)FFmpeg的使用
FFmpeg的基本語法為:ffmpeg [inputfile_options] -i inputfile [outputfile_options] outputfile,其中inputfile_options為源文件格式選項,-i為讀取源文件命令,inputfile為帶有完全路徑的源視頻文件名(可以為硬盤中的文件、網(wǎng)絡流、設備中捕獲的音視頻等),outputfile_options為輸出文件格式選項,outputfile為帶有完全路徑的輸出文件名。FFmpeg常用options選項如下表 1所示。
(2)FFmpeg視頻格式轉換技術
FFmpeg命令行可實現(xiàn)視頻格式轉換及視頻圖片提取功能。視頻格式轉換命令如圖 1所示,此命令可將input.avi文件轉換為output.flv文件;設置輸出文件使用flv視頻編碼器,幀頻為24fps,視頻編碼碼率為500bps,分辨率為720×480;設置輸出文件使用mp3音頻編碼器,音頻采樣率為22050Hz,音頻編碼碼率為56kbps。
FFmpeg提取視頻圖片命令如圖 2所示,此命令實現(xiàn)每秒提取input.avi的一個視頻幀,并將圖片命名為“output-001.jpg”、“output-002.jpg”,“output-003.jpg”等。圖片的分辨率將由“W×H”的值重新設置。若要提取有限數(shù)量的幀,可以添加-vframes或-t選項,也可以添加-ss選項,從一個特定時間點開始提取圖片。
2.MEncoder
MEncoder是Linux視頻播放工具MPlayer自帶的編碼工具,是一個使用C語言開發(fā)的高效的視頻壓縮和格式轉換系統(tǒng)。MEncoder基于命令行使用,需要用命令行手工添加所需的各項參數(shù)。它支持各種視頻格式,可針對不同CPU指令集進行優(yōu)化編譯,能充分利用處理器性能,因此轉換速度快,1/10至1/2的播放時長就可完成。
(1)MEncoder的使用
MEncoder的基本語法為:mencoder inputfile[file|URL|-] [-o outputfile] [options],其中inputfile為帶有完全路徑的源視頻文件名(可以為硬盤中的文件或網(wǎng)頁地址);-o為輸出文件命令,outputfile帶有完全路徑的輸出文件名;options選項較為復雜,表 2列出了MEncoder部分選項。
(2)MEncoder視頻格式技術
MEncoder命令可實現(xiàn)視頻格式轉換功能。視頻格式轉換命令,如圖 3所示,此命令將input.avi文件轉換為output.flv文件;以mp3lame為編碼使用的音頻編碼器,lavc(Libavcodec)為編碼使用的視頻編碼器,由于Libavcodec包含了多種視頻編碼,故用vcodec指定使用FLV編碼;并設定以平均碼率編碼的音頻編碼碼率為56kbps,音頻采樣頻率為22050Hz,視頻編碼碼率為500kbps。
四、視頻格式轉換技術比較
1.功能比較
FFmpeg命令行可在輸入文件前添加選項、強制輸出格式,支持輸入文件的編解碼及從視頻中截取單幀圖片,而MEncoder不支持。[6]但在視頻壓縮方面,兩者的功能相差不大,主要差別在于MEncoder能夠編輯到所有FFmpeg的libavcodec所支持的編碼,[7]其支持的視頻格式較FFmpeg完整。例如MEncoder可轉換FFmpeg不支持的擴展名為.rm、.rmvb、.rt的文件。[8]
2.效率效果比較
本實驗基于Ubuntu 12.04操作系統(tǒng)安裝的FFmpeg及MEncoder轉換軟件,分別轉換同一高清視頻,從轉換視頻用時及輸出視頻的大小兩個角度,測試兩者轉換效率的差異。源視頻采用時長為超過1h20mn,碼率為3535Kbps,MPEG-4編碼的100段高清視頻片段,主要為滑雪運動畫面和人物敘事畫面,可以有效檢測視頻轉碼在壓縮動態(tài)和靜態(tài)畫面時的優(yōu)劣。FFmpeg及MEncoder均采用表 3中命令行選項提及的flv對視頻進行壓縮,mp3對音頻進行壓縮,設定音頻采樣率為22050Hz,視頻碼率為3000Kbp,幀頻為24fps,容器為flv。測試結果及分析如下:
例如,抽取源視頻文件大小為1.99GB(2,137,663,152 字節(jié))的滑雪視頻,轉碼后視頻大小見表 3。由于為了保持高清視頻轉碼后的清晰度,設定了較高的碼率,轉碼后的視頻大小相比源文件大小沒有較大的變化,但相同選項參數(shù)下,MEncoder壓縮率略高。在視頻轉換用時方面,F(xiàn)Fmpeg用時較少,編碼速度較高。在畫面效果方面,由于壓縮是有損的,輸出視頻相比源視頻清晰度都有一定程度的下降,且MEncoder相比FFmpeg轉碼后的視頻質(zhì)量略高。本實驗一共測試了所有的100段測試視頻,92%的視頻符合此規(guī)律。同時也有學者證實,F(xiàn)Fmpeg轉換.wmv和.asf文件時經(jīng)常出現(xiàn)花屏現(xiàn)象,轉換.mkv格式的效果也差。[8]
綜上所述,F(xiàn)Fmpeg的優(yōu)點在于編碼速度高、功能較全面、使用更加靈活,MEncoder的優(yōu)點在于可轉換的視頻種類多、質(zhì)量高,但是轉換速度較FFmpeg慢。因此,在視頻文件格式轉換時,應結合兩個編碼器的優(yōu)點及視頻格式、時長等視頻編碼信息,同時使用它們。首先,依據(jù)表4視頻格式集合分類所示,將wmv、rm、rmvb、rt等FFmpeg無法處理或處理不好的格式交給MEncoder處理;其次,依據(jù)視頻時長分類,將時長較大的視頻(如課例)交給FFmpeg處理,減少轉換用時,將時長較小的視頻(如“微課”)交給MEncoder處理,忽略轉換用時的略微差異,提高視頻轉換后的質(zhì)量。
五、視頻格式轉換模塊設計
考慮到FLV以其文件極小、加載速度極快,可以通過FlashPlayer在網(wǎng)頁上播放的特點,已成為視頻網(wǎng)站廣泛使用的流媒體格式。本服務器端視頻格式轉換模塊結合FFmpeg與MEncoder的優(yōu)點,同時使用它們,將上傳至服務器的所有格式的視頻轉換成符合要求的FLV格式視頻。整個視頻格式轉換模塊功能設計流程如圖 4所示。
遍歷視頻文件夾,判斷是否存在視頻文件,如果發(fā)現(xiàn)視頻文件,利用FFmpeg命令讀取視頻的屬性信息,包括時長、分辨率、格式、幀速、比特率等參數(shù),并根據(jù)表 4中視頻轉換的視頻格式集合分類,判斷其格式是否屬于FFmpeg可處理的格式集合;如果屬于,則判斷視頻時長是否較小,較小則調(diào)用MEncoder根據(jù)視頻的屬性信息執(zhí)行視頻轉換,時長較大則調(diào)用FFmpeg根據(jù)視頻的屬性信息執(zhí)行視頻轉換;如果不屬于,則調(diào)用MEncoder根據(jù)視頻的屬性信息執(zhí)行視頻轉換。待視頻轉換完成后,判斷視頻是否轉換成功。如果轉換成功,則執(zhí)行文件重命名、調(diào)用FFmpeg截取視頻縮略圖、刪除源視頻文件、保存處理信息等操作;如果轉換失敗,將錯誤信息寫入錯誤日志,再次遍歷視頻文件夾,當遍歷完視頻文件夾而沒有發(fā)現(xiàn)視頻文件時,退出程序。
六、結束語
鑒于目前教育視頻點播系統(tǒng)逐漸趨于開放,所面臨用戶上載視頻種類繁多的問題。本文通過測試及比較分析兩種當前最流行的視頻壓縮和處理軟件核心FFmpeg與MEncoder,并結合兩者優(yōu)勢及視頻編碼信息,設計服務器端視頻格式轉換模塊,為教育視頻點播系統(tǒng)開發(fā)者提供服務器端統(tǒng)一視頻文件格式技術解決方案。云計算的興起及云終端的普及,視頻點播系統(tǒng)已經(jīng)不再滿足于多種視頻格式上載并統(tǒng)一為一種格式的正向轉換,而趨向于云服務器根據(jù)網(wǎng)絡鏈接狀況和終端屏幕分辨率計算得到最佳效果的視頻提供給終端播放的逆向轉換。本研究將進一步研究基于云計算的教育視頻點播系統(tǒng),為教育者和受教育者提供適合當前終端的最佳效果的視頻。
參考文獻:
[1]吳艾,劉心松,符青云,劉克劍. DPVoD:基于P2P的視頻點播體系結構[J].計算機研究與發(fā)展, 2008(2).
[2]沈時軍,李三立.基于P2P的視頻點播系統(tǒng)綜述[J].計算機學報,2010(4).
[3]金智勇,孫樂傳,宋志明.基于校園網(wǎng)的視頻點播系統(tǒng)的構建及在教學中的應用[J].電化教育研究,2009(2).
[4]Ishfaq Ahmad , Xiaohui Wei , Yu Sun , Ya-qin Zhang.Video Transcoding: An Overview of Various Techniques and Research Issues[J]. IEEE TRANSACTIONS ON MULTIMEDIA, MULTIMEDIA, 2005, vol. 7, p. 793-804.
[5]陳少涌,林敏,梁仕鑾.基于開源軟件的視頻點播系統(tǒng)的設計與實現(xiàn)[J].中國教育信息化,2011(3):30-32.
[6]Berton D. Advanced video coding on Linux[J].Linux Journal,2006 (150): 74-77.
[7]Heikki Orsila, Jaco Geldenhuys, Anna Ruokonen, Imed Hammouda,Trust issues in open source software development, WUP '09 Proceedings of the Warm Up Workshop for ACM/IEEE ICSE 2010, P. 9-12.
[8]FFmpeg Documentation[DB/OL].http://www.ffmpeg.org/documentation.html.
(編輯:魯利瑞)