2016-10-27 74 views
0

我想從Node中的m2ts文件中提取原始名稱和日期。 我發現一些使用包「包」的死代碼(m2ts-parser)。雖然我太新手了,真的不明白。但是,我想學習:-)從m2ts(mpeg2-ts)文件中提取原始名稱和日期

因此,誰能告訴我如何提取原始文件名和m2ts文件(在節點的原始創建日期,但任何僞代碼會做:-)

感謝

更新

我發現 - 基於@aergistal部分解決的答案。 我可以從m2ts文件中提取日期/時間原件。僅在Canon和Panasonic文件上測試:

var fs = require('fs'); 


fs.open('C:/temp/28685338476.mts', 'r', function (status, fd) { 
    if (status) { 
     console.log(status.message); 
     return; 
    } 
    var chunk = new Buffer(10000); 
    var syncFound = false; 
    var i, l; 
    fs.read(fd, chunk, 0, 10000, 0, function (err, num) { 

     for (i = 0, l = chunk.length; i < l; i++) { 

      if (chunk[i] === 0x47) { 
       syncFound = true; 
      } 

      if (syncFound) { 
       if (chunk[i] === 0x66 && chunk[i + 1] === 0x4D && chunk[i + 2] === 0x44 && chunk[i + 3] === 0x50 && chunk[i + 4] === 0x4D) { 
        console.log("GOT 'MDPM' at byte ", i); 
        var yy = chunk[i + 8].toString(16) + chunk[i + 9].toString(16); 
        var MM = chunk[i + 10].toString(16); 
        var dd = chunk[i + 12].toString(16); 
        var hh = chunk[i + 13].toString(16); 
        var mm = chunk[i + 14].toString(16); 
        var ss = chunk[i + 15].toString(16); 
        var timeStamp = yy + "/" + MM + "/" + dd + " " + hh + ":" + mm + ":" + ss; 
        console.log("TimeStamp: "+ timeStamp); 
        return timeStamp; 
       } 

      } 


     } 
    }); 
}); 

回答

2

MPEG-TS容器中沒有這樣的信息。

這種元數據可能被包括在其中一個基本流中,在這種情況下,其位置對於每種流類型都是不同的。更糟的是,即使是同一類型也沒有共同的標準。

例如,如果您m2ts文件包含H.264視頻流這樣的元數據可能補充增強信息如果提供(SEI)中找到。該結構在H.264標準中進行了描述。

一旦你知道數據在哪裏,你將需要找出它使用的格式。一個示例是由exiftool支持的修改的數字視頻包元數據MDPM),可能包含DateTimeOriginal標籤。 Example

當然,元數據可能根本不存在或存儲在輔助文件中。

相關問題