2016-10-27 49 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

当然,元数据可能根本不存在或存储在辅助文件中。

相关问题