【发布时间】:2017-10-26 23:50:54
【问题描述】:
我正在使用带有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);
});
});
对于上面的代码,我在哪里可以得到转码流以添加到 params 对象的“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。 fluent-ffmpeg 会允许这种情况吗?
【问题讨论】:
标签: video amazon-s3 ffmpeg transcoding