栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

AWS Lambda制作视频缩略图

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

AWS Lambda制作视频缩略图

Naveen概述的过程是正确的,但是它掩盖了一个非常痛苦的细节-包括zip中的ffmpeg二进制文件并在您的lambda函数中访问它。

我刚经历过,它像这样:

  1. 在压缩的lambda函数包中包含ffmpeg静态二进制文件(我有一个gulp任务要在
    /dist
    每次构建时将其复制到其中)
  2. 调用函数时,将二进制文件移至
    /tmp/
    dir并
    chmod
    授予您访问权限
    (2017年2月更新:据报道,这不再是必需的,re:
    @loretoparisi
    @allen
    的答案)。
  3. 更新您的PATH以包含ffmpeg可执行文件(我使用fluent-ffmpeg,它使您可以设置两个env var来更轻松地处理它。

让我知道是否需要更多详细信息,我可以更新此答案。

copy和chmod(第2步)显然不是理想的……。很想知道是否有人找到了更好的方法来处理此问题,或者这是否是这种体系结构样式的典型方法。

(第二次更新,在第一次更新b / c之前编写它更相关):

正如@Allen所指出的,不再需要copy + chmod步骤了–我现在可以直接从/ var / task
/在Lambda函数中执行ffmpeg,而现在没有任何麻烦。确保将

chmod 755
任何二进制文件上传到Lambda之前(也正如@Allen所指出的)。

我不再使用fluent-
ffmpeg来完成工作。相反,我正在更新PATH以包括

process.env['LAMBDA_TASK_ROOT']
和执行简单的bash脚本。

在Lambda函数的顶部:

process.env['PATH'] = process.env['PATH'] + "/" + process.env['LAMBDA_TASK_ROOT']

对于使用ffmpeg的示例:lambda-pngs-to-mp4。

有关大量有用的lambda组件:lambduh。

以下更新留给后代使用,但不再需要:

更新更多详细信息:

我在这里下载了静态ffmpeg二进制文件。亚马逊建议启动EC2并在其中构建二进制文件供您使用,因为该环境将与Lambda运行的条件相同。大概是个好主意,但还有更多工作要做,这个静态下载对我有用。

我只将

ffmpeg
二进制文件拉到项目的待归档
/dist
文件夹中。

将zip上传到lambda时,它位于

/var/task/
。无论出于什么原因,我都遇到了尝试在该位置使用二进制文件的访问问题,以及尝试在该位置编辑文件权限的更多问题。一个快速的解决方法是将二进制文件移至该目录
/tmp/
并对其进行
chmod
权限。

在Node中,您可以通过运行Shell

child_process
。我所做的看起来像这样:

require('child_process').exec(  'cp /var/task/ffmpeg /tmp/.; chmod 755 /tmp/ffmpeg;',  function (error, stdout, stderr) {    if (error) {      //handle error    } else {      console.log("stdout: " + stdout)      console.log("stderr: " + stderr)      //handle success    }  })

这应该可以在lambda函数中为您提供可执行的ffmpeg二进制文件-但您仍然需要确保它在$ PATH中。

我放弃了fluent-
ffmpeg并使用节点来启动ffmpeg命令,转而只是从节点外启动bash脚本,所以对我来说,我必须

/tmp/
在lambda函数的顶部添加路径:

process.env.PATH = process.env.PATH + ':/tmp/'

如果您使用fluent-ffmpeg,则可以通过以下方式将路径设置为ffmpeg:

process.env['FFMPEG_PATH'] = '/tmp/ffmpeg';

有点相关/无耻的自我插入:我正在研究一组模块,以使在Lambduh名称下从可组合模块中构建Lambda函数更加容易。可能会节省一些时间,使这些东西放在一起。一个简单的例子:使用lambduh-
execute处理这种情况很简单:

promises.push(execute({  shell: "cp /var/task/ffmpeg /tmp/.; chmod 755 /tmp/ffmpeg",})

在哪里

promises
可以实现一系列承诺。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446473.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号