Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – AWS Lambda制作视频缩略图大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想让缩略图上传到S3的视频,我知道如何使用Node.js和ffmpeg。

根据this forum post我可以添加库:

但是如何将静态ffmpeg二进制文件放在aws lambda上呢?

而如何从Node.js@L_618_5@这个静态二进制(ffmpeg)与AWS Lambda?

我是新手和亚马逊的AWS和Linux

有人可以帮我吗

解决方法

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

我刚刚经历了这一切,就像这样:

>在您的zip压缩包函数包中包含ffmpeg静态二进制文件(每次构建时,我都有一个gulp任务将其复制到/ dist中)
>当您的函数被@L_618_5@时,将二进制文件移动到/ tmp / dir,然后使用chmod来给予自己的访问权限(2017年2月更新:据报道,这不再需要,请重试:@loretoparisi和@ ALLEN的答案)。
>更新您的PATH以包含ffmpeg可执行文件(我使用fluent-ffmpeg,它可以让您设置two env vars@R_450_11222@处理。

让我知道如果需要更多的细节,我可以更新这个答案。

复制和chmod(步骤2)显然不是很理想….想知道是否有人找到更好的方法来处理这个问题,或者这是典型的这种架构风格。

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

正如@ALLEN指出的那样,复制chmod步骤就不再需要了 – 我在这个时候直接从/ var / task /执行Lambda函数中的ffmpeg,没有麻烦。一定要chmod 755任何二进制文件上传到Lambda(也如@ALLEN指出)。

我不再使用流畅的ffmpeg来完成这项工作。相反,我正在更新PATH以包含process.env [‘LAMBDA_TASK_ROOT’]并执行简单的bash脚本。

在您的Lambda功能的顶部:

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

有关使用ffmpeg:lambda-pngs-to-mp4的示例。

对于一些有用的lambda组件:lambduh

下面的更新留给后代,但不再需要:

更多详情:

我下载了静态ffmpeg二进制here.亚马逊建议启动一个EC2并构建一个二进制文件您使用,因为该环境将与Lambda运行的条件相同。可能是一个好主意,但更多的工作,这个静态下载为我工作。

我只将ffmpeg二进制文件拖到我的项目的待存档/ dist文件夹中。

当您将zip压缩文件上传到lambda时,它将保存在/ var / task /中。无论什么原因,我遇到了尝试在该位置使用二进制文件的访问问题,以及更多的问题尝试在该文件上编辑文件的权限。快速解决方法是将二进制文件移动到/ tmp /和chmod权限。

在Node中,您可以通过child_process运行sHell。我所做的看起来像这样

@H_502_55@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上。

我放弃了流畅的ffmpeg并使用节点启动ffmpeg命令,有利于从节点中启动一个bash脚本,所以对于我来说,我不得不在lambda函数的顶部添加/ tmp /我的路径:

process.env.PATH = process.env.PATH’:/ tmp /’

如果您使用流畅的ffmpeg,您可以通过以下方式设置ffmpeg的路径:

process.env [‘FFMPEG_PATH’] =’/ tmp / ffmpeg’;

有些相关/无耻的自我插件:我正在开发一组模块,使得可以@R_450_11222@地组建可扩展模块的Lambda功能名称为@L_772_54@.可以节省一些时间将这些东西放在一起。一个快速的例子:使用lambduh-execute处理这种情况将是一样简单:

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

承诺是一系列应运而生的承诺。

大佬总结

以上是大佬教程为你收集整理的node.js – AWS Lambda制作视频缩略图全部内容,希望文章能够帮你解决node.js – AWS Lambda制作视频缩略图所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。