【发布时间】:2020-09-25 19:03:39
【问题描述】:
所以我正在使用 Elastic transcoder 将上传的视频从我的 S3 存储桶转换为 GIF。
目前,当我上传到 S3 时,我有一个基本的 lambda,它会触发管道转换为 gif。
现在发生的事情是我上传了一个 7mb 的 mp4,当它转码后输出的 gif 是 80+ MB 的??
我浏览了文档,但找不到任何对我有帮助的东西。谁能解释一下...
下面是我在弹性转码中的预设
Codec -- gif
Codec Options:
LoopCount: 5
Bit Rate -- auto
Frame Rate -- auto
Video Max Frame Rate -- 10
Max Width -- auto
Max Height -- auto
Sizing Policy -- ShrinkToFit
Padding Policy -- NoPad
Display Aspect Ratio -- auto
我的任何 lamdba 看起来都是这样的:
'use strict';
var AWS = require('aws-sdk'),
transcoder = new AWS.ElasticTranscoder({
apiVersion: '2012-09-25',
region: 'eu-west-1'
});
exports.handler = (event, context, callback) => {
let fileName = event.Records[0].s3.object.key;
var srcKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));
var newKey = fileName.split('.')[0];
console.log('New video has been uploaded:', fileName);
transcoder.createJob({
PipelineId: process.env.PIPELINE_ID,
Input: {
Key: srcKey,
FrameRate: 'auto',
Resolution: 'auto',
AspectRatio: 'auto',
Interlaced: 'auto',
Container: 'auto'
},
Output: {
Key: getOutputName(fileName),
ThumbnailPattern: '',
PresetId: 'XXXXXXXXXXX',
Rotate: 'auto'
}
}, function(err, data){
if(err){
console.log('Something went wrong:',err)
}else{
console.log('Converting is done');
}
callback(err, data);
});
};
function getOutputName(srcKey){
let baseName = srcKey.replace('videos/','');
let withOutExtension = removeExtension(baseName);
return 'gifs/' + withOutExtension + '.gif';
}
function removeExtension(srcKey){
let lastDotPosition = srcKey.lastIndexOf(".");
if (lastDotPosition === -1) return srcKey;
else return srcKey.substr(0, lastDotPosition);
}
【问题讨论】:
标签: amazon-web-services aws-lambda