使用ffmpeg区分错误和标准终端日志 - nodejs
Differentiate between error and standard terminal log with ffmpeg - nodejs
我在节点 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) { 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 评论的启发,这是一个适合我的解决方案,其中回调将在任务结束时执行,与往常一样带有签名 function(error, success)
。
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),这通常是您期望从命令行程序获得的结果。
我在节点 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) { 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 评论的启发,这是一个适合我的解决方案,其中回调将在任务结束时执行,与往常一样带有签名 function(error, success)
。
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),这通常是您期望从命令行程序获得的结果。