【问题标题】:AWS Lambda: how to give ffmpeg large files?AWS Lambda:如何给 ffmpeg 大文件?
【发布时间】:2021-09-13 16:57:18
【问题描述】:

场景:

使用 AWS Lambda (Node.js),我想处理来自 S3 (> 1GB) 的大文件。 /tmp fs 限制为 512MB 意味着我无法在那里复制 S3 输入。 我当然可以增加 Lambda 内存空间,以便读取文件。

  • 我是否将内存缓冲区传递给 ffmpeg? (node.js,怎么样?)
  • 或者....我应该只创建一个 EFS 挂载点并将其用作转码暂存器吗?

【问题讨论】:

  • 您知道 Lambdas 有 15 分钟的时间限制吗?转码视频可能需要更长的时间,除非您只是重新混合或转码音频。
  • ffmpeg 可以使用 http/https URLs 作为输入,因此至少对于问题的输入端,您可以使用预签名链接。 ffmpeg 也可以输出到标准输出,但是对于许多容器来说这是有问题的。除非您使用 ECS 或 EFS 之类的东西,否则您将有一个痛苦的世界。
  • 连接并获取短片 - 我说转码时说错了。回复:管道..那么,将一个巨大的缓冲区传递给 child_process.spawnSync() 作为输入?我想得越多,EFS 就越是明智的选择。
  • 要记住的一件事是确保之后清理 EFS 共享,因为我不认为它被视为临时存储。

标签: node.js amazon-web-services ffmpeg aws-lambda amazon-efs


【解决方案1】:

您可以只使用 HTTP(s) 协议作为 ffmpeg 的输入。

Lambda 有最大 10GB 的内存限制,我上次测试时从 S3 的数据传输速度约为每秒 300MB。因此,如果您只有 1GB 最大视频并且没有进行内存密集型转换,那么这种方法应该可以正常工作

ffmpeg -i "https://public-qk.s3.ap-southeast-1.amazonaws.com/sample.mp4" -ss 00:00:10 -vframes 1 -f image2 "image%03d.jpg"

【讨论】:

    【解决方案2】:

    ffmpeg 对文件起作用,因此也许另一种方法是设置一个 unix 管道,然后用 ffmpeg 读取该管道,不断地用 s3 流馈送它。

    但也许您想考虑将其作为 ECS 任务运行,您不会有时间限制,也没有相同的存储限制。使用 Fargate 冷启动它需要 1-2 分钟,这可能是不可接受的?

    【讨论】:

    • 我想避免冷启动。可惜 lambda 没有为 /tmp fs size 提供配置选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2021-03-07
    • 2019-08-08
    • 1970-01-01
    • 2020-08-18
    • 2019-02-14
    相关资源
    最近更新 更多