姜 文,劉立康
(西安電子科技大學(xué) 通信工程學(xué)院,陜西 西安 710071)
隨著云計算技術(shù)的不斷發(fā)展,媒體云化服務(wù)也發(fā)展迅速,許多公司都在開發(fā)視頻云轉(zhuǎn)碼軟件產(chǎn)品。云轉(zhuǎn)碼軟件在產(chǎn)品開發(fā)與運營階段都涉及到視頻文件庫管理。目前主流的視頻文件類型很多,每類視頻文件都涉及大量相關(guān)參數(shù),僅依靠視頻文件的擴展名進行分類管理,已經(jīng)無法滿足云轉(zhuǎn)碼軟件對視頻文件庫管理的需求。因此需要對視頻文件按照擴展名(文件類型)進行一級分類之后,再針對同一文件類型的視頻文件提取特定重點參數(shù)信息,按照參數(shù)值進行二級分類;同時將視頻庫文件中所有視頻文件提取出來的參數(shù)信息寫入相關(guān)索引文件歸檔,索引文件通常為CSV文件或Excel文件。
MediaInfo是目前通用的多媒體文件參數(shù)信息提取的開源軟件,MediaInfo工具根據(jù)用戶的不同需求有三種形式的工具。文中介紹了MediaInfo工具的基本功能,結(jié)合實例詳細敘述了三種形式MediaInfo工具的使用方法,最后介紹了MediaInfo工具在云轉(zhuǎn)碼視頻文件庫管理中的應(yīng)用。
多媒體技術(shù)[1-7]可以處理文本、圖形、圖像、音頻、動畫、視頻等多種媒體。
(1)文本:文本包含字母、數(shù)字、字、詞語等基本元素。
(2)圖像:圖像即位圖圖像,由像素構(gòu)成。
(3)圖形:圖形即矢量圖,通常由繪圖軟件繪制生成,文件存儲格式有3ds、dxf、wmf等。圖形文件也可以采用圖像格式保存。
(4)聲音:聲音屬于聽覺媒體,包含音效、語音和音樂。
(5)動畫:動畫是通過一系列彼此有差別的單個畫面,通過一定速度的播放達到畫中圖像連續(xù)變化的效果。
(6)視頻:視頻是由連續(xù)的畫面組成動態(tài)圖像的一種方式,其中的每一幅圖像稱為一幀(frame)。視頻文件可以單純由視頻流組成,也可以隨視頻流同時播放音頻流共同組成。
動畫和視頻都建立在活動幀的基礎(chǔ)上,區(qū)別在于動畫的畫面是人工生成的,而視頻的畫面是客觀場景,二者可以采用相同的文件格式保存。視頻文件中的影視文件通常包含視頻流、音頻流和文本(字幕)多個媒體要素。
CSV(comma-separated values)文件,即逗號分隔值文件,其文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本)。CSV文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號或制表符。
這種文件格式經(jīng)常用來作為不同程序之間數(shù)據(jù)交互的格式??梢允褂梦谋疚募问酱蜷_,也可以以Excel表格形式打開,以Excel表格形式打開能夠方便地針對文件中的數(shù)據(jù)進行分析和處理。
MediaInfo[8-9]是一款用來分析圖像、視頻與音頻文件的編碼和屬性內(nèi)信息的開源軟件。MediaInfo軟件支持目前各類主流格式的圖像、音、視頻文件的信息獲取,可以獲取媒體文件的各種類型參數(shù)信息。
媒體文件的參數(shù)眾多,按照參數(shù)可以分為7類:
(1)全局參數(shù)(general parameter)。
媒體文件的整體相關(guān)參數(shù):ID、文件完整名稱、文件名稱、標題、作者、專輯名、音軌號、格式、日期、總持續(xù)時間、文件大小等。
(2)視頻參數(shù)(video parameter)。
媒體文件中視頻流的相關(guān)參數(shù):ID、格式、編解碼器、持續(xù)時間、碼率、寬度、高度、畫面比例、幀率、幀率模式、色彩空間、色度抽樣、位深、掃描方式、流大小等。
(3)音頻參數(shù)(audio parameter)。
媒體文件中音頻流的相關(guān)參數(shù):ID、格式、編解碼器、持續(xù)時間、碼率模式、碼率、聲道、聲道位置、采樣率、幀率、位深、壓縮方式、流大小、語言等。
(4)文本參數(shù)(text parameter)。
媒體文件中字幕的相關(guān)參數(shù):ID、格式、編解碼器、壓縮方式、標題、語言等。
(5)菜單參數(shù)(menu parameter)。
媒體文件中可以選擇的菜單參數(shù):菜單數(shù)目、菜單ID、菜單名稱、格式、編碼、語言等。
(6)圖像參數(shù)(image parameter)。
媒體文件中圖像的相關(guān)參數(shù):格式、寬度、高度、色彩空間、色度抽樣、位深、壓縮方式、流大小等。
(7)其他參數(shù)(other parameter)。
媒體文件中包含的其他對象的參數(shù):對象數(shù)目、ID、類型、名稱、格式、編碼、語言等。
支持大多數(shù)主流媒體編碼格式,大致可分為4類:
(1)視頻格式:MKV、OGM、AVI、DivX、WMV、QuickTime、Real、MPEG-1、MPEG-2、MPEG-4、DVD(VOB)等。(編碼器:DivX、XviD、MSMPEG4、ASP、H.264、AVC……)。
(2)音頻格式:OGG、MP3、WAV、RA、AC3、DTS、AAC、M4A、AU、AIFF等。
(3)字幕格式:SRT、SSA、ASS、SAMI等。
(4)圖像格式:jpeg、bmp、tiff、png、gif、psd等。
MediaInfo工具可以選擇中文、英文、俄文、德文、法文、西班牙文、葡萄牙文、日文、朝鮮文等幾十種語言查看媒體文件參數(shù)信息。
MediaInfo工具根據(jù)用戶的不同需求有三種形式的工具,分別是GUI圖形界面工具、CLI命令行工具和DLL動態(tài)庫工具。
圖形界面工具在圖形界面上查看媒體文件的參數(shù)信息。圖形界面分為三個區(qū)域:上方為菜單區(qū),左側(cè)為工具欄,其余部分為信息顯示區(qū)。通過菜單或工具欄進行媒體文件參數(shù)信息的查閱和處理,如圖1所示。
圖1 GUI圖形界面工具的視頻文件參數(shù)信息顯示圖
3.1.1 通用的參數(shù)信息查看方式
可以查看媒體文件常見的主要參數(shù)信息。
(1)打開媒體文件。
可以選擇單個媒體文件查看該文件的參數(shù)信息,也可以選擇文件夾查看文件夾中全體媒體文件的參數(shù)信息。
(2)參數(shù)信息顯示格式。
參數(shù)信息可以采用多種查看方式:基本、文本、表格、樹形圖、網(wǎng)頁、XML等顯示格式,通過子菜單選擇具體顯示格式。
(3)查看更多的參數(shù)信息。
在菜單中選擇“調(diào)試→高級模式”,可以查閱到更多的媒體文件參數(shù)信息。
(4)參數(shù)信息導(dǎo)出。
可以通過菜單或工具欄導(dǎo)出媒體文件參數(shù)信息,導(dǎo)出文件的格式有文本、xml、csv、html等。
3.1.2 自定義的參數(shù)信息查看方式
有時用戶需要根據(jù)自己的需求查看媒體文件特定參數(shù)信息,圖形界面工具通過用戶自定義方式來實現(xiàn)視頻文件對指定參數(shù)信息進行查看與結(jié)果導(dǎo)出。
1.自定義媒體文件參數(shù)信息提取實例。
實例:A:pt為自定義參數(shù)列表,在文件夾H:/movies/temp2中有多種類型的多媒體文件,查看文件夾中每個文件在pt中自定義的參數(shù)信息,并將查看結(jié)果寫入TXT或CSV文件。
pt=["FileName","FrameRate_Mode","ScanType","Width","Height","DisplayAspectRatio"]
2.實現(xiàn)過程。
實例A中媒體文件參數(shù)信息查看的實現(xiàn)過程。
(1)打開圖形化界面的MediaInfo工具,在選項中選擇“選項→參數(shù)設(shè)置”或者點擊工具左側(cè)第四個按鈕,在彈出的對話框中“自定義”選項簽中點擊“自定義”選項。
(2)在“自定義”頁簽下新建自定義參數(shù)模板文件,編輯該文件。根據(jù)參數(shù)類型在參數(shù)域中設(shè)置需要的參數(shù)名稱。對于實例A,General域下需要設(shè)置視頻文件名稱參數(shù)(FileName);Video域下需要的參數(shù)有:幀率模式、掃描方式、片源寬度、片源高度、畫面比例(FrameRate_Mode,ScanType,Width,Height,DisplayAspectRatio)。編輯完成后,保存模板文件。模板文件存放在MediaInfo工具的安裝路徑的PluginCustom路徑下。
(3)打開媒體文件夾,在選項中選擇“查看→自定義”就可以顯示出文件夾中媒體文件在實例A中定義參數(shù)的參數(shù)值。
(4)將自定義的媒體文件參數(shù)信息顯示出來后,使用MediaIndo工具左側(cè)的第三個按鈕,可以導(dǎo)出媒體文件的參數(shù)信息。導(dǎo)出結(jié)果文件類型可以是txt或csv文件。選擇導(dǎo)出文件為csv格式,在創(chuàng)建自定義參數(shù)模板文件時,針對多個參數(shù),需要在每個參數(shù)之間以逗號進行分隔。
CLI(MediaInfo command line interface)命令行工具提供額外的功能來查詢媒體文件特定參數(shù)的值,工具通過批處理文件提取媒體文件的參數(shù)值。根據(jù)不同的操作系統(tǒng),可以分為Windows操作系統(tǒng)下使用的命令行工具與Linux操作系統(tǒng)下使用的命令行工具。
在Windows操作系統(tǒng)下,安裝包MediaInfo_CLI_0.7.78_Windows_i386.zip放置到指定的路徑下,安裝包解壓后就可以使用MediaInfo命令行工具。
指令格式:Usage:mediainfo [-Options...] File-name1 [Filename2...]
在計算機中選擇“開始”→“附件”→“命令提示符”,進入命令行工具MediaInfo.exe所在的路徑,可以選擇多種參數(shù),執(zhí)行命令行工具獲取各種信息。
通過編寫批處理腳本,可以獲取媒體文件或者文件夾中多個媒體文件的各種參數(shù)信息。對于實例A,BAT批處理腳本的核心代碼如下:
for /f "delims==" %%j in('dir %Video_Path%*.mp4 /b') do (%MediaInfo_Path%MediaInfo.exe --Inform=file://%MediaInfo_Path%Test.txt "%Video_Path%\%%j" -output >> "%MediaInfo_Path%mp4.txt")
代碼注解:
(1)%Video_Path%為視頻文件路徑,%MediaInfo_Path%為CLI工具路徑。
(2)為了簡化批處理腳本的編寫,可以將查看的參數(shù)寫入一個Text.txt文件,Text.txt文件的內(nèi)容如下所示:
General;%FileName%
Video; %Encoded_Application% %FrameRate_Mode% %ScanType% %Height% %Width%%Resolution% %DisplayAspectRatio%
(3)-output參數(shù)實現(xiàn)將提取到的媒體文件參數(shù)信息寫入mp4.txt文件。
BAT批處理文件可以操作目錄和文件,在上述BAT腳本的基礎(chǔ)上增加操作目錄和拷貝文件的相關(guān)操作命令,可以實現(xiàn)對視頻文件庫的分類管理。
MediaInfo.dll動態(tài)庫文件支持在C++、VB、C#、Java、Python以及Delphi等多種主流編程語言進行程序設(shè)計,如表1所示。
表1 動態(tài)庫程序設(shè)計語言
在程序開發(fā)過程中需要將相應(yīng)接口文件加入軟件工程項目中,將動態(tài)庫MediaInfo.dll和多媒體文件放置在指定的文件夾中。
Python[10-13]是一種解釋型、面向?qū)ο蟆討B(tài)數(shù)據(jù)類型的高級程序設(shè)計語言。Python語言不需要編譯,使用十分方便,在軟件開發(fā)中應(yīng)用廣泛。下面以Python2為例介紹MediaInfo動態(tài)庫的程序編寫過程。使用PYHTON 2.7.9版本編寫代碼調(diào)用MediaInfo的動態(tài)庫。
對于實例A,Python2所調(diào)用動態(tài)庫的編程代碼如下:
from MediaInfoDLL import *
import os
import sys
import csv
import glob
zhw_files='H:/movies/temp2/*.mp4'
MI=MediaInfo()
csvfile=file('csv_test12.csv', 'wb')
writer=csv.writer(csvfile)
row=[]
pt=[u"FrameRate_Mode",u"ScanType",u"Height",u"Width",u"DisplayAspectRatio"]
pt1=["FileName","FrameRate_Mode","ScanType","Height","Width","DisplayAspectRatio"]
writer.writerow(pt1)
for child inglob.glob(zhw_files):
MI.Open(child.decode('gbk'))
p=MI.Get(Stream.General, 0, u"FileName")
row.append(p.encode('gbk'))
forcs in pt:
row.append(MI.Get(Stream.Video, 0,cs) )
writer.writerow(row)
row=[]
csvfile.close()
MI.Close()
程序注解:
(1)使用from MediaInfoDLL import *在*.,導(dǎo)入MediaInfo.DLL動態(tài)庫。
(2)自定義參數(shù)存放在pt1列表中。
(3)導(dǎo)入Python標準庫glob模塊,定義文件匹配模式,檢索匹配的文件。
(4)對于中文媒體文件名,MI.Open打開文件的時候需要將解碼設(shè)為‘gbk’,(MI.Open(child.decode('gbk')))。
(5)在csv文件中添加中文字符串時,需要將編碼設(shè)為‘gbk’,(row.append(p.encode('gbk')))。
Python2程序執(zhí)行之后,生成的結(jié)果文件為csv文件,采用Excel打開后,文件內(nèi)容如圖2所示。
圖2 視頻文件特定參數(shù)信息
Python語言可以很方便地進行目錄和文件操作,可以直接讀寫Excel文件。在上述程序的基礎(chǔ)上可以開發(fā)具有更多功能的管理工具,實現(xiàn)對視頻文件庫的自動化分類管理和索引文件更新。
MediaInfo工具具有三種形式,特點如表2所示。
表2 MediaInfo三種工具的特點
目前主流視頻文件類型[14-18]有M3U8、ASF、WMV、AVI、FLV、MKV、MOV、MP4、3GP、MPG、TS等。A產(chǎn)品是在研究的視頻云轉(zhuǎn)碼軟件產(chǎn)品,支持離線視頻轉(zhuǎn)碼功能。A產(chǎn)品服務(wù)處理的視頻文件類型主要有3類:mpg文件、ts文件和mp4文件。結(jié)合工作實踐,敘述MediaInfo工具在云轉(zhuǎn)碼視頻文件管理中的應(yīng)用。
視頻云轉(zhuǎn)碼軟件在產(chǎn)品開發(fā)與測試過程中,需要對大量視頻文件進行產(chǎn)品功能驗證與測試。在軟件開發(fā)的整個過程中,需要部署和管理視頻文件庫,對視頻文件進行有效的管理能在很大程度上提升產(chǎn)品開發(fā)驗證與測試的效率。
視頻文件庫按照如下方式管理視頻文件:
(1)按照目前支持的三類視頻文件類型進行一級分類,將文件類型相同的視頻文件歸檔在同一目錄路徑下。
(2)對于同一文件類型的視頻文件,提取特定重點參數(shù)的參數(shù)信息,寫入*.csv文件或Excel文件,該文件作為視頻庫的索引文件,以便查閱和歸檔管理。有時還需要根據(jù)視頻文件的某些特定重點參數(shù),對已經(jīng)進行一級分類的視頻文件根據(jù)這些重點參數(shù)的參數(shù)值,再進行二級分類。
(3)隨著視頻云轉(zhuǎn)碼軟件產(chǎn)品的開發(fā)進度,轉(zhuǎn)碼的片源文件類型和文件數(shù)量將不斷增加,針對新增加的片源文件,需要不斷更新視頻文件庫和視頻文件庫中的索引文件。
(4)對于出現(xiàn)轉(zhuǎn)碼失敗以及轉(zhuǎn)碼之后有問題的片源文件,需要單獨歸檔以及制作索引文件,建立問題片源庫;按照出現(xiàn)的問題類型進行一級分類,按照文件類型進行二級分類,按照特定重點參數(shù)進行三級分類;同時也要及時進行問題視頻文件庫和問題視頻文件信息索引文件的更新。
工作實踐表明,在視頻文件庫的管理過程中,靈活應(yīng)用MediaInfo工具可以處理遇到的各種問題,做好視頻文件管理工作。
4.2.1 存在的問題和問題定位
客戶使用A產(chǎn)品對一批新的視頻文件進行轉(zhuǎn)碼時,出現(xiàn)了大批量視頻轉(zhuǎn)碼失敗。產(chǎn)品售后工程師與產(chǎn)品運維工程師共同定位后發(fā)現(xiàn),由于客戶方提供的待轉(zhuǎn)碼視頻文件中大部分文件的幀率模式視頻參數(shù)是可變幀模式(FrameRate_Mode:VFR),這種類型的視頻文件A產(chǎn)品目前還不支持,因此導(dǎo)致出現(xiàn)大量的視頻轉(zhuǎn)碼失敗。
測試人員可以根據(jù)定位結(jié)論,采用MediaInfo工具分別針對客戶局點的三類視頻文件*.mp4,*.ts以及*.mpg進行幀率模式參數(shù)值檢查。在檢查過程中發(fā)現(xiàn),轉(zhuǎn)碼失敗的mp4類視頻文件的幀率模式為“可變模式”(FrameRate_Mode:VFR),不符合A產(chǎn)品的轉(zhuǎn)碼要求;同時查出部分視頻文件的掃描方式是隔行掃描(ScanType:Interlaced),也不符合轉(zhuǎn)碼要求。
4.2.2 問題處理
對于不符合轉(zhuǎn)碼要求的視頻文件需要進行分類管理,編寫相關(guān)的索引文件。應(yīng)用MediaInfo工具通常有三種處理方式。
(1)圖形界面工具。
在圖形界面工具中,采用自定義方式打開文件夾,查看全體視頻文件的參數(shù)FrameRate_Mode和ScanType的參數(shù)值,并導(dǎo)出結(jié)果文件(通常為txt文件)。根據(jù)結(jié)果文件,手動生成相關(guān)目錄對存在問題視頻文件進行分類處理,手動填寫Excel文件生成索引文件。
(2)命令行工具。
編寫bat批處理腳本,查看全體視頻文件的參數(shù)FrameRate_Mode和ScanType的參數(shù)值,根據(jù)參數(shù)值,生成相關(guān)目錄自動對存在問題的視頻文件進行分類處理,并導(dǎo)出結(jié)果文件(通常為txt文件)。根據(jù)結(jié)果文件,手動填寫Excel文件生成索引文件。
(3)動態(tài)庫編程。
采用Python2調(diào)用MediaInfo動態(tài)庫編寫程序,開發(fā)一個小工具。使用該工具查看全體視頻文件的參數(shù)FrameRate_Mode和ScanType的參數(shù)值,自動完成存在問題的視頻文件進行分類處理,自動生成csv或者Excel索引文件。
三種方式各有優(yōu)點,GUI工具簡單方便,但效率低;動態(tài)庫編程自動化程度高,但是需要有一定的編程能力;命令行工具介于二者之間。根據(jù)實際情況可以選擇不同的處理方法。
工作實踐表明,使用MediaInfo工具可以很方便地提取視頻文件的各種參數(shù)信息。MediaInfo工具有三種形式,可以滿足產(chǎn)品開發(fā)工程師與測試工程師對工具的不同需求,提升云轉(zhuǎn)碼產(chǎn)品的開發(fā)與測試效率。在視頻文件庫的管理中靈活應(yīng)用MediaInfo工具,可以很方便地實現(xiàn)對視頻文件的分類管理,生成和更新視頻文件庫的索引文件,極大地提升管理工作效率。
參考文獻:
[1] 王志軍,柳彩志.多媒體技術(shù)及應(yīng)用[M].第2版.北京:高等教育出版社,2016.
[2] 方其桂.多媒體技術(shù)及應(yīng)用實例教程[M].北京:清華大學(xué)出版社,2016.
[3] HAVALDAR P,MEDIONI G.Multimedia systems:algorithms,standards and industry practices[M].Boston,MA,U.S:Course Technology,2009.
[4] LI Z, DREW M S. Fundamentals of multimedia[M].New Jersey,U.S:Pearson Education,2004.
[5] BOVIK A.Handbok of image and video processing[M].2nd ed.Cambridge,Massachusetts,U.S:Academic Press,2005.
[6] TEKALP M A. Digital video processing[M].2nd ed.New Jersey,U.S:Prentice Hall,2015.
[7] 楊雅媛,馮晶瑩,張 爽,等.視頻及圖像處理使用教程[M].北京:清華大學(xué)出版社,2015.
[8] 李海彬.淺談MediaInfo及其在廣電行業(yè)中的應(yīng)用[J].影視制作,2017,23(3):64-67.
[9] 李 斌.自制一個視頻文件管理器(一)[J].電腦編程技巧與維護,2014(11):65-66.
[10] MICHéLE B,KARPOW A.Demo:using malicious media files to compromise the security and privacy of smart TVs[C]//11th annual IEEE consumer communications and networking conference.[s.l.]:IEEE,2014:1144-1145.
[11] BATALLA J M,KRAWIEC P,MAVROMOUSTAKIS C X,et al.Efficient media streaming with collaborative terminals for the smart city environment[J].IEEE Communications Magazine,2017,55(1):98-104.
[12] HELLMANN D.Python標準庫[M].劉 熾,譯.北京:機械工業(yè)出版社,2013.
[13] SWEIGART A I.Python編程快速上手:讓繁瑣工作自動化[M].王海鵬,譯.北京:人民郵電出版社,2016.
[14] 曹 強.數(shù)字音頻規(guī)范與程序設(shè)計:基于Visual C++[M].北京:中國水利水電出版社,2012.
[15] 路錦正,周冬梅.Visual C++音頻/視頻處理技術(shù)及工程實踐[M].北京:電子工業(yè)出版社,2009.
[16] 郭華源,秦開懷,毛 苗,等.雙視點3D視頻文件的裸眼立體組合投影實時顯示算法[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2015,27(9):1734-1742.
[17] 閆 彬,陳耀武.基于內(nèi)容的智能視頻監(jiān)控文件系統(tǒng)[J].計算機工程,2015,41(10):250-254.
[18] 吳國棟,劉政怡,王小帥.基于OpenCV的視頻目標檢索[J].計算機技術(shù)與發(fā)展,2014,24(11):210-213.