Измените размер видео с помощью fluent-ffmpeg и загрузите его на S3 в lambda AWS - PullRequest
0 голосов
/ 27 мая 2018

Я написал ниже код, который (запускается при загрузке видео на 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

...