FFMPEG在AWS Lambda中失败

Zai*_*mir 5 ffmpeg aac h.264 amazon-web-services aws-lambda

我正在尝试为短视频创建转码功能。该功能托管在AWS Lambda上。问题是,至少在亚马逊看来,AWS lambda似乎缺少FFMPEG所需的东西。

我之前联系了亚马逊,这是他们对问题的回应:

我们发现FFMPEG操作至少需要libx264和acc库,这两个库都有它们自己的依赖性。要解决该问题,将需要更深入地研究完整的依赖链。我们可以看到它可以在Amazon Linux环境中工作,但是该环境与lambda环境相似但不相同。由于Lambda在容器上运行,因此在Amazon Linux中可能存在某些依赖关系,但在lambda环境中不存在。在这里,由于FFmpeg是第三方软件,因此很难深入依赖关系链并验证版本兼容性。不幸的是,这势必会进入架构和代码支持,这超出了AWS Support范围1。希望您了解我们的局限性。但是,如果FFmpeg支持人员对Lambda平台有任何疑问,请告知我们,我们将竭诚为您服务。一旦您收到FFmpeg支持的更新,提示Lambda端存在问题,我们将可以更好地进行进一步调查。

根据AWS的建议,我联系了开发人员邮件列表上的FFMPEG,但我的消息被拒绝,原因是它比ffmpeg用户邮件列表更适合开发人员。一周前,我已将电子邮件发送至“ ffmpeg-user@ffmpeg.org”,但尚未收到任何回复。

然后,我去建立了一个动态链接的ffmpeg版本,确保将所有库打包,检查每个库的ddl,然后制作一个小的lambda函数,循环遍历所有二进制文件,然后填充每个二进制文件,与我从亚马逊获得的输出相比Linux和lambda和AWS Linux实例上都存在相同的依赖项/版本,但是ffmpeg在lambda上仍然失败。

您可以在这里找到详细的日志文件:https : //www.datafilehost.com/d/6e5e21bb

这是我遇到的错误的一个示例,在整个日志文件中重复出现:

2018-08-14T12:27:10.874Z [h264 @ 0x65c2fc0]隐藏P帧中的2628 DC,2628 AC,2628 MV错误

2018-08-14T12:27:10.874Z [aac @ 0x65d2f00]未分配通道元素2.11

2018-08-14T12:27:10.874Z解码流#0:1时出错:处理输入时发现无效数据

2018-08-14T12:27:10.874Z [h264 @ 0x67e86c0]无效的NAL单位大小(108085662> 1649)。

2018-08-14T12:27:10.874Z [h264 @ 0x67e86c0]将输入拆分为NAL单元时出错。

2018-08-14T12:27:10.874Z [aac @ 0x65d2f00]未分配通道元素2.0

2018-08-14T12:27:10.874Z解码流#0:1时出错:处理输入时发现无效数据

2018-08-14T12:27:10.874Z [h264 @ 0x68189c0]无效的NAL单位大小(71106974> 1085)。

2018-08-14T12:27:10.874Z [h264 @ 0x68189c0]将输入拆分为NAL单元时出错。

2018-08-14T12:27:10.874Z [aac @ 0x65d2f00]八个短序列中不允许使用脉冲工具。

尝试对此文件执行HLS转码时,将生成此日志:https : //www.datafilehost.com/d/999a4492

请注意,问题不仅与该文件无关,也与HLS,它的一般性问题以及所有视频上发生的所有问题以及任何试图查找流的ffmpeg命令有关,甚至尝试使用可能的最简单形式从视频中提取单个帧例如:ffmpeg -ss 00:00:02 -I file.mp4 -vframes 1 -y output.jpg在日志文件中也因相同的错误而失败。

不知道如何进一步调试。尝试使用“ -loglevel debug”启用调试日志,但没有提供任何其他信息。任何帮助或建议

der*_*khh 5

我今天遇到了完全相同的问题并花了几个小时。但最后我遇到了这个SO 答案并找到了解决方案。

基本上,您需要确保没有将 STDIN 传递给 FFmpeg 进程。这张幻灯片上的 re:Invent 演讲中提到了这一点


小智 0

如果您在使用 ffmpeg 时遇到问题,请尝试使用 avconv。avconv 是 ffmpeg 的一个分支,可以以相同的方式调用。当我尝试在 lambda 环境中解码 aac 音频流时,我遇到了与 ffmpeg 相同的问题,但 John Van Sickle 的 avconv 静态构建对我来说按预期工作。

另外,请确保为 lambda 函数分配足够的 RAM。静态 ffmpeg 二进制文件很大,编码需要大量 RAM,尤其是在编码视频时。