我有一个部署在AWS
上的无服务器网络应用程序,我必须从上传的视频截取屏幕截图到S3
。我使用ffmpeg
来提取屏幕截图,但唯一的缺点是我必须先下载视频文件才能让ffmpeg
使用它。
知道我正在使用AWS Lambda
并且我没有视频长度限制的用户可能会上传大文件,这会使AWS Lambda
达到存储限制。
为了解决这个问题,我考虑下载一小部分视频并与ffmpeg
一起使用来提取缩略图,因此使用带有范围参数的S3.getOjbect
方法我可以下载文件的一部分但{ {1}}无法理解
这是我的代码:
ffmpeg
提取缩略图的代码:
s3.getObject({
Bucket: bucketName,
Key: key,
Range: 'bytes=0-1048576'
}, (err, data) => {
fs.writeFile(fileName, data.Body, error => {
if (error)
console.log(error)
else
console.log('File saved');
})
})
我从const ffmpeg = require('fluent-ffmpeg');
new ffmpeg(fileName).screenshots({
timestamps: [0],
filename: 'thumb.png',
folder: '.'
})
ffmpeg
我知道保存这样的文件存在问题,但我找不到解决问题的任何解决方案。如果有人会非常感激。
更新
事实证明,Error: ffmpeg exited with code 1: ./test.mp4: Invalid data found when processing input
为我做了这个,我只是给它ffmpeg
并且它下载了渲染截图所需的内容,而无需在本地下载文件,代码如下所示: / p>
url
答案 0 :(得分:0)
要做到这一点,你需要了解mp4的格式,并确保你获取足够的数据沿着框架边界排列,然后改变任何标题,以便ffmpeg可以理解部分数据并且不认为它只是有一个损坏的文件。
当您进入AWS生态系统时,您可以尝试使用Elastic Transcode对视频进行转码并要求其生成缩略图吗?