我正在为其构建架构的服务包含视频处理部分。基本上,有些人可以上传视频(存储在 S3 中),这些视频将被分割成高分辨率的帧。从这些高分辨率帧中,可以构建派生图像(缩略图、精灵),所有这些都将存储在 S3 上。
我的问题是:我应该在哪里以及如何运行我的视频处理脚本?我想使用 Lambda,但我不确定它的局限性 (300 秒超时和 512 MB 磁盘存储)请允许我这样做。请注意,视频的大小可能高达几 GB。
我目前正在考虑的解决方案是:
- 使用流从 S3 读取视频(因此不必完全复制)
- 将视频转换为帧,然后直接将其上传到 S3(我还必须确保不要用帧填满存储空间)
- 从 S3 中单独或分块读取帧,并使用它们生成上传到 S3 的缩略图和精灵。我有点担心这可能需要的时间,即使我的 Lambda 与我的 S3 存储桶位于同一区域。
您认为这是最佳解决方案吗?您能想到更简单的解决方案吗?或者您认为在标准 EC2 实例上运行处理是一个更好的主意(也许中间有一些像 SQS 这样的排队系统)?
谢谢!
答案1
您最不希望发生的事情是让有效用例(例如大型视频)达到 Lambda 限制(时间和/或磁盘存储)。
你应该将步骤分解为多个小的、单任务的块,例如:
- 将视频转换为帧
- 将帧转换为缩略图
- ETC。
单独评估每个小任务。确定最小/最大/平均文件大小并计算最小/最大/平均处理时间。如果 Lambda 合适,则选择它。否则,您可以使用 EC2 实例来处理队列中的项目(例如使用 SQS)。
答案2
根据你到底想做什么以及是否合适,你可能查找 AWS'弹性转码器视频处理服务提供了现成的解决方案。它当然将缩略图生成列为产品的一部分。
答案3
如果你自己动手,我建议你尝试一下亚马逊 SWF因为我以前曾经使用它来构建视频处理工作流程。
就像另一个答案所建议的那样,您应该将每个步骤分解为小的单任务活动,然后将它们组合成一个工作流。然后,您可以在 EC2 或任何您喜欢的地方运行工作流。