注意:不要分成两部分,这里没有足够的文字来证明拆分的合理性,并且本文重点介绍解决方案而不是讨论选择。
需要高效且经济高效地大规模生成视频缩略图吗?让我们使用 AWS Lambda 构建一个真正的无服务器解决方案,与使用专用媒体处理服务相比,该解决方案的运行成本仅为几美分。
该解决方案包含一个 Node.js Lambda 函数,该函数:
大规模生成缩略图并不容易,也不便宜。对于视频来说,成本因素尤其重要 - 对于图像,您所要做的就是调整大小、裁剪并存储相同类型的输出。您可以将此责任转移给第三方云服务,以专注于提供其他功能,或者只需做一点工作即可在不离开 AWS VPC 的情况下执行任务。但对于视频来说,情况有所不同。视频文件要大得多,我们必须支持大量不同的编码标准,最终结果不再是视频 - 我们本质上是提取静态图像。
在研究选项时,我总是求助于应用程序所在平台的原生解决方案。在 AWS 中,这是 MediaConvert 或 MediaLive。当您需要专业级视频处理时,两者都很棒,但当您只想从视频中抓取缩略图时……好吧,它们确实可以做到,但它们设计是否可以处理此类用例?不是真的。
令人惊讶的是,AWS 没有专门用于生成缩略图的服务。可用的解决方案侧重于其他用例,例如提供对流媒体的支持或运行高级视频转换任务。
当您查看使用这些服务构建此类功能的要求时,问题非常明显
生成一些视频缩略图的成本应该比早上喝咖啡的成本还要高吗? ☕ 这只是因为这些服务虽然功能强大,但对于缩略图生成等简单任务来说却显得有些过分了。
AWS Media 服务的真正成本不仅仅在于美元 - 还在于您通常不需要的复杂性。
每次遇到新的要求时,我的思维都会调整到“寻找适合工作的完美工具”模式。我一直在宣扬不要遵循你所知道的东西的重要性,并且总是探索尽可能多的替代方案,这样我可能会开始听起来像一张破唱片……但我想我喜欢唱片正在播放的曲调! ??
您也可以将其称为医疗状况。我完全意识到我的工程强迫症问题...?
但是我离题了...
当然,还有其他解决方案,但它们常常带来令人头痛的问题:
让我们构建一些不仅更便宜,而且专注于我们实际需要的东西 - 一个可以生成视频缩略图的无服务器解决方案。 ?
系统使用以下 AWS 服务和工具:
当视频上传到源 S3 存储桶时,它会触发一个对处理请求进行排队的事件。 Lambda 函数使用在 Docker 容器中运行的 FFmpeg 拾取并处理它。然后生成的缩略图存储在目标 S3 存储桶中。可恢复的暂时性问题(例如限制或基础设施相关问题)会自动重试,而所有其他失败事件会自动发送到死信队列以进行审核。
该服务会自动生成两种尺寸的视频缩略图。较大的版本在画面中央包含一个半透明的视频图标,帮助用户快速识别视频内容。
示例项目
服务
这是我们用 Lambda 打包 FFmpeg 的 Dockerfile:
让我们来详细分析一下每月处理 1000 个视频的成本:
成本降低了 99.7%! ?
虽然这个解决方案非常棒,但它并非没有问题:
这只是开始!您可以将此解决方案扩展到:
我们构建了一个经济高效、可扩展的视频缩略图生成解决方案,而且不会花太多钱。不再需要为不需要的功能付费!
记住:有时最好的解决方案并不是最昂贵或最复杂的 - 而是能够完全满足您需要的解决方案,仅此而已。
觉得这有帮助吗?考虑关注我以获取更多 AWS 和无服务器内容!如果您的缩略图看起来像现代艺术而不是您的视频...那么,请先检查您的视频格式,然后在下面发表评论! ?
抛开所有笑话,我很想听听您在 AWS 中进行视频处理的体验。您是否找到了其他优化成本的创造性方法?评论里分享一下吧!
虽然此解决方案已经在生产中经过了实际测试,但请在部署之前在您自己的环境中进行彻底测试。如果有什么东西着火了,我有一个很棒的棉花糖食谱! ?
为什么 docker 与 Lambda - 不是第一选择,有时是唯一选择,层替代
与 AWS Media 服务相比,运行起来超级便宜
速度很快,可以对不同文件大小进行比较
可测试的 Ffmpeg
以上是AWS Sideo 缩略图生成器 - 无服务器 Node.js 解决方案指南的详细内容。更多信息请关注PHP中文网其他相关文章!