我正在使用Node.js的fluent-ffmpeg库将最初以Flash电影格式录制的视频转码为多种分辨率(1080p等)的mp3格式,并将转码后的视频移动到S3存储桶。
我从源S3存储桶获取原始.flv文件并将流传递给ffmpeg构造函数。问题是,在转码完成后,我如何获得发送到S3的mp4数据流。
以下是我目前的代码:
var params = {
Bucket: process.env.SOURCE_BUCKET,
Key: fileName
};
s3.getObject(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
var format = ffmpeg(data)
.size('854x480')
.videoCodec('libx264')
.format('flv')
.toFormat('mp4');
.on('end', function () {
//Ideally, I would like to do the uploading here
var params = {
Body: //{This is my confusion, how do I get the stream to add here?},
Bucket: process.env.TRANSCODED_BUCKET,
Key: fileName
};
s3.putObject(params, function (err, data) {
});
})
.on('error', function (err) {
console.log('an error happened: ' + err.message);
});
});
对于上面的代码,我在哪里可以获得转码流以添加到参数对象的“Body”属性中?更新:
这是我正在尝试做的修改:
var outputStream: MemoryStream = new MemoryStream();
var proc = ffmpeg(currentStream)
.size('1920x1080')
.videoCodec('libx264')
.format('avi')
.toFormat('mp4')
.output(outputStream)
// setup event handlers
.on('end', function () {
uploadFile(outputStream, "").then(function(){
resolve();
})
})
.on('error', function (err) {
console.log('an error happened: ' + err.message);
});
我希望避免从s3将文件复制到本地文件系统,而是更喜欢在内存中处理文件,并在完成时上传回s3。流畅的ffmpeg是否支持此场景?