gpt4 book ai didi

amazon-web-services - 读取 S3 视频文件,用 ffmpeg 处理并上传到 S3

转载 作者:行者123 更新时间:2023-12-04 23:12:49 24 4
gpt4 key购买 nike

我有一个视频存储在 s3 存储桶中,带有经过身份验证的读取 ACL。

我需要阅读并使用 ffmpeg (nodejs) 制作预告片

这是我用来生成预告片的代码

exports.generatePreview = (req, res) => {
const getParams = {
Bucket: S3_CREDENTIALS.bucketName,
Key: req.params.key
}
s3.getSignedUrl('getObject', getParams, (err, signedRequest) => {
console.log(signedRequest, err, 'getSignedUrl')
ffmpeg(new URL(signedRequest))
.size('640x?')
.aspect('4:3')
.seekInput('3:00')
.duration('0:30')
.then(function (video) {
s3.putObject({ Bucket: S3_CREDENTIALS.bucketName, key: 'preview_' + req.body.key, Body: video }, function (err, data) {
console.log(err, data)
})
});
});

}

不幸的是,构造函数路径似乎没有读取远程 url。如果我尝试使用相同的签名 URL 执行 ffmpeg 命令行(即 ffmpeg -i "https://[bucketname].s3.eu-west-1.amazonaws.com/[key.mp4]?[signedParams]" -vn -acodec pcm_s16le -ar 44100 -ac 2 video.wav )

我得到的错误是signedRequest url 'The input file does not exist'
即使我尝试使用 http 请求具有相同的结果,似乎也不支持 fs.readFileSync https。 fs.readFileSync(signedurl) => 给出相同的结果

如何克服这个问题?

最佳答案

如果您使用的是 node-ffmpeg,这是不可能的,因为该库仅接受指向本地路径的字符串,但 fluent-ffmpeg 确实支持读取流,因此请尝试一下。

例如(未经测试,只是吐痰):

const ffmpeg = require('fluent-ffmpeg');
const stream = require('stream');

exports.generatePreview = (req, res) => {
let params = {Bucket: S3_CREDENTIALS.bucketName, Key: req.params.key};

// Retrieve object stream
let readStream = s3.getObject(params).createReadStream();

// Set up the ffmpeg process
let ffmpegProcess = new ffmpeg(readStream)
//Add your args here
.toFormat('mp4');

ffmpegProcess.on('error', (err, stdout, stderr) => {
// Handle errors here
}).on('end', () => {
// Processing is complete
}).pipe(() => {
// Create a new stream
let pt = new stream.PassThrough();

// Reuse the same params object and set the Body to the stream
params.Key = 'preview_' + req.body.key;
params.Body = pt;

// Upload and wait for the result
s3.upload(params, (err, data) => {
if (err)
return console.error(err);

console.log("done");
})
});
});

这将有很高的内存要求,因此如果这是一个 Lambda 函数,您可能会尝试仅检索文件的前 X 个字节并仅转换它。

关于amazon-web-services - 读取 S3 视频文件,用 ffmpeg 处理并上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61474806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com