Fluent-ffmpeg vstack 缓冲图像直通流

问题描述 投票:0回答:1

我一整天都被这个问题困扰。我有一个缓冲图像数组,我需要一个脚本将它们连接在一起。

我尝试使用 Sharp 包来做到这一点,但由于我已经因为其他原因在项目中使用 Fluent-ffmpeg,所以我想继续使用它。另外,我无法在 m1 mac 上正确安装该软件包。

我当前收到的错误是这样的

Invalid file index 1 in filtergraph description [0:v]scale=iw:ih[v0];[1:v]scale=iw:ih[v1];[2:v]scale=iw:ih[v2];[3:v]scale=iw:ih[v3];vstack=4.
我必须说,这完全有道理,因为实际上只有一个输入对象 - PassThrough 流。但流包含输入数组,对吗?

return new Promise((resolve, reject) => {
        const posterOutputPath = `${outputPath}/output.jpg`;

        const inputStream = new PassThrough();
        buffers.forEach(buffer => { inputStream.write(buffer); });
        inputStream.end();

        let filter = '';
        buffers.forEach((buffer, index) => {
            filter += `[${index}:v]scale=iw:ih[v${index}];`;
        });
        filter += `vstack=${buffers.length}`;

        console.log(filter);

        ffmpeg(inputStream)
            .inputFormat('image2pipe')
            .complexFilter(filter)
            .outputOptions(['-frames:v 1', '-pix_fmt yuv420p'])
            .output(posterOutputPath)
            .on('end', () => {
                console.log('Images concatenated successfully');
                resolve(posterOutputPath);
            })
            .on('error', (err, stdout, stderr) => {
                console.error('Error concatenating images:', err);
                console.log("ffmpeg stdout:", stdout);
                console.log("ffmpeg stderr:", stderr);
                reject(err);
            })
            .run();

我已经尝试从缓冲的输入图像创建图像以确保它们不为空。

javascript node.js ffmpeg bufferedimage fluent-ffmpeg
1个回答
0
投票

对于此特定用例,您可以使用平铺过滤器。

ffmpeg -f image2pipe -i pipe:0 -vf tile=layout=1x4 -frames:v 1 -pix_fmt yuv420p output.jpg

它可以在这里工作,因为所有堆叠的图像都应具有相同的尺寸和像素格式。只是不要为行或列设置非常大的数字,因为这可能会违反图像大小限制。

© www.soinside.com 2019 - 2024. All rights reserved.