On the off chance this is ever useful to anyone, here's a NodeJS script for extracting a bunch of ID3 tags to a CSV file. You'll need to install id3js (npm install id3js) in order to use it.
#!/usr/bin/env node
var fs = require('fs');
var path = require('path');
var id3 = require('id3js');
var dirs = [];
for (var i = 2; i < process.argv.length; i++) {
dirs.push(process.argv[i]);
}
if (dirs.length == 0)
dirs.push('.');
dirs.forEach(function(dir) {
process.stderr.write("Scanning " + dir + "...\n");
fs.readdir(dir, function(err, files) {
if (err) {
console.warn("Unable to read directory %s: %s", dir, err);
} else {
function grabTags(index) {
while (index < files.length) {
var file = files[index];
index++;
if (file.length > 4 && file.substring(file.length-4).toLowerCase() == ".mp3") {
file = path.resolve(dir, file);
id3({ file: file, type: id3.OPEN_LOCAL}, function(err, tags) {
if (err) {
console.warn("Error reading %s: %j", file, err);
} else {
console.log("%s\t%s\t%s", tags["v2"]["track"], tags["v2"]["title"], tags["v2"]["artist"]);
}
grabTags(index);
});
return;
}
}
}
grabTags(0);
}
});
});