电子:实时获取文件转换百分比:
我想运行命令ffmpeg -i video.mp4
(示例(将视频转换为另一种格式。但我想获得流程输出中流式传输的转换百分比,并在我的Electron应用程序或NodeJS中获得它。
我已经尝试了所有方法:spawn
fork
exec
,所有这些方法都会返回流程输出的最后一行。我想要写的每一行的实时流,以显示进度的百分比。
我试过:
货叉
const {fork} = require('child_process')
const forked = fork('ffmpeg -i video.mp4');
forked.on('message', (msg) => {
console.log(msg);
})
Exec备选方案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, 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% 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进度包装器一起使用。附加事件";进步;并获得";进步;所有物
process.on('progress', (progress) => console.log(JSON.stringify(progress.progress));
它从0变为1,因此您需要设置一些调整。