MXF文件結構淺析


MXF是英文Material eXchange Format(素材交換格式)的縮語。MXF是SMPTE(美國電影與電視工程師學會)組織定義的一種專業音視頻媒體文件格式。MXF主要應用於影視行業媒體制作、編輯、發行和存儲等環節。SMPTE為其定義的標准包括:SMPTE - 377M、SMPTE - EG41、SMPTE - EG42等,並不斷進行更新和完善。它是一個外殼格式 而不是壓縮格式, 所以並不能保證每一款MXF文件 都能被任何一種解碼器識別。

MXF標准並非一成不變,一直在發展。SMPTE中MXF相關標准已經有幾十個文檔,並且仍然在補充增加,SMPTE定義的只是MXF框架和一般原則,具體實現由各廠商自行完成,各大廠商自己實現的MXF,往往在新產品中也會發生一些變化。

1.MXF文件基本結構

MXF文件包括三個主體部分:文件頭、文件體和文件尾。
文件頭提供文件的整體信息,包括用於解碼文件中所有視音頻數據的解碼器列表等。文件體由存儲在要素容器中的視音頻數據組成,來自不同數據軌(如視頻、音頻和時碼)的要素容器可能交錯和分離地存儲在文件體中。文件尾用以結束一個MXF文件,包括一些在產生文件頭時還不確定的信息,如文件的視音頻長度等,文件尾的信息在某些場景中常常被忽略。

MXF文件也可包含一個可選的索引表(Index Table),該索引表可用於將基於采樣的索引(如時碼)快速換算到對應的要素容器在<spanlang="en-us>">MXF文件中的偏移地址,以實現視音頻的快速預覽和定位。該索引表可分段存儲,可位於基本數據段之前或之后,也可分插到基本數據段中間。

2.MXF底層數據結構

MXF文件的所有數據都采用Key-Length-Value(KLV)進行編碼以獲得格式的靈活性和可擴展性,KLV編碼標准定義在SMPTE 336M中。實際上MXF文件就是若干連續KLV數據包的序列(除了可選的RUN-IN包)。

the key identifies the data, the length specifies the length of the data, and the value is the data itself 
  • Key:16字節的標識符。
  • Length:數據(Value域)長度。BER(basic encoding rules )編碼方式,如83 00 00 88。

    它使用可變長的字節來表示非常寬的長度范圍,該域總是按MSB(高字節優先)編碼,如果第一個字節的bit7為0,那么低7位代表了0~127范圍的長度,如果bit7為1,那么低7位代表長度域的字節個數。

  • Value:KLV單元中包含的數據

3.MXF的邏輯結構

MXF文件的邏輯模型是一種基於對象的數據結構,主要由頭部元數據中的結構元數據定義。結構元數據主要分為兩類,一類是與實踐特性有關的結構結構元數據包(Structural Metadata Package),一類是與素材或素材容器的特征參數相關的描述符(Descriptors)。每個結構元數據包有1個或多個軌跡(Track)組成,每個軌跡是一段具有起始時間點、編輯速率的時間線,由一個具有一定持續時間的序列(Squence)組成,每個序列又由1個或多個源片段(SourceClip)組成。包(Package)、軌跡(Track)、序列(Squence)、源片段(SourceClip)通過UUID相互引用。
頂層文件包中的每一個軌跡分別對應內容容器中不同的類型並有相應的描述符描述素材的特征信息,如像素、采樣率、畫幅比、聲道數、比特數等。素材包通常為文件的輸出時間線,確定在播放或使用時文件中哪個內容容器中的哪些內容被播放,以及這些內容如何同步。素材包中的源片段通過UUID引用,鏈接到頂層文件包中的某個軌跡。而素材元素元數據(EssenceContainerData)將頂層文件包和具體的素材容器及相應的索引表相互關聯起來。

4.MXF文件分析

我們可以通過 MXFExpressAndMXFDesktop_120 和 MXFInspect工具來幫助我們分析MXF文件,這里以op1A 文件為例。

4.1.首先是文件header分區的partition信息。

4.2.字典,指明了16字節Key到2字節Tag的映射關系

4.3.preface:相當於MXF文件的序言,指明了Source Package 和Material Package的UID(通過ContentStorage包含)

4.4.contentstorage :指明了 SourcePackage(FilePackage)和MaterialPackage以及EssenceContainerData的UID

4.5.EssenceContainerData:將素材容器的BodySID和相應索引表的IndexSID關聯起來,並指明了FilePackage的UID

4.5. MaterialPackage:素材包,它里面的SourceClip通過UUID引用到了SourcePackage里的某個Track

 鏈接的SourceTrack

BodyPartition里的Essence

4.6.EssenceDescriptor:描述了SourceTrack里面的Essence的信息

4.7.IndexTab:記錄每幀在自己所屬的Essence中的偏移

其結構可以簡單的用下圖來粗略的描述

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM