javascript - 如何使用 mp4.js Node 模块从 mp4 读取元数据?

标签 javascript node.js metadata mp4

我正在尝试使用 Node 模块 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:无法读取未定义的属性“join”

有人知道我在这里缺少什么吗?难道mp4没有标签吗?我刚刚用谷歌搜索“sample mp4”并下载了一些东西。这是我第一次尝试这个模块,而且我对 Node 还很陌生。

我也愿意接受其他有关读取 mp4 元数据的建议。

非常感谢您抽出宝贵的时间,如果您需要我提供任何其他信息,请告诉我。

编辑2015年8月26日

按照 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 中的值是一个 native 缓冲区,looks like this 。我看到的只是一些数字,但没有元数据标签。如何查看使用上述命令设置的元数据,例如标题?我在论证中遗漏了什么吗?或者也许我应该看看数据以外的东西?

感谢您的帮助。由于焦点已经转移,我可能会将其作为一个新问题发布。

编辑:解决方案

感谢布拉德的帮助,我到达了这里:

$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 中读取元数据!谢谢布拉德!

最佳答案

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

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

这里有一些例子:https://stackoverflow.com/a/8191228/362536

关于javascript - 如何使用 mp4.js Node 模块从 mp4 读取元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32210057/

相关文章:

javascript,搜索我的名字

javascript - 用 puppeteer 操纵亚马逊

node.js - 在亚马逊AWS Elastic beanstalk上安装解析仪表板(或本地?)

javascript - 在数组 Node.js 中组合 JSON 数组

javascript - 如何组合两个独立 Uint8Array 的颜色数据 (JPEG) 和透明度数据 (PNG)?

javascript - 使用 Leaflet map 上比例尺的值

node.js - dotenv模块的意义

metadata - 如何从llvm.dbg.declare获取IR值

javascript - 如何在:run after tests finish execution之后触发cypress

c# - 如何使用反射获取方法或类的文档?