使用Node js将S3视频转换为音频文件(Lambda函数)

时间:2019-01-19 10:22:44

标签: node.js amazon-web-services amazon-s3 ffmpeg

我正在尝试通过Lambda函数将S3视频文件转换为音频文件。每当将视频文件上传到S3存储桶时,我都必须生成音频文件,然后通过触发AWS Lambda函数将其保存回S3存储桶。我可以将视频文件转换为本地音频。 (Convert video to an audio file using FFMPEG)。但是我想知道,每次将视频文件上传到S3存储桶时,如何在Lambda函数中执行此转换部分。我不知道如何执行此AWS Lambda函数。请分享您的建议。

示例代码:

var ffmpeg = require('fluent-ffmpeg');
/**
 *    input - string, path of input file
 *    output - string, path of output file
 *    callback - function, node-style callback fn (error, result)        
 */
function convert(input, output, callback) {
    ffmpeg(input)
        .output(output)
        .on('end', function() {                    
            console.log('conversion ended');
            callback(null);
        }).on('error', function(err){
            console.log('error: ', e.code, e.msg);
            callback(err);
        }).run();
}

convert('./df.mp4', './output.mp3', function(err){
  if(!err) {
      console.log('conversion complete');
      //...

  }
});

谢谢

1 个答案:

答案 0 :(得分:2)

您只需要在s3存储桶上放置一个事件-放置对象-即可触发lambda函数(您可以通过lambda函数的第一个参数访问上传到该S3存储桶的对象的描述)。

如果您可以使用某些外部库在本地计算机上将视频文件转换为音频,则需要创建一个zip文件,其中包含lambda函数(在zip文件的根目录中)以及相关性。

对于Node,这非常简单。创建一个新文件夹,运行npm init,安装所需的模块,并在其中放置Node代码的地方创建index.js文件。压缩此文件夹的所有内容(而不是文件夹本身)。创建新的lambda函数时,请选择上传此zip文件。

如果您想知道如何以编程方式与AWS资源通信并进行操作,请检查aws-sdk可以将其作为模块导入并用于此目的。

因此,基本上,您需要在lambda函数中进行的操作是解析event参数(第一个参数)以获得存储桶和上载对象的键。然后,您将调用s3.getObject方法来获取数据。使用自定义逻辑处理数据。调用s3.putObject将新转换的数据存储到新的S3位置。

如果您的代码需要在其中存储一些数据,则Lambda可以访问其自己的本地文件系统。您只需要指定文件的绝对路径,例如/tmp/output.mp3。要检索它,可以使用fs模块。然后,您可以继续s3.putObject