Converter wav para mp3 no nó js
Existe algum pacote npn para converter um arquivo wav para mp3 no nó js? Eu quero executar este script na função aws lambda. Tentei pacotes sox e sox-audio, mas não é suportado no lambda. Eu pesquisei no ffmpeg, não encontrei nenhuma conversão entre wav para mp3.
Alguém fornece um bom pacote de conversão no nó js?
console.log('New Lambda Call');
var async = require('async');
var aws = require('aws-sdk');
var fs = require('fs');
var uuid = require('node-uuid');
var SoxCommand = require('sox-audio');
var sox = require('sox');
var s3 = new aws.S3({ apiVersion: '2006-03-01' });
exports.handler = function(event, context) {
//console.log('Reading event option : ', JSON.stringify(event, null, 2));
var src_bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
var src_key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));
var dest_bucket = "dmlambda";
var desk_key = src_key;
var params = {
Bucket: src_bucket,
Key: src_key
};
if (src_bucket == dest_bucket) {
console.error("Destination bucket must not match source bucket.");
return;
}
var typeMatch = src_key.match(/\.([^.]*)$/);
if (!typeMatch) {
console.error('unable to infer audio type for key ' + src_key);
return;
}
console.log()
var audioType = typeMatch[1];
if (audioType != "wav") {
console.log('skipping non wav audio ' + src_key);
return;
}
s3.getObject(params, function(err, data){
if (err) {
console.log(err);
var message = "Error getting object " + src_key + " from bucket " + src_bucket +
". Make sure they exist and your bucket is in the same region as this function.";
console.log(message);
} else {
console.log('Audio Content type:', data.ContentType);
fs.writeFile('./tmp/temp_'+src_key, data.Body, {encoding: null}, function(err){
if(err){
console.log("download file write error"+ err);
} else {
console.log('Added temp_'+src_key+' to queue');
var arr = src_key.split(".");
var filename = arr[0];
var command = SoxCommand()
.input('./tmp/temp_'+src_key)
.output('./tmp/'+filename+'.mp3')
.outputFileType('mp3')
.outputSampleRate(44100)
.outputBits(192 * 1024)
.outputChannels(2);
command.on('prepare', function(args) {
console.log('Preparing sox command with args ' + args.join(' '));
});
command.on('start', function(commandLine) {
console.log('Spawned sox with command ' + commandLine);
});
command.on('progress', function(progress) {
console.log('Processing progress: ', progress);
});
command.on('error', function(err, stdout, stderr) {
console.log('Cannot process audio: ' + err.message);
console.log('Sox Command Stdout: ', stdout);
console.log('Sox Command Stderr: ', stderr);
});
command.on('end', function() {
fs.unlink('./tmp/temp_'+src_key, function(err){
if(err){
console.log("delete error : ",err);
} else {
console.log('Moved temp_'+src_key);
}
});
console.log('Sox command succeeded!');
var stream = fs.createReadStream('./tmp/'+filename+'.mp3');
s3.putObject({
Bucket: dest_bucket,
Key: filename+'.mp3',
Body: stream
}, function(err, data){
if(err){
console.log("upload error : ",err);
} else {
fs.unlink('./tmp/'+filename+'.mp3', function(err){
if(err){
console.log("delete error : ",err);
} else {
console.log('Moved '+filename+'.mp3');
}
});
}
});
});
command.run();
}
});
}
});
};
O log do Lambda é:
2015-08-13T05:39:21.845Z vg7ewk1gk1bjvn30 New Lambda Call
START RequestId: a5ec9286-417d-11e5-9a79-310ba41a5a40
2015-08-13T05:39:21.990Z a5ec9286-417d-11e5-9a79-310ba41a5a40
2015-08-13T05:39:22.285Z a5ec9286-417d-11e5-9a79-310ba41a5a40 Audio Content type: audio/x-wav
2015-08-13T05:39:22.320Z a5ec9286-417d-11e5-9a79-310ba41a5a40 Added temp_RE4bc9f41b1738c6def250a58e32d473aa.wav to queue
2015-08-13T05:39:22.322Z a5ec9286-417d-11e5-9a79-310ba41a5a40 Preparing sox command with args ./tmp/temp_RE4bc9f41b1738c6def250a58e32d473aa.wav -t mp3 -r 44100 -b 196608 -c 2 ./tmp/RE4bc9f41b1738c6def250a58e32d473aa.mp3
2015-08-13T05:39:22.366Z a5ec9286-417d-11e5-9a79-310ba41a5a40 Cannot process audio: Cannot find sox
2015-08-13T05:39:22.366Z a5ec9286-417d-11e5-9a79-310ba41a5a40 Sox Command Stdout: null
2015-08-13T05:39:22.366Z a5ec9286-417d-11e5-9a79-310ba41a5a40 Sox Command Stderr:
END RequestId: a5ec9286-417d-11e5-9a79-310ba41a5a40
Process exited before completing request