提取原始名称&日期来自m2ts(mpeg2-ts)文件

时间:2016-10-27 06:54:17

标签: node.js video-processing mpeg2-ts

我想从Node中的m2ts文件中提取原始名称和日期。 我使用包“packet”找到了一些死代码(m2ts-parser)。虽然我太新手了,不能真正理解。但我想学习: - )

所以任何人都可以告诉我如何提取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;
                }

            }


        }
    });
});

1 个答案:

答案 0 :(得分:2)

MPEG-TS容器中没有此类信息。

这种元数据可能包含在其中一个基本流中,在这种情况下,它的位置对于每种流类型都是不同的。更糟糕的是,即使是同一类型,也没有共同的标准。

例如,如果您的m2ts文件包含H.264视频流,则可以在补充增强信息中找到 元数据({{1如果提供的话)。该结构在H.264标准中描述。

一旦知道了数据的位置,就需要找出它使用的格式。一个例子是修改后的数字视频包元数据SEI),exiftool支持,可能包含MDPM标记。 Example

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