【发布时间】:2020-11-15 13:16:44
【问题描述】:
我正在使用 AWS Lambda 将文件从 WEBM 转换为 MP4
我正在使用 ffmpeg 版本 4.3.1-static https://johnvansickle.com/ffmpeg/(我还使用无服务器 AWS ffmpeg 层(包括 de 4.1.3)中的 ffmpeg 进行了以下测试,但结果更差(大约 25 % 慢)
我使用 Node 10x 作为容器。
WEBM size Time to convert. Memory Lambda. Memory used (as shown in log)
80Mb ~44s 3008 410
40Mb ~44s 3008 375
80Mb ~70s 1024 321
40Mb ~70s 1024 279
所有视频都是 80 年代的长度。所以据我所知,WEBM的大小无关紧要,如果视频的长度相同,则转换所需的时间相同。因此,如果视频长度较高,则 ffmpeg 需要更多时间,而不是文件大小较高时...好奇 ;-)
但另一方面,我对 Lambda 内存感到困惑。我知道内存和 CPU 在 Lambda 中结合在一起......您选择的内存越多,分配的 CPU 就越多。
但是……
- 如果 ffmpeg 需要运行更多空间,为什么它只需要大约 300/400Mb?
- 如何让 ffmpeg 使用更多内存?
- 是否有任何选项可以加快 Lambda 中的流程?
顺便说一句,在所有测试中,所有 ffmpeg 都是相同的,并且
cpu 使用的参数)
- 我在ffmpeg中加了参数cpu-used=100,如果我把cpu-used=5也没关系……次数都是一样的,所以我猜那个参数是没用的(我不知道为什么)
线程参数)
- 我还用“线程”参数做了一些测试,但也没有用。
我知道这不是一个很好的比较,但相同的文件需要大约 5 秒才能在一个简单的专用服务器中转换(OVH Centos VPS 中的 8 个 vCore 和 8GB RAM)。
顺便说一句,Amazon Elastic Transcoder 不是一个选项: a) 它非常昂贵 b) 它只有他的配置文件要转换,而且我的 ffmpeg 命令非常复杂(水印、效果等......)
【问题讨论】:
-
这些总数中是否包括从 S3 下载 WEBM 和将 MP4 上传到 S3 的次数? Lambda RAM 大小的实际 ffmpeg 转换时间是多少?您是否使用相同的 ffmpeg 选项?
-
上传/下载时间不包括在这里 ;-) 所有测试的所有 ffmpeg 选项。我不明白你的第二个问题:你可以在表格中看到 3M 和 1M 的 lambda 内存
-
我的意思是:你在 lambda 和 VPS 上使用相同的 ffmpeg 运行时选项吗?此外,是否有任何 ffmpeg 调试/详细选项可以帮助您了解性能差异?
-
两者都是取自同一站点的相同 4.3.1 静态构建
-
我认为您在这里测量的不是同一件事。例如,您指出 Lambda 层中的 ffmpeg 慢了 25%。 Lambda 层不会对运行时产生任何影响 - 它只会影响冷启动时间,在您运行 ffmpeg 之前。这就是为什么我试图确保你在比较类似的东西,所以你知道你应该把精力集中在哪里(冷启动、从 S3 下载、部署包大小、ffmpeg 线程、上传到S3,或其他)。
标签: amazon-web-services video ffmpeg aws-lambda