I'm using ffmpeg
in node js. Both the standard terminal output and the error seems to be sent to stdout, so I don't know how to differentiate between error and success... Here's my code:
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); });
}
wether the conversion succeeds or fails, stdout is empty and stderr contains what I'd get if I'd run the corresponding command in the terminal
Ffmpeg outputs all of its logging data to stderr
, to leave stdout
free for piping the output data to some other program or another ffmpeg instance.
When running ffmpeg as an automatic process it's often useful give the option
-loglevel error
which turns it completely mute in a normal scenario and only outputs the error data (to stderr), which is normally what you would expect from a command-line program.
Inspired by @aergistal comment, here is a solution that works for me, where callback is to be executed at the end of the task, with the signature function(error, success)
, as usual.
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});
}
});
}
or in the new js style:
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');
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With