姜 文,劉立康
(西安電子科技大學 通信工程學院,陜西 西安 710071)
隨著云計算技術的不斷發展,媒體云化服務也發展迅速,許多公司都在開發視頻云轉碼軟件產品。云轉碼軟件在產品開發與運營階段都涉及到視頻文件庫管理。目前主流的視頻文件類型很多,每類視頻文件都涉及大量相關參數,僅依靠視頻文件的擴展名進行分類管理,已經無法滿足云轉碼軟件對視頻文件庫管理的需求。因此需要對視頻文件按照擴展名(文件類型)進行一級分類之后,再針對同一文件類型的視頻文件提取特定重點參數信息,按照參數值進行二級分類;同時將視頻庫文件中所有視頻文件提取出來的參數信息寫入相關索引文件歸檔,索引文件通常為CSV文件或Excel文件。
MediaInfo是目前通用的多媒體文件參數信息提取的開源軟件,MediaInfo工具根據用戶的不同需求有三種形式的工具。文中介紹了MediaInfo工具的基本功能,結合實例詳細敘述了三種形式MediaInfo工具的使用方法,最后介紹了MediaInfo工具在云轉碼視頻文件庫管理中的應用。
多媒體技術[1-7]可以處理文本、圖形、圖像、音頻、動畫、視頻等多種媒體。
(1)文本:文本包含字母、數字、字、詞語等基本元素。
(2)圖像:圖像即位圖圖像,由像素構成。
(3)圖形:圖形即矢量圖,通常由繪圖軟件繪制生成,文件存儲格式有3ds、dxf、wmf等。圖形文件也可以采用圖像格式保存。
(4)聲音:聲音屬于聽覺媒體,包含音效、語音和音樂。
(5)動畫:動畫是通過一系列彼此有差別的單個畫面,通過一定速度的播放達到畫中圖像連續變化的效果。
(6)視頻:視頻是由連續的畫面組成動態圖像的一種方式,其中的每一幅圖像稱為一幀(frame)。視頻文件可以單純由視頻流組成,也可以隨視頻流同時播放音頻流共同組成。
動畫和視頻都建立在活動幀的基礎上,區別在于動畫的畫面是人工生成的,而視頻的畫面是客觀場景,二者可以采用相同的文件格式保存。視頻文件中的影視文件通常包含視頻流、音頻流和文本(字幕)多個媒體要素。
CSV(comma-separated values)文件,即逗號分隔值文件,其文件以純文本形式存儲表格數據(數字和文本)。CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號或制表符。
這種文件格式經常用來作為不同程序之間數據交互的格式。可以使用文本文件形式打開,也可以以Excel表格形式打開,以Excel表格形式打開能夠方便地針對文件中的數據進行分析和處理。
MediaInfo[8-9]是一款用來分析圖像、視頻與音頻文件的編碼和屬性內信息的開源軟件。MediaInfo軟件支持目前各類主流格式的圖像、音、視頻文件的信息獲取,可以獲取媒體文件的各種類型參數信息。
媒體文件的參數眾多,按照參數可以分為7類:
(1)全局參數(general parameter)。
媒體文件的整體相關參數:ID、文件完整名稱、文件名稱、標題、作者、專輯名、音軌號、格式、日期、總持續時間、文件大小等。
(2)視頻參數(video parameter)。
媒體文件中視頻流的相關參數:ID、格式、編解碼器、持續時間、碼率、寬度、高度、畫面比例、幀率、幀率模式、色彩空間、色度抽樣、位深、掃描方式、流大小等。
(3)音頻參數(audio parameter)。
媒體文件中音頻流的相關參數:ID、格式、編解碼器、持續時間、碼率模式、碼率、聲道、聲道位置、采樣率、幀率、位深、壓縮方式、流大小、語言等。
(4)文本參數(text parameter)。
媒體文件中字幕的相關參數:ID、格式、編解碼器、壓縮方式、標題、語言等。
(5)菜單參數(menu parameter)。
媒體文件中可以選擇的菜單參數:菜單數目、菜單ID、菜單名稱、格式、編碼、語言等。
(6)圖像參數(image parameter)。
媒體文件中圖像的相關參數:格式、寬度、高度、色彩空間、色度抽樣、位深、壓縮方式、流大小等。
(7)其他參數(other parameter)。
媒體文件中包含的其他對象的參數:對象數目、ID、類型、名稱、格式、編碼、語言等。
支持大多數主流媒體編碼格式,大致可分為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工具可以選擇中文、英文、俄文、德文、法文、西班牙文、葡萄牙文、日文、朝鮮文等幾十種語言查看媒體文件參數信息。
MediaInfo工具根據用戶的不同需求有三種形式的工具,分別是GUI圖形界面工具、CLI命令行工具和DLL動態庫工具。
圖形界面工具在圖形界面上查看媒體文件的參數信息。圖形界面分為三個區域:上方為菜單區,左側為工具欄,其余部分為信息顯示區。通過菜單或工具欄進行媒體文件參數信息的查閱和處理,如圖1所示。

圖1 GUI圖形界面工具的視頻文件參數信息顯示圖
3.1.1 通用的參數信息查看方式
可以查看媒體文件常見的主要參數信息。
(1)打開媒體文件。
可以選擇單個媒體文件查看該文件的參數信息,也可以選擇文件夾查看文件夾中全體媒體文件的參數信息。
(2)參數信息顯示格式。
參數信息可以采用多種查看方式:基本、文本、表格、樹形圖、網頁、XML等顯示格式,通過子菜單選擇具體顯示格式。
(3)查看更多的參數信息。
在菜單中選擇“調試→高級模式”,可以查閱到更多的媒體文件參數信息。
(4)參數信息導出。
可以通過菜單或工具欄導出媒體文件參數信息,導出文件的格式有文本、xml、csv、html等。
3.1.2 自定義的參數信息查看方式
有時用戶需要根據自己的需求查看媒體文件特定參數信息,圖形界面工具通過用戶自定義方式來實現視頻文件對指定參數信息進行查看與結果導出。
1.自定義媒體文件參數信息提取實例。
實例:A:pt為自定義參數列表,在文件夾H:/movies/temp2中有多種類型的多媒體文件,查看文件夾中每個文件在pt中自定義的參數信息,并將查看結果寫入TXT或CSV文件。
pt=["FileName","FrameRate_Mode","ScanType","Width","Height","DisplayAspectRatio"]
2.實現過程。
實例A中媒體文件參數信息查看的實現過程。
(1)打開圖形化界面的MediaInfo工具,在選項中選擇“選項→參數設置”或者點擊工具左側第四個按鈕,在彈出的對話框中“自定義”選項簽中點擊“自定義”選項。
(2)在“自定義”頁簽下新建自定義參數模板文件,編輯該文件。根據參數類型在參數域中設置需要的參數名稱。對于實例A,General域下需要設置視頻文件名稱參數(FileName);Video域下需要的參數有:幀率模式、掃描方式、片源寬度、片源高度、畫面比例(FrameRate_Mode,ScanType,Width,Height,DisplayAspectRatio)。編輯完成后,保存模板文件。模板文件存放在MediaInfo工具的安裝路徑的PluginCustom路徑下。
(3)打開媒體文件夾,在選項中選擇“查看→自定義”就可以顯示出文件夾中媒體文件在實例A中定義參數的參數值。
(4)將自定義的媒體文件參數信息顯示出來后,使用MediaIndo工具左側的第三個按鈕,可以導出媒體文件的參數信息。導出結果文件類型可以是txt或csv文件。選擇導出文件為csv格式,在創建自定義參數模板文件時,針對多個參數,需要在每個參數之間以逗號進行分隔。
CLI(MediaInfo command line interface)命令行工具提供額外的功能來查詢媒體文件特定參數的值,工具通過批處理文件提取媒體文件的參數值。根據不同的操作系統,可以分為Windows操作系統下使用的命令行工具與Linux操作系統下使用的命令行工具。
在Windows操作系統下,安裝包MediaInfo_CLI_0.7.78_Windows_i386.zip放置到指定的路徑下,安裝包解壓后就可以使用MediaInfo命令行工具。
指令格式:Usage:mediainfo [-Options...] File-name1 [Filename2...]
在計算機中選擇“開始”→“附件”→“命令提示符”,進入命令行工具MediaInfo.exe所在的路徑,可以選擇多種參數,執行命令行工具獲取各種信息。
通過編寫批處理腳本,可以獲取媒體文件或者文件夾中多個媒體文件的各種參數信息。對于實例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)為了簡化批處理腳本的編寫,可以將查看的參數寫入一個Text.txt文件,Text.txt文件的內容如下所示:
General;%FileName%
Video; %Encoded_Application% %FrameRate_Mode% %ScanType% %Height% %Width%%Resolution% %DisplayAspectRatio%
(3)-output參數實現將提取到的媒體文件參數信息寫入mp4.txt文件。
BAT批處理文件可以操作目錄和文件,在上述BAT腳本的基礎上增加操作目錄和拷貝文件的相關操作命令,可以實現對視頻文件庫的分類管理。
MediaInfo.dll動態庫文件支持在C++、VB、C#、Java、Python以及Delphi等多種主流編程語言進行程序設計,如表1所示。

表1 動態庫程序設計語言
在程序開發過程中需要將相應接口文件加入軟件工程項目中,將動態庫MediaInfo.dll和多媒體文件放置在指定的文件夾中。
Python[10-13]是一種解釋型、面向對象、動態數據類型的高級程序設計語言。Python語言不需要編譯,使用十分方便,在軟件開發中應用廣泛。下面以Python2為例介紹MediaInfo動態庫的程序編寫過程。使用PYHTON 2.7.9版本編寫代碼調用MediaInfo的動態庫。
對于實例A,Python2所調用動態庫的編程代碼如下:
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 *在*.,導入MediaInfo.DLL動態庫。
(2)自定義參數存放在pt1列表中。
(3)導入Python標準庫glob模塊,定義文件匹配模式,檢索匹配的文件。
(4)對于中文媒體文件名,MI.Open打開文件的時候需要將解碼設為‘gbk’,(MI.Open(child.decode('gbk')))。
(5)在csv文件中添加中文字符串時,需要將編碼設為‘gbk’,(row.append(p.encode('gbk')))。
Python2程序執行之后,生成的結果文件為csv文件,采用Excel打開后,文件內容如圖2所示。

圖2 視頻文件特定參數信息
Python語言可以很方便地進行目錄和文件操作,可以直接讀寫Excel文件。在上述程序的基礎上可以開發具有更多功能的管理工具,實現對視頻文件庫的自動化分類管理和索引文件更新。
MediaInfo工具具有三種形式,特點如表2所示。

表2 MediaInfo三種工具的特點
目前主流視頻文件類型[14-18]有M3U8、ASF、WMV、AVI、FLV、MKV、MOV、MP4、3GP、MPG、TS等。A產品是在研究的視頻云轉碼軟件產品,支持離線視頻轉碼功能。A產品服務處理的視頻文件類型主要有3類:mpg文件、ts文件和mp4文件。結合工作實踐,敘述MediaInfo工具在云轉碼視頻文件管理中的應用。
視頻云轉碼軟件在產品開發與測試過程中,需要對大量視頻文件進行產品功能驗證與測試。在軟件開發的整個過程中,需要部署和管理視頻文件庫,對視頻文件進行有效的管理能在很大程度上提升產品開發驗證與測試的效率。
視頻文件庫按照如下方式管理視頻文件:
(1)按照目前支持的三類視頻文件類型進行一級分類,將文件類型相同的視頻文件歸檔在同一目錄路徑下。
(2)對于同一文件類型的視頻文件,提取特定重點參數的參數信息,寫入*.csv文件或Excel文件,該文件作為視頻庫的索引文件,以便查閱和歸檔管理。有時還需要根據視頻文件的某些特定重點參數,對已經進行一級分類的視頻文件根據這些重點參數的參數值,再進行二級分類。
(3)隨著視頻云轉碼軟件產品的開發進度,轉碼的片源文件類型和文件數量將不斷增加,針對新增加的片源文件,需要不斷更新視頻文件庫和視頻文件庫中的索引文件。
(4)對于出現轉碼失敗以及轉碼之后有問題的片源文件,需要單獨歸檔以及制作索引文件,建立問題片源庫;按照出現的問題類型進行一級分類,按照文件類型進行二級分類,按照特定重點參數進行三級分類;同時也要及時進行問題視頻文件庫和問題視頻文件信息索引文件的更新。
工作實踐表明,在視頻文件庫的管理過程中,靈活應用MediaInfo工具可以處理遇到的各種問題,做好視頻文件管理工作。
4.2.1 存在的問題和問題定位
客戶使用A產品對一批新的視頻文件進行轉碼時,出現了大批量視頻轉碼失敗。產品售后工程師與產品運維工程師共同定位后發現,由于客戶方提供的待轉碼視頻文件中大部分文件的幀率模式視頻參數是可變幀模式(FrameRate_Mode:VFR),這種類型的視頻文件A產品目前還不支持,因此導致出現大量的視頻轉碼失敗。
測試人員可以根據定位結論,采用MediaInfo工具分別針對客戶局點的三類視頻文件*.mp4,*.ts以及*.mpg進行幀率模式參數值檢查。在檢查過程中發現,轉碼失敗的mp4類視頻文件的幀率模式為“可變模式”(FrameRate_Mode:VFR),不符合A產品的轉碼要求;同時查出部分視頻文件的掃描方式是隔行掃描(ScanType:Interlaced),也不符合轉碼要求。
4.2.2 問題處理
對于不符合轉碼要求的視頻文件需要進行分類管理,編寫相關的索引文件。應用MediaInfo工具通常有三種處理方式。
(1)圖形界面工具。
在圖形界面工具中,采用自定義方式打開文件夾,查看全體視頻文件的參數FrameRate_Mode和ScanType的參數值,并導出結果文件(通常為txt文件)。根據結果文件,手動生成相關目錄對存在問題視頻文件進行分類處理,手動填寫Excel文件生成索引文件。
(2)命令行工具。
編寫bat批處理腳本,查看全體視頻文件的參數FrameRate_Mode和ScanType的參數值,根據參數值,生成相關目錄自動對存在問題的視頻文件進行分類處理,并導出結果文件(通常為txt文件)。根據結果文件,手動填寫Excel文件生成索引文件。
(3)動態庫編程。
采用Python2調用MediaInfo動態庫編寫程序,開發一個小工具。使用該工具查看全體視頻文件的參數FrameRate_Mode和ScanType的參數值,自動完成存在問題的視頻文件進行分類處理,自動生成csv或者Excel索引文件。
三種方式各有優點,GUI工具簡單方便,但效率低;動態庫編程自動化程度高,但是需要有一定的編程能力;命令行工具介于二者之間。根據實際情況可以選擇不同的處理方法。
工作實踐表明,使用MediaInfo工具可以很方便地提取視頻文件的各種參數信息。MediaInfo工具有三種形式,可以滿足產品開發工程師與測試工程師對工具的不同需求,提升云轉碼產品的開發與測試效率。在視頻文件庫的管理中靈活應用MediaInfo工具,可以很方便地實現對視頻文件的分類管理,生成和更新視頻文件庫的索引文件,極大地提升管理工作效率。
參考文獻:
[1] 王志軍,柳彩志.多媒體技術及應用[M].第2版.北京:高等教育出版社,2016.
[2] 方其桂.多媒體技術及應用實例教程[M].北京:清華大學出版社,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].北京:清華大學出版社,2015.
[8] 李海彬.淺談MediaInfo及其在廣電行業中的應用[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].劉 熾,譯.北京:機械工業出版社,2013.
[13] SWEIGART A I.Python編程快速上手:讓繁瑣工作自動化[M].王海鵬,譯.北京:人民郵電出版社,2016.
[14] 曹 強.數字音頻規范與程序設計:基于Visual C++[M].北京:中國水利水電出版社,2012.
[15] 路錦正,周冬梅.Visual C++音頻/視頻處理技術及工程實踐[M].北京:電子工業出版社,2009.
[16] 郭華源,秦開懷,毛 苗,等.雙視點3D視頻文件的裸眼立體組合投影實時顯示算法[J].計算機輔助設計與圖形學學報,2015,27(9):1734-1742.
[17] 閆 彬,陳耀武.基于內容的智能視頻監控文件系統[J].計算機工程,2015,41(10):250-254.
[18] 吳國棟,劉政怡,王小帥.基于OpenCV的視頻目標檢索[J].計算機技術與發展,2014,24(11):210-213.