MXF文件结构浅析
MXF是英文Material eXchange Format(素材交換格式)的縮語。MXF是SMPTE(美國電影與電視工程師學(xué)會(huì))組織定義的一種專業(yè)音視頻媒體文件格式。MXF主要應(yīng)用于影視行業(yè)媒體制作、編輯、發(fā)行和存儲(chǔ)等環(huán)節(jié)。SMPTE為其定義的標(biāo)準(zhǔn)包括:SMPTE - 377M、SMPTE - EG41、SMPTE - EG42等,并不斷進(jìn)行更新和完善。它是一個(gè)外殼格式 而不是壓縮格式, 所以并不能保證每一款MXF文件 都能被任何一種解碼器識(shí)別。
MXF標(biāo)準(zhǔn)并非一成不變,一直在發(fā)展。SMPTE中MXF相關(guān)標(biāo)準(zhǔn)已經(jīng)有幾十個(gè)文檔,并且仍然在補(bǔ)充增加,SMPTE定義的只是MXF框架和一般原則,具體實(shí)現(xiàn)由各廠商自行完成,各大廠商自己實(shí)現(xiàn)的MXF,往往在新產(chǎn)品中也會(huì)發(fā)生一些變化。
1.MXF文件基本結(jié)構(gòu)
MXF文件包括三個(gè)主體部分:文件頭、文件體和文件尾。
文件頭提供文件的整體信息,包括用于解碼文件中所有視音頻數(shù)據(jù)的解碼器列表等。文件體由存儲(chǔ)在要素容器中的視音頻數(shù)據(jù)組成,來自不同數(shù)據(jù)軌(如視頻、音頻和時(shí)碼)的要素容器可能交錯(cuò)和分離地存儲(chǔ)在文件體中。文件尾用以結(jié)束一個(gè)MXF文件,包括一些在產(chǎn)生文件頭時(shí)還不確定的信息,如文件的視音頻長度等,文件尾的信息在某些場景中常常被忽略。
MXF文件也可包含一個(gè)可選的索引表(Index Table),該索引表可用于將基于采樣的索引(如時(shí)碼)快速換算到對應(yīng)的要素容器在<spanlang="en-us>">MXF文件中的偏移地址,以實(shí)現(xiàn)視音頻的快速預(yù)覽和定位。該索引表可分段存儲(chǔ),可位于基本數(shù)據(jù)段之前或之后,也可分插到基本數(shù)據(jù)段中間。
2.MXF底層數(shù)據(jù)結(jié)構(gòu)
MXF文件的所有數(shù)據(jù)都采用Key-Length-Value(KLV)進(jìn)行編碼以獲得格式的靈活性和可擴(kuò)展性,KLV編碼標(biāo)準(zhǔn)定義在SMPTE 336M中。實(shí)際上MXF文件就是若干連續(xù)KLV數(shù)據(jù)包的序列(除了可選的RUN-IN包)。
the key identifies the data, the length specifies thelength of the data, and the value is the data itself
Key:16字節(jié)的標(biāo)識(shí)符。
Length:數(shù)據(jù)(Value域)長度。BER(basic encoding rules)編碼方式,如83 00 00 88。
它使用可變長的字節(jié)來表示非常寬的長度范圍,該域總是按MSB(高字節(jié)優(yōu)先)編碼,如果第一個(gè)字節(jié)的bit7為0,那么低7位代表了0~127范圍的長度,如果bit7為1,那么低7位代表長度域的字節(jié)個(gè)數(shù)。
Value:KLV單元中包含的數(shù)據(jù)
3.MXF的邏輯結(jié)構(gòu)
MXF文件的邏輯模型是一種基于對象的數(shù)據(jù)結(jié)構(gòu),主要由頭部元數(shù)據(jù)中的結(jié)構(gòu)元數(shù)據(jù)定義。結(jié)構(gòu)元數(shù)據(jù)主要分為兩類,一類是與實(shí)踐特性有關(guān)的結(jié)構(gòu)結(jié)構(gòu)元數(shù)據(jù)包(Structural Metadata Package),一類是與素材或素材容器的特征參數(shù)相關(guān)的描述符(Descriptors)。每個(gè)結(jié)構(gòu)元數(shù)據(jù)包有1個(gè)或多個(gè)軌跡(Track)組成,每個(gè)軌跡是一段具有起始時(shí)間點(diǎn)、編輯速率的時(shí)間線,由一個(gè)具有一定持續(xù)時(shí)間的序列(Squence)組成,每個(gè)序列又由1個(gè)或多個(gè)源片段(SourceClip)組成。包(Package)、軌跡(Track)、序列(Squence)、源片段(SourceClip)通過UUID相互引用。
頂層文件包中的每一個(gè)軌跡分別對應(yīng)內(nèi)容容器中不同的類型并有相應(yīng)的描述符描述素材的特征信息,如像素、采樣率、畫幅比、聲道數(shù)、比特?cái)?shù)等。素材包通常為文件的輸出時(shí)間線,確定在播放或使用時(shí)文件中哪個(gè)內(nèi)容容器中的哪些內(nèi)容被播放,以及這些內(nèi)容如何同步。素材包中的源片段通過UUID引用,鏈接到頂層文件包中的某個(gè)軌跡。而素材元素元數(shù)據(jù)(EssenceContainerData)將頂層文件包和具體的素材容器及相應(yīng)的索引表相互關(guān)聯(lián)起來。
4.MXF文件分析
我們可以通過MXFExpressAndMXFDesktop_120 和 MXFInspect工具來幫助我們分析MXF文件,這里以op1A 文件為例。
4.1.首先是文件header分區(qū)的partition信息。
4.2.字典,指明了16字節(jié)Key到2字節(jié)Tag的映射關(guān)系
4.3.preface:相當(dāng)于MXF文件的序言,指明了Source Package 和Material Package的UID(通過ContentStorage包含)
4.4.contentstorage :指明了 SourcePackage(FilePackage)和MaterialPackage以及EssenceContainerData的UID
4.5.EssenceContainerData:將素材容器的BodySID和相應(yīng)索引表的IndexSID關(guān)聯(lián)起來,并指明了FilePackage的UID
4.5. MaterialPackage:素材包,它里面的SourceClip通過UUID引用到了SourcePackage里的某個(gè)Track
鏈接的SourceTrack
BodyPartition里的Essence
4.6.EssenceDescriptor:描述了SourceTrack里面的Essence的信息
4.7.IndexTab:記錄每幀在自己所屬的Essence中的偏移
其結(jié)構(gòu)可以簡單的用下圖來粗略的描述
總結(jié)
- 上一篇: 哪里的凤梨最好吃 探寻凤梨产地的美食之旅
- 下一篇: 坐公交车(乔治·巴顿的车多少钱)