首页 > web前端 > js教程 > AWS Sideo 缩略图生成器 - 无服务器 Node.js 解决方案指南

AWS Sideo 缩略图生成器 - 无服务器 Node.js 解决方案指南

Barbara Streisand
发布: 2024-12-27 10:45:11
原创
209 人浏览过

注意:不要分成两部分,这里没有足够的文字来证明拆分的合理性,并且本文重点介绍解决方案而不是讨论选择。

需要高效且经济高效地大规模生成视频缩略图吗?让我们使用 AWS Lambda 构建一个真正的无服务器解决方案,与使用专用媒体处理服务相比,该解决方案的运行成本仅为几美分。

我们要建造什么

该解决方案包含一个 Node.js Lambda 函数,该函数:

  • 处理常见视频格式
  • 根据工作负载进行扩展
  • 实现失败操作的重试逻辑
  • 通过基础设施即代码进行部署
  • 每个视频的运行成本仅为一美分

为什么要定制

大规模生成缩略图并不容易,也不便宜。对于视频来说,成本因素尤其重要 - 对于图像,您所要做的就是调整大小、裁剪并存储相同类型的输出。您可以将此责任转移给第三方云服务,以专注于提供其他功能,或者只需做一点工作即可在不离开 AWS VPC 的情况下执行任务。但对于视频来说,情况有所不同。视频文件要大得多,我们必须支持大量不同的编码标准,最终结果不再是视频 - 我们本质上是提取静态图像。

AWS Native = 超级昂贵

AWS Sideo Thumbnail Generator - The Serverless Node.js Solution Guide

在研究选项时,我总是求助于应用程序所在平台的原生解决方案。在 AWS 中,这是 MediaConvert 或 MediaLive。当您需要专业级视频处理时,两者都很棒,但当您只想从视频中抓取缩略图时……好吧,它们确实可以做到,但它们设计是否可以处理此类用例?不是真的。

令人惊讶的是,AWS 没有专门用于生成缩略图的服务。可用的解决方案侧重于其他用例,例如提供对流媒体的支持或运行高级视频转换任务。

当您查看使用这些服务构建此类功能的要求时,问题非常明显

  • 使用 AWS Media 服务时,无法创建未定义视频输出的处理管道 - 您需要处理整个视频并丢弃结果,仅使用该过程的副产品缩略图
  • 因此,它作为缩略图生成器非常昂贵 - 每分钟处理视频支付 0.0075 美元 可能感觉不多,但加起来很快 - 对于 1,000 个视频,每个 15 分钟长的处理成本将超过$100

生成一些视频缩略图的成本应该比早上喝咖啡的成本还要高吗? ☕ 这只是因为这些服务虽然功能强大,但对于缩略图生成等简单任务来说却显得有些过分了。

AWS Media 服务的真正成本不仅仅在于美元 - 还在于您通常不需要的复杂性

每次遇到新的要求时,我的思维都会调整到“寻找适合工作的完美工具”模式。我一直在宣扬不要遵循你所知道的东西的重要性,并且总是探索尽可能多的替代方案,这样我可能会开始听起来像一张破唱片……但我想我喜欢唱片正在播放的曲调! ??

您也可以将其称为医疗状况。我完全意识到我的工程强迫症问题...?

AWS Sideo Thumbnail Generator - The Serverless Node.js Solution Guide

但是我离题了...

超越 AWS

当然,还有其他解决方案,但它们常常带来令人头痛的问题:

  • 外部服务通常按 API 调用或处理的数据量收费
  • 您必须将视频上传到外部服务进行处理,这意味着出口成本更高
  • 它们可能无法很好地扩展,让您需要处理节流

定制的专用解决方案

让我们构建一些不仅更便宜,而且专注于我们实际需要的东西 - 一个可以生成视频缩略图的无服务器解决方案。 ?

系统使用以下 AWS 服务和工具:

  • Amazon S3 - 源视频和生成的缩略图的存储
  • AWS Lambda - 无服务器计算环境
  • FFmpeg - 视频处理框架
  • Docker - FFmpeg 和 Lambda 代码的容器打包
  • Amazon SQS - 用于处理协调的消息队列

AWS Sideo Thumbnail Generator - The Serverless Node.js Solution Guide

当视频上传到源 S3 存储桶时,它会触发一个对处理请求进行排队的事件。 Lambda 函数使用在 Docker 容器中运行的 FFmpeg 拾取并处理它。然后生成的缩略图存储在目标 S3 存储桶中。可恢复的暂时性问题(例如限制或基础设施相关问题)会自动重试,而所有其他失败事件会自动发送到死信队列以进行审核。

该服务会自动生成两种尺寸的视频缩略图。较大的版本在画面中央包含一个半透明的视频图标,帮助用户快速识别视频内容。

示例项目

  • 从 GH 拉取

服务

  • 编排 视频处理实用程序
  • FFmpeg
  • 两种缩略图类型
  • 不同尺寸,带覆盖层 容器中的 FFmpeg
  • 这就是我们如何使 Ffmpeg CLI 可用于 Lambda
  • Dockerfile 部署
  • 容器构建
  • 无服务器部署
  • Docker化的Lambda定义 测试
  • int
  • e2e 无服务器
  • 此时还有什么吗?

神奇的容器?

这是我们用 Lambda 打包 FFmpeg 的 Dockerfile:

让我看看钱! ?

让我们来详细分析一下每月处理 1000 个视频的成本:

AWS MediaConvert

  • 每分钟视频 0.08 美元
  • 1000 个视频 × $0.08 = $80

我们的解决方案

  • Lambda:1024MB × 10s × 1000 = 0.17 美元
  • S3:存储 GET/PUT = $0.05
  • 总计:$0.22

成本降低了 99.7%! ?

AWS Sideo Thumbnail Generator - The Serverless Node.js Solution Guide

可能会出现什么问题? ?

虽然这个解决方案非常棒,但它并非没有问题:

  • 内存使用:FFmpeg 可能会占用大量内存。如果您正在处理 4K 视频,您可能需要增加 Lambda 内存。
  • 超时限制:对于很长的视频,您可能会遇到 Lambda 的超时。对于这些情况,请考虑使用阶跃函数。
  • 冷启动:容器很大,所以第一次调用可能会比较慢。

接下来是什么? ?

这只是开始!您可以将此解决方案扩展到:

  • 生成多个缩略图尺寸
  • 提取视频元数据
  • 创建预览 GIF
  • 添加视频水印

结束了吗?

我们构建了一个经济高效、可扩展的视频缩略图生成解决方案,而且不会花太多钱。不再需要为不需要的功能付费!

记住:有时最好的解决方案并不是最昂贵或最复杂的 - 而是能够完全满足您需要的解决方案,仅此而已。

笔记

觉得这有帮助吗?考虑关注我以获取更多 AWS 和无服务器内容!如果您的缩略图看起来像现代艺术而不是您的视频...那么,请先检查您的视频格式,然后在下面发表评论! ?

抛开所有笑话,我很想听听您在 AWS 中进行视频处理的体验。您是否找到了其他优化成本的创造性方法?评论里分享一下吧!

免责声明

虽然此解决方案已经在生产中经过了实际测试,但请在部署之前在您自己的环境中进行彻底测试。如果有什么东西着火了,我有一个很棒的棉花糖食谱! ?


--- 我的笔记 - 文章的谈话要点

为什么 docker 与 Lambda - 不是第一选择,有时是唯一选择,层替代
与 AWS Media 服务相比,运行起来超级便宜
速度很快,可以对不同文件大小进行比较
可测试的 Ffmpeg

以上是AWS Sideo 缩略图生成器 - 无服务器 Node.js 解决方案指南的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板