Javascript 使用FFMPEG处理节点中的屏幕录制帧

Javascript 使用FFMPEG处理节点中的屏幕录制帧,javascript,node.js,image,ffmpeg,screenshot,Javascript,Node.js,Image,Ffmpeg,Screenshot,我正在尝试使用Node.JS和FFMPEG捕获屏幕,我已经保存了一个flv文件,但我无法实时处理帧 到目前为止,我的代码是 const ffmpeg=require('ffmpeg-static'); const{spawn}=require('child_进程'); const{createWriteStream}=require('fs'); const canvas=document.querySelector(“#canvas”); const ctx=canvas.getContext

我正在尝试使用Node.JS和FFMPEG捕获屏幕,我已经保存了一个flv文件,但我无法实时处理帧

到目前为止,我的代码是

const ffmpeg=require('ffmpeg-static');
const{spawn}=require('child_进程');
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”、“预设”、“超快”、““--f”、“flv”、““-”],
{stdio:“管道”}
);
const stream=process.stdout;
const file=createWriteStream('capture.flv');
stream.pipe(文件);
stream.on('data',chunk=>{
const base64=chunk.toString('base64');
const data=`data:image/png;base64,${base64}`;
常量图像=新图像();
image.src=数据;
ctx.drawImage(图像,0,0);
});

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

我找到了解决方案。将
-f
标志从
flv
更改为
mjpeg
成功。这会将其流化为一系列jpeg图像,因此这些块可以转换为base64字符串,然后转换为jpg图像