我有一组视频,我想从每个视频中截取一个屏幕截图,然后对这些生成的图像进行一些处理,最后将它们存储起来。
为了能够进行处理,我需要将屏幕截图作为缓冲区。
这是我的代码
ffmpeg(videoFilePath)
.screenshots({
count: 1,
timestamps: ['5%'],
folder: DestinationFolderPath,
size: thumbnailWidth + 'x' + thumbnailHeight,
})
.on('err', function (error) {
console.log(err)
});
如您所见,输出直接存储在 DestinationFolderPath 中。而不是我想将输出作为缓冲区。
最佳答案
我不确定如何直接执行此操作,但屏幕截图保存在文件系统的文件夹中,因此您可以从那里读取文件并将其转换为缓冲区。
const thumbnailStream = createReadStream(thumbnailPath)
const thumbnailBuffer = stream2buffer(thumbnailStream)
将流转换为缓冲区的方法有很多,您可以查看 this question .例如from this answer
function stream2buffer(stream) {
return new Promise((resolve, reject) => {
const _buf = [];
stream.on("data", (chunk) => _buf.push(chunk));
stream.on("end", () => resolve(Buffer.concat(_buf)));
stream.on("error", (err) => reject(err));
});
}
const thumbnailStream = createReadStream(thumbnailPath)
const thumbnailBuffer = await stream2buffer(thumbnailStream)
和createReadStream
从 fs
导入
关于node.js - 如何将 fluent-ffmpeg 屏幕截图的输出作为缓冲区而不是直接写入磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64876235/