Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用mp4.js节点模块从mp4读取元数据?_Javascript_Node.js_Metadata_Mp4 - Fatal编程技术网

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

Javascript 如何使用mp4.js节点模块从mp4读取元数据?,javascript,node.js,metadata,mp4,Javascript,Node.js,Metadata,Mp4,我正在尝试使用节点模块将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.mp4

我正在尝试使用节点模块将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;
});
我遇到了
未捕获类型错误:无法读取未定义的属性“join”

有人知道我错过了什么吗?可能是mp4没有任何标签吗?我只是在谷歌上搜索了“示例mp4”并下载了一些东西。这是我第一次尝试这个模块,我对node非常陌生

我也愿意接受阅读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;
});
我创建了mp4.out,使用命令行中的ffmpeg添加了一个标题元标记。以下是我输入的命令:

ffmpeg -i in.avi -metadata title="my title" out.flv
使用上述代码运行我的应用程序后,存储在
$scope.mp4data
中的值是一个本机缓冲区,该缓冲区。我看到的只是一些数字,但没有元数据标签。如何查看元数据,例如使用上面的命令设置的标题?我在争论中遗漏了什么吗?或者也许我应该看看数据以外的东西

谢谢你的帮助。我可能只是把这当作一个新的问题,因为焦点已经转移了

编辑:解决方案

多亏了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读取元数据!谢谢你,布拉德

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

您可以使用
ffprobe-print_format json
让它输出json数据,您可以在Node.js应用程序中解析这些数据


这里有一些例子:

感谢您的帮助!FFmpeg命令是否输入到命令行中?有没有办法从我的javascript中调用类似
ffprobe-print_-format json
的东西?@user95227是的,是的。只需生成一个子进程并从其标准输出流中读取,直到结束。对不起,我刚回到这里。类似于:
require('child_process').spawn()
ls=spawn('ffprobe-print_format json',['small.mp4'])
ls.stdout.on('data',函数(data){
console.log('stdout:'+data);
})
@user95227不,您需要将所有参数放入参数数组中,而不能要求并将其放在任何地方<代码>var child_process=require('child_process');child_process.spawn('/path/to/ffprobe',['-print_format','json','small.mp4'])类似的内容谢谢您的快速回复!好的,我提取了从FFmpeg站点下载的tar文件的内容。现在我把路径放在
var child_process=require('child_process')
child_process.spawn('ffmpeg-2.7.2/ffprobe.c',['-print_format','json','small.mp4'])。路径是否应该以这样的C文件结尾?另外,
child\u进程
是标准node.js的一部分,我不需要在正确的位置使用npm安装?