Я написал ниже код, который (запускается при загрузке видео на s3) получает изображение с s3, изменяет его размер с помощью модуля fleunt-ffmpeg nodejs, а затем загружает его в корзину s3.
async.waterfall([
function download(next) {
// Download video
s3.getObject({
Bucket: srcBucket,
Key: srcKey
}, next);
},
function resizeBuffer(response, next) {
// Resize
resizeVideo(response, function (err, response, buffer){
if(err){
console.log(err);
return next(err);
}
next(null, response, buffer);
});
},
function uploadBuffer(response, buffer, next) {
// Upload to s3
let resizedImageName = "resized/" + imageName;
s3.putObject({
Bucket: srcBucket,
Key: resizedImageName,
Body: buffer,
ContentType: response.ContentType
}, function(err, data) {
if (err) {
console.log(err, err.stack);
}else{
console.log('image resized----------------------->');
next(null, response, buffer);
}
});
}
], function (err) {
if (err) {
console.log('Unable to resize image.');
} else {
console.log('Successfully resized image.');
}
callback(null, "done--------------->");
});
function resizeVideo(response, callback){
try {
let command = ffmpeg(response.Body);
console.log('1-------------->');
command.size('50%');
console.log('2-------------->');
callback(null, response, command.pipe());
} catch (e) {
console.log('video resize error------------------------->');
console.log(e);
callback('Video resize error')
}
}
Этот код прекрасно работает для изображений (imagemagik вместо fluent-ffmpeg), но выдает ошибку при использовании ffmpeg: Error: Stream yields empty buffer