如何从 Fluent-ffmpeg 屏幕截图中获取输出作为缓冲区,而不是直接将其写入磁盘?

Moh*_*een 7 ffmpeg node.js fluent-ffmpeg

我有一组视频,我想对每个视频进行屏幕截图,然后对这些生成的图像进行一些处理,最后存储它们。

为了能够进行处理,我需要将屏幕截图作为缓冲区。

这是我的代码

ffmpeg(videoFilePath)
.screenshots({
     count: 1,
     timestamps: ['5%'],
     folder: DestinationFolderPath,
     size: thumbnailWidth + 'x' + thumbnailHeight,
})
.on('err', function (error) {
     console.log(err)
});
Run Code Online (Sandbox Code Playgroud)

如您所见,输出直接存储在 DestinationFolderPath 中。相反,我想将输出作为缓冲区。

Ven*_*sky -2

我不确定如何直接执行此操作,但屏幕截图保存在文件系统中的文件夹中,因此您可以从那里读取文件并将其转换为缓冲区。

const thumbnailStream = createReadStream(thumbnailPath)
const thumbnailBuffer = stream2buffer(thumbnailStream)
Run Code Online (Sandbox Code Playgroud)

将流转换为缓冲区的方法有很多,您可以在这个问题中查看。

例如从这个答案

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)
Run Code Online (Sandbox Code Playgroud)

并且createReadStream是进口自fs