微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Electron和NodeJS:与实时流异步执行shell命令

如何解决Electron和NodeJS:与实时流异步执行shell命令

电子:实时获取文件转换百分比:

我想运行命令ffmpeg -i video.mp4(示例)将视频转换为另一种格式。但是我想获取在流程输出中流式传输的转换百分比,并在我的Electron App或NodeJS中获取它。

我尝试了所有方法spawn fork exec,所有这些方法都向我返回过程输出的最后一行。我希望每个行的LIVE流都可以显示进度百分比。

我尝试过:

叉子

const {fork} = require('child_process')
    const forked = fork('ffmpeg -i video.mp4');
    forked.on('message',(msg) => {
        console.log(msg);
})

Exec Alternative 1

const execFile = require('child_process').execFile;
    execFile('ffmpeg -i video.mp4',[],(e,stdout,stderr) => {
        if (e instanceof Error){
            console.error(e);
            
        }
        console.log('stdout ',stdout)
        console.log('stderr ',stderr);
})

Exec Alternative 2

const exec = require('child_process').exec;
    exec('ffmpeg -i video.mp4',(error,stderr) => { 
       console.log(stdout); 
});

/*EXEC Alternative 2*/
const exec = require('child_process').exec;
const proccessing = exec('ffmpeg -i video.mp4');
proccessing.stdout.on('data',function(data) {
  console.log(data); 
});
proccessing.stdout.pipe(process.stdout);

生成

const spawn = require('child_process').spawn,const processing = spawn('ffmpeg -i video.mp4');

processing .stdout.on('data',function (data) {
   console.log('stdout: ' + data.toString());
});

processing .stderr.on('data',function (data) {
   console.log('stderr: ' + data.toString());
});

processing .on('exit',function (code) {
   console.log('code ' + code.toString());
});

摘要

?目标: 在控制台中获得此结果

10% converted
15% converted
20% converted
100% converted...

错误: 我得到的是:

100% converted
//Sometimes I get an empty string because it is the last line of the .exe script

在将其标记为重复之前,我肯定没有任何问题可以解决我的问题

解决方法

您需要将ffmpeg与ffmpeg-progress-wrapper一起使用。附加事件“ progress”并获取“ progress”属性。

process.on('progress',(progress) => console.log(JSON.stringify(progress.progress));

它从0到1,因此您需要进行一些调整。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。