尝试使用Lambda上的FFMpeg层对视频进行转码

问题描述 投票:0回答:1

我正在尝试使用AWS Lambda上的.ogv层将.mp4文件转换为ffmpeg


我跟随a tutorial from the people at Serverless Framework.mp4转换为GIF,效果很好。使用相同的ffmpeg static build,(ffmpeg-git-amd64-static.tar.xz),我开始将.ogv文件转换为.mp4文件。

到目前为止,我已经成功地将视频上传到S3存储桶,获得Lambda来检索该视频,使用ffmpeg二进制文件对视频进行处理,然后将新文件复制到S3。


问题:

创建的视频将无法播放。

数据点1:该函数生成的文件太小。

输入视频文件为1.3MB,输出视频仅为256.0KB

数据点2: 找不到Moov原子。

将生成的视频从S3复制到本地计算机后,我尝试使用ffplay播放,但收到此错误:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fd613093400] moov atom not found
frank.mp4: Invalid data found when processing input

据我所知,moov原子应该包含有关.mp4文件的重要元数据。


实施:

我使用无服务器框架来设置AWS基础设施。

以下是我尝试过的一些不同的ffmpeg命令:

第一次尝试:

  // convert to mp4!
    spawnSync(
      "/opt/ffmpeg/ffmpeg",
      [
        "-i",
        `/tmp/${record.s3.object.key}`,
        "-vcodec",
        "libx264",
        "-acodec",
        "aac",
        `/tmp/${record.s3.object.key}.mp4`
      ],
      { stdio: "inherit" }
    );

第二次尝试:

 // convert to mp4!
    spawnSync(
      "/opt/ffmpeg/ffmpeg",
      [
        "-i",
        `/tmp/${record.s3.object.key}`,
        `/tmp/${record.s3.object.key}.mp4`
      ],
      { stdio: "inherit" }
    );

第三次尝试:

[我在Stack Overflow question中发现了这种方法,并且发帖者说这对他有用。

// convert to mp4!
spawnSync(
  "/opt/ffmpeg/ffmpeg",
  [
    '-i',
    `/tmp/${record.s3.object.key}`,
    '-codec:v',
    'libx264',
    '-profile:v',
    'main',
    '-preset',
    'slow',
    '-b:v',
    '400k',
    '-maxrate',
    '400k',
    '-bufsize',
    '800k',
    '-threads',
    '0',
    '-b:a',
    '128k',
    `/tmp/${record.s3.object.key}.mp4`
  ],
  { stdio: "inherit" }
);

这些作品中的每一项在我的本地机器上都肿起来。

如果我使用的ffmpeg二进制文件不受欢迎,(我在与Lambda上的转码有关的多个站点上都看到过它),我想那可能是该层的问题……也许。

任何见识将不胜感激。谢谢。

video ffmpeg aws-lambda transcoding aws-lambda-layers
1个回答
0
投票

这是一个简单的操作,在我的案例中,它被忽略了,涉及到我的Lambda配置。

The Bug

默认情况下,Lambda具有6秒钟的超时时间,之后它们将停止处理。

似乎我的转码功能运行时间过长,并且Lambda在文件可以完成转码之前被终止。

修复

我将Lambda函数的超时设置为最大15分钟。完成此操作后,过程将按预期工作,并且视频已转码并可以播放。

© www.soinside.com 2019 - 2024. All rights reserved.