extractGif(fps) {
    return new Promise((resolve, reject) => {
      let ops;
      if (fps && fps < 60) {
        ops = `-vsync cfr -start_number 0`;
      } else {
        fps = this.rootConf('fps');
        ops = `-vsync cfr -r ${fps} -start_number 0`;
      }
      this.fps = fps;

      const path = this.getPath();
      this.materials.path = this.getOutput();
      this.command.addInput(path);
      this.command.outputOptions(ops.split(' '));
      this.command.output(this.materials.path);
      this.command
        .on('start', commandLine => {
          FFLogger.info({ pos: 'FFGif', msg: `Gif preProcessing start: ${commandLine}` });
        })
        .on('progress', progress => {
          this.materials.length = progress.frames;
        })
        .on('end', () => {
          FFLogger.info({
            pos: 'FFGif',
            msg: `Gif preProcessing completed: ${this.materials}`,
          });
          resolve();
        })
        .on('error', error => {
          FFLogger.error({ pos: 'FFGif', msg: `Gif preProcessing error`, error });
          reject(error);
        });
      this.command.run();
    });
  }
GIF file extraction and framing
@private