nodejs exec ffmpeg,在ffmpeg完成之前触发回调

时间:2015-06-24 11:46:34

标签: node.js ffmpeg

我通过nodejs脚本运行ffmpeg命令:

var exec = require('child_process').exec;
exec('ffmpeg -with -some -options somefile.mp4',function(error, stdout, stderr){
   // some processing 
});

我注意到有时候,甚至在ffmpeg结束之前就会触发回调。如何在ffmpeg完成后才确保进行回调处理?什么可能导致它在不完成的情况下触发回调?

2 个答案:

答案 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"