亚马逊Lambda的video和image processing?

我正在构build的架构中有一个video处理部分。 基本上,有些人可以上传video(存储在S3中),这些video将被拆分成高分辨率的帧。 从这些高分辨率帧中,生成派生图像(缩略图,精灵),所有这些都将被存储在S3上。

我的问题是:在哪里以及如何运行我的video处理脚本? 我想使用Lambda,但我不确定它的限制( 300s超时和512 MB磁盘存储 )允许我这样做。 请注意,video可以重达几GB。

我现在想的解决scheme是:

  • 使用stream从S3读取video(所以不必完全复制)
  • 将video转换为帧,并直接上传到S3(我也必须确保不要用帧填充存储)
  • 单独读取或者从S3读取帧,并使用它们生成缩略图和精灵,并将其上传到S3。 即使我的Lambda与S3存储区位于同一区域,我也有点担心这可能会花费时间。

你认为这是最好的解决scheme吗? 你能想到一个更简单的吗? 或者你认为在一个标准的EC2实例上运行这个处理是一个更好的主意(也许在一些排队系统中,如SQS)?

谢谢!

你想要的最后一件事就是让一个有效的用例(例如大video)达到Lambda限制(时间和/或磁盘存储)。

您应该将步骤缩减为小的单任务块,例如:

  • 将video转换为帧
  • 将帧转换成缩略图
  • 等等

分别评估每个小任务。 确定您的最小/最大/平均文件大小,并计算您的最小/最大/平均时间来处理。 如果Lambda是合适的,那么select它。 否则,您可以使用EC2实例处理来自队列的项目(例如,使用SQS)。

具体取决于您想要做什么以及是否合适,您可能会发现AWS的Elastic Transcodervideo处理服务提供了一个现成的解决scheme。 它当然会列出缩略图生成的一部分。

如果您自己推出,我可以推荐使用Amazon SWF,因为之前我曾经使用它来构buildvideo处理工作stream程。

就像另外一个答案所build议的,你应该把每一步分解成小的单一任务活动,然后把它们组合成一个工作stream程。 然后,您可以在EC2上或您喜欢的任何位置运行工作stream程。