Конвертировать WAV в MP3 в узел JS
Есть ли пакеты npn для преобразования файла wav в файл mp3 в узле js? Я хочу запустить этот скрипт в лямбда-функции aws. Я пробовал пакеты sox и sox-audio, но они не поддерживаются в лямбде. Я погуглил ffmpeg, не нашел преобразования между wav и mp3.
Кто-нибудь дает хороший пакет преобразования в узле 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();
}
});
}
});
};
Лямбда-лог это:
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