public void beforeConvert() {
      if (FFMpegUI.getFFmpeg() == null && !quickCopy.getSelection()) {
        log.warn("this never happend:must filtered by canConvert");
        return;
      }

      //			TODO if use pure_ffmpeg use it.if can handle codec.
      String ffmpegPath = FFMpegUI.getFFmpeg();
      if (ffmpegPath == null) {
        ffmpegPath = FFMpegUI.getPureFFmpeg();
      }

      // should initialize first.
      fileOverwriteControler = new FileOverwriteControler(tab.getShell());

      ffmpegExecuter = new FFMpegExecuter();
      ffmpegExecuter.setAllowDemuxingFLV(false); // if true newer ffmpeg.exe make problem.
      ffmpegExecuter.setIgnoreAvisynthExtensions(new String[0]); // use any file
      ffmpegExecuter.setExecuteListener(new FFMpegMonitor());

      MP3FFMpegPreference preference = new MP3FFMpegPreference();
      ffmpegExecuter.setFfmpegPreference(preference);

      preference.setFfmpegPath(ffmpegPath);
      preference.setExtension(FFMpegOptions.EXTENSION_MP3);

      // support thread.//no it crash
      /*
      boolean threads = Akj_betasPlugin.getDefault().getPreferenceStore()
      .getBoolean(FFMpegPage.USE_THREAD);
      */

      ffmpegExecuter.setSameDirectory(samefolder.getSelection());
      ffmpegExecuter.setBackup(backup.getSelection());
      if (!samefolder.getSelection()) {
        ffmpegExecuter.setExportDir(directoryChooser.getAbsoluteFilePath());
      }

      // copy settings
      preference.setForceConvert(forceConvert.getSelection());
      preference.setUseCopy(quickCopy.getSelection());
      preference.setDefaultBitrate(
          Integer.parseInt(defaultBitrate.getItem(defaultBitrate.getSelectionIndex())));
      ffmpegExecuter.setUseAvisynth(useAvisynth.getSelection());
      preference.setConvertBitrate(mp3setting.getBitrate());
      preference.setConvertFramerate(mp3setting.getFramerate());
      preference.setConvertChannel(mp3setting.getChannel());
    }