为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣染霜花 2023-04-01 15:39:36
Electron:实时获取文件转换百分比:我想运行命令ffmpeg -i video.mp4(示例)将视频转换为另一种格式。但我想获得在流程输出中流式传输的转换百分比,并在我的 Electron App 或 NodeJS 中获取它。我已经尝试了所有方法:spawn fork exec并且所有方法都将过程输出的最后一行返回给我。我想要一个已写入的每一行的实时流,以显示进度百分比。我试过了:叉const {fork} = require('child_process')    const forked = fork('ffmpeg -i video.mp4');    forked.on('message', (msg) => {        console.log(msg);})执行备选方案 1const 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);})执行备选方案 2const exec = require('child_process').exec;    exec('ffmpeg -i video.mp4', (error, stdout, 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% converted15% converted20% converted100% converted...❌错误:我得到的是:100% converted//Sometimes I get an empty string because it is the last line of the .exe script在标记为重复之前,我确定在 STACKOVERFLOW 中没有一个答案适合我
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

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

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

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


查看完整回答
反对 回复 2023-04-01
  • 1 回答
  • 0 关注
  • 260 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信