如何解决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 举报,一经查实,本站将立刻删除。