【问题标题】:S3 Video to audio file convert using Node js (Lambda function)使用 Node js(Lambda 函数)将 S3 视频转换为音频文件
【发布时间】:2019-06-13 10:25:38
【问题描述】:

我正在尝试通过 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');
      //...

  }
});

谢谢,

【问题讨论】:

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


【解决方案1】:

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

如果您可以在本地机器上使用一些外部库将视频文件转换为音频,那么您需要创建一个包含您的 lambda 函数(在 zip 文件的根目录中)以及依赖项的 zip 文件。

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

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

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

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

【讨论】:

  • 是的,我们可以通过触发 lambda 函数得到一个 s3 对象。但是在转换成音频文件之后,如何将该音频文件上传到 s3 存储桶中。如果您查看上面的代码,该函数将获取输入和输出路径。如何在 lambda 函数中执行此操作?谢谢。
  • @Arun Lambda 函数可以访问自己的本地文件系统。你不需要修改你的代码。完成该过程并将文件存储在该本地 fs 中后,您可以使用 fs 模块检索它,然后将其上传到 S3。
  • 我认为通常使用 s3:ObjectCreated:* 而不是 s3:ObjectCreated:Put 来触发 Lambda 更好。
猜你喜欢
  • 2019-07-14
  • 2019-06-27
  • 1970-01-01
  • 2018-11-15
  • 2020-08-25
  • 2016-01-31
  • 2020-01-17
  • 2018-05-24
  • 2017-10-17
相关资源
最近更新 更多