我正在尝试将.ogv
文件转换为.mp4
使用AWS Lambdaffmpeg
上的层。
我按照Serverless Framework 人员的教程将.mp4
's 转换为GIF
's,效果很好。使用相同的ffmpeg 静态构建(ffmpeg-git-amd64-static.tar.xz) 我开始将.ogv
文件转换为.mp4
文件。
到目前为止,我已经成功地将视频上传到 S3 存储桶,让 Lambda 检索该视频,使用ffmpeg
二进制文件对视频执行某些操作,并将新文件复制到 S3。
问题:
创建的视频将不会播放。
数据点 1:函数生成的文件太小。
输入视频文件1.3MB,输出视频只有256.0KB
数据点 2: 未找到 moov atom。
将生成的视频从 S3 复制到我的本地计算机后,我尝试使用播放ffplay
,但收到此错误:
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fd613093400] moov atom not found
frank.mp4: Invalid data found when processing input
据我所知,moov atom 应该包含有关.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问题中发现了这种方法,发帖人说它对他有用。
// 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 上的转码有关的网站上看到它),我的猜测是它是层的问题......也许。
任何见解将不胜感激。谢谢你。