Node.js 使用ffmpeg-nodejs区分错误和标准终端日志
我在node js中使用Node.js 使用ffmpeg-nodejs区分错误和标准终端日志,node.js,ffmpeg,stdout,stderr,Node.js,Ffmpeg,Stdout,Stderr,我在node js中使用ffmpeg。标准终端输出和错误似乎都被发送到标准输出,所以我不知道如何区分错误和成功。。。这是我的密码: var convertToMp3 = function(filePath) { var ffmpeg = child_process.spawn('ffmpeg',['-i', filePath, '-y', 'output.mp3']); var err = ''; ffmpeg.stderr .on('data', function(c) {
ffmpeg
。标准终端输出和错误似乎都被发送到标准输出,所以我不知道如何区分错误和成功。。。这是我的密码:
var convertToMp3 = function(filePath) {
var ffmpeg = child_process.spawn('ffmpeg',['-i', filePath, '-y', 'output.mp3']);
var err = '';
ffmpeg.stderr
.on('data', function(c) { err += c; })
.on('end', function() { console.log('stderr:', err); });
var d = '';
ffmpeg.stdout
.on('data', function(c){d +=c;})
.on('end', function(){ console.log('stdout', d); });
}
无论转换成功还是失败,stdout都是空的,并且stderr包含如果我在终端中运行由@aergistal comment启发的相应命令所得到的内容,这里有一个对我有效的解决方案,其中回调将在任务结束时执行,并带有签名
函数(错误,成功)
,像往常一样
var convertToMp3 = function(filePath, callback) {
var ffmpeg = child_process.spawn('ffmpeg',['-i', filePath, '-y', 'output.mp3']);
var err = '';
ffmpeg.stderr.on('data', function(c) { err += c; }).on('end', function() { console.log('stderr:', err); });
ffmpeg.on('exit', function(code) {
if (code) {
callback({code: code, message: err});
} else {
callback(null, {success: true, message: err});
}
});
}
或者使用新的js样式:
const convertToMp3 = (filePath) => new Promise((resolve, reject) {
const ffmpeg = child_process.spawn('ffmpeg', ['-i', filePath, '-y', 'output.mp3']);
let output = '';
ffmpeg.stderr
.on('data', c => { output += c; });
ffmpeg.on('exit', code => {
if (code) {
reject({ code: code, message: output });
} else {
resolve(output);
}
});
});
const ffmpegOutput = await convertToMp3('./video.mp4');
...
Ffmpeg将其所有日志数据输出到
stderr
,以使stdout
可以自由地通过管道将输出数据传输到其他程序或其他Ffmpeg实例
当将ffmpeg作为自动进程运行时,提供选项通常很有用
-loglevel error
在正常情况下,它将完全静音,并且只输出错误数据(到stderr),这通常是您从命令行程序中所期望的。
stdout
是为数据保留的。如果只需要知道流程是否失败和/或解析stderr
输出,请检查流程退出代码。我喜欢它。关于如何在成功退出后返回“已实现”的承诺的任何提示?您的意思是将基于回调的函数转换为承诺?看我的编辑。你为我节省了很多时间,谢谢!