Video 尝试在Lambda上使用FFMpeg层对视频进行转码 我正在尝试使用AWS Lambda上的ffmpeg层将.ogv文件转换为.mp4。
我随后将Video 尝试在Lambda上使用FFMpeg层对视频进行转码 我正在尝试使用AWS Lambda上的ffmpeg层将.ogv文件转换为.mp4。,video,ffmpeg,aws-lambda,transcoding,aws-lambda-layers,Video,Ffmpeg,Aws Lambda,Transcoding,Aws Lambda Layers,我随后将.mp4转换为GIF,效果非常好。使用相同的(ffmpeg-git-amd64-static.tar.xz),我开始将.ogv文件转换为.mp4文件 到目前为止,我已经成功地将视频上传到S3存储桶中,让Lambda检索该视频,使用ffmpeg二进制文件对视频进行处理,并将新文件复制到S3 问题是: 创建的视频将不会播放 数据点1:函数生成的文件太小 输入视频文件为1.3MB,输出视频仅为256.0KB 数据点2:未找到moov原子 将结果视频从S3复制到本地机器后,我尝试使用ffpla
.mp4
转换为GIF
,效果非常好。使用相同的(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
据我所知,moovatom应该包含关于.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" }
);
第三次尝试:
// convert to mp4!
spawnSync(
"/opt/ffmpeg/ffmpeg",
[
"-i",
`/tmp/${record.s3.object.key}`,
`/tmp/${record.s3.object.key}.mp4`
],
{ stdio: "inherit" }
);
我在堆栈溢出中发现了这种方法,海报上说它对他有效
// 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上的转码相关),我猜这是一个层的问题。。。也许吧
如有任何见解,将不胜感激。谢谢。这是一个涉及Lambda配置的简单且被忽略的修复 错误 默认情况下,lambda有一个6秒的超时,在此之后它们停止处理 似乎我的转码函数运行得太长,并且Lambda在文件完成转码之前被终止 修复程序
我将Lambda函数的超时设置为最大15分钟。完成此操作后,该过程按预期工作,视频被转码并能够播放。对于小型视频文件,lambda超时15分钟看起来是一个很好的解决方案 我尝试压缩一个93MB的文件,lambda函数超时超过15分钟
解决方案是将分配给lambda函数的内存大小从128MB增加到2048MB。IIRC ffmpeg有时使用文件扩展名来了解要转换为/从哪个文件格式。有没有可能输入文件中缺少文件扩展名,导致ffmpeg错误识别文件类型?嗯,我不这么认为。S3中的输入文件具有正确的扩展名,
.ogv
。就您的观点而言,我认为上面尝试2的第6行应该是/tmp/${record.s3.object.key}.ogv
,但如果我的理解是正确的,这将导致类似“file_name.ogv.ogv”的结果。