gpt4 book ai didi

javascript - Node中使用FFMPEG处理录屏的帧数

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

我正在尝试使用 Node.JS 和 FFMPEG 捕获我的屏幕,并且我已经保存了一个 flv 文件,但我无法实时处理这些帧。
到目前为止我的代码是

const ffmpeg = require('ffmpeg-static');
const {spawn} = require('child_process');
const {createWriteStream} = require('fs');

const canvas = document.querySelector('#canvas');
const ctx = canvas.getContext('2d');

const process = spawn(
ffmpeg,
["-f", "gdigrab", "-framerate", "30", "-i", "desktop", '-crf', '0', '-preset', 'ultrafast', '-f', 'flv', '-'],
{ stdio: "pipe" }
);


const stream = process.stdout;

const file = createWriteStream('capture.flv');
stream.pipe(file);

stream.on('data', chunk => {
const base64 = chunk.toString('base64');
const data = `data:image/png;base64,${base64}`;

const image = new Image();
image.src = data;
ctx.drawImage(image, 0, 0);
});

创建的 output.flv 文件很好,但在流中创建的图像似乎不是有效的图像。当我记录 base64 并尝试将单个字符串转换为图像时,它似乎是无效的图像数据。我想使用流来捕获流的每一帧。

最佳答案

我找到了解决方案。更改 -f来自 flv 的标志至mjpeg成功了。这会将其作为一系列 jpeg 图像流式传输,因此可以将 block 转换为 base64 字符串,然后再转换为 jpg 图像。

关于javascript - Node中使用FFMPEG处理录屏的帧数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64092081/

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