我通过nodejs脚本运行ffmpeg命令:
var exec = require('child_process').exec;
exec('ffmpeg -with -some -options somefile.mp4',function(error, stdout, stderr){
// some processing
});
我注意到有时候,甚至在ffmpeg结束之前就会触发回调。如何在ffmpeg完成后才确保进行回调处理?什么可能导致它在不完成的情况下触发回调?
答案 0 :(得分:1)
这是我的方法
downloadHLS = function (uri, opath) {
var self = this;
// defaults
var loglevel = self.logger.isDebug() ? 'debug' : 'warning';
return new Promise((resolve, reject) => {
const args = [
'-y',
'-loglevel', loglevel,
'-v', 'quiet',
'-i', uri,
opath
];
const opts = {
cwd: self._options.tempDir
};
cp.spawn('ffmpeg', args, opts)
.stderr.on('data', (data) => {
self.logger.warn(`stderr: ${data}`);
})
.on('message', msg => self.logger.info(msg))
.on('error', reject)
.on('exit', (code, signal) => {
self.logger.info("downloadHLS [exit] code:%s signal:%s", code, signal);
})
.on('close', () => {
self.logger.info("downloadHLS [close]");
return resolve();
})
});
}//downloadHLS
ffpmeg
结束处理时调用的事件是 close
。事件 exit
实际上并未以这种方式调用。
答案 1 :(得分:0)
使用 process.spawn 代替 exec 。然后,您可以具有针对不同事件的回调。
.dir = "backwards"