如何使用mp4.js节点模块从mp4读取元数据?

时间:2015-08-25 17:09:15

标签: javascript node.js metadata mp4

我正在尝试使用节点模块mp4js将mp4文件中的元数据标签读入我的javascript。我按照该页面上提供的模型,但有一些问题。

我尝试了以下内容:

var mp4 = require('mp4js');

mp4({ file: 'small.mp4', type: 'local' }, function (err, tags) {
    // tags now contains your MP4 tags
    console.log('Tags: ' + tags)
    $scope.mp4Tags = tags;
});

我遇到了Uncaught TypeError: Cannot read property 'join' of undefined

有谁知道我在这里缺少什么?可能是mp4没有任何标签吗?我只是用Google搜索“示例mp4”并下载了一些内容。这是我第一次尝试这个模块而且我对节点很新。

我也对阅读mp4元数据的其他建议持开放态度。

非常感谢您的时间,如果您需要我的其他任何内容,请告诉我。

编辑8.26.2015

根据Brad的建议,我尝试使用以下代码从mp4中读取元数据:

    var child_process = require('child_process');
ls = child_process.spawn('ffmpeg/bin/ffprobe.exe', ['-print_format', 'json', 'out.mp4']);

ls.stdout.on('data', function (data) {
    console.log('stdout: ' + data);
    $scope.mp4data = data;
});

我通过跟随this example创建了mp4.out,用于从命令行使用ffmpeg添加标题元标记。 Here is a screenshot of my output。这是我输入的命令:

ffmpeg -i in.avi -metadata title="my title" out.flv

使用上面的代码运行我的应用程序后,$scope.mp4data中存储的值是looks like this的本机缓冲区。我看到的只是一些数字,但没有元数据标签。如何查看元数据,例如我使用上面的命令设置的标题?我在论证中遗漏了什么吗?或者我应该看一下data以外的其他内容?

感谢您的帮助。我可能只是将这个问题作为一个新问题发布,因为焦点已经转移。

编辑:解决方案

感谢Brad的帮助,我在这里落地了:

$scope.mp4data = "";
ls.stdout.on('data', function (data) {
    $scope.mp4data = $scope.mp4data + data.toString();
});

ls.stdout.on('end', function (data) {
    $scope.mp4data = JSON.parse($scope.mp4data);
});

非常适合从我的mp4读取元数据!谢谢布拉德!

1 个答案:

答案 0 :(得分:1)

我建议使用FFprobe(来自FFmpeg项目)来代替。它支持许多容器,包括MP4。

您可以使用ffprobe -print_format json输出您可以在Node.js应用中解析的JSON数据。

此处的一些示例:https://stackoverflow.com/a/8191228/362536