【问题标题】:How to modify a MP3 metadata and save by Node.js? [closed]如何通过 Node.js 修改 MP3 元数据并保存? [关闭]
【发布时间】:2013-07-11 06:54:33
【问题描述】:

我想实现以下目标:

  • 读取 MP3 元数据
  • 修改该元数据的编码(如果我可以修改该元数据的内容,那就更好了)
  • 保存对该 MP3 文件的修改

所有这些操作都可以基于原生 Node.js(无需浏览器)。有没有提供这种功能的模块或者我可以基于它开发?

【问题讨论】:

标签: node.js node-modules


【解决方案1】:

到目前为止,我发现jsmediatags 是阅读ID3v2 标签的最佳npm

var jsmediatags = require("jsmediatags");

jsmediatags.read("./song.mp3", {
  onSuccess: function(tag) {
    console.log(tag);
  },
  onError: function(error) {
    console.log(':(', error.type, error.info);
  }
});

【讨论】:

  • 这似乎运作良好,但只支持标签的基本子集。
  • 是否有一个包可以让我编辑任何文件类型的元数据?
【解决方案2】:

对于那些通过谷歌提出这个问题的人,有一个节点模块可以做到这一点,读取和写入元数据: https://www.npmjs.org/package/ffmetadata

【讨论】:

  • 值得注意的是,这对ffmpeg有依赖。
  • 为了与 Windows Explorer 兼容,插件提供了id3v2.3 选项,可以设置为 true。参见ffmetadata的文档。
  • 是否有一个包可以让我编辑任何文件类型的元数据?
【解决方案3】:

我不知道是否有办法在 NodeJS 中实际进行元数据操作。这是一种变通方法,但您可以使用 child_process.exec 和 perl 来做到这一点:

NodeJS Code

var exec = require('child_process').exec,
    child;

child = exec('perl changeTags.pl file.mp3',
  function (error, stdout, stderr) {
    console.log('stdout: ' + stdout);
    console.log('stderr: ' + stderr);
    if (error !== null) {
      console.log('exec error: ' + error);
    }
});

Perl code

#!/usr/bin/perl

use MP3::Tag;

$mp3 = MP3::Tag->new(@ARGV[0]); # create object 

$mp3->get_tags(); # read tags

print "Attempting to print tags for @ARGV[0]\n";

if (exists $mp3->{ID3v2}) {
  print "Comments: " . $mp3->{ID3v2}->comment . "\n";
    print "Zip: " . $mp3->{ID3v2}->album . "\n";
    print "Tags: " . $mp3->{ID3v2}->title . "\n";
} else {
    print "@ARGV[0] does not have ID3v2 tags\n";
}

$mp3->close(); # destroy object

类似的东西。您显然想为您真正想要将元数据更改为的内容提供更多参数......祝您好运!

【讨论】:

  • 这到底为什么会遭到反对?
  • 可能是因为它在 perl 中 ;-)
  • -1 因为不是本机节点模块,而是一种解决方法
  • ffmpeg 也不是原生节点模块...
猜你喜欢
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
相关资源
最近更新 更多