private void createCodec(VideoTrack vt) {
    Format fmt = vt.videoFormat;
    String enc = fmt.get(EncodingKey);
    if (enc.equals(ENCODING_AVI_MJPG) //
        || enc.equals(ENCODING_QUICKTIME_JPEG) //
    ) {
      vt.codec = new JPEGCodec();
    } else if (enc.equals(ENCODING_AVI_PNG) //
        || enc.equals(ENCODING_QUICKTIME_PNG) //
    ) {
      vt.codec = new PNGCodec();
    }

    vt.codec.setInputFormat(
        fmt.prepend(
            MediaTypeKey,
            MediaType.VIDEO,
            MimeTypeKey,
            MIME_JAVA,
            EncodingKey,
            ENCODING_BUFFERED_IMAGE,
            DataClassKey,
            BufferedImage.class));
    vt.codec.setOutputFormat(
        fmt.prepend(MediaTypeKey, MediaType.VIDEO, EncodingKey, enc, DataClassKey, byte[].class));
    //    vt.codec.setQuality(vt.videoQuality);
  }
  public void write(int track, BufferedImage image, long duration) throws IOException {
    VideoTrack t = tracks.get(track);
    if (t.inputBuffer == null) {
      t.inputBuffer = new Buffer();
    }
    if (t.outputBuffer == null) {
      t.outputBuffer = new Buffer();
    }
    t.inputBuffer.setFlagsTo(KEYFRAME);
    t.inputBuffer.data = image;

    t.codec.process(t.inputBuffer, t.outputBuffer);
    write(track, t.outputBuffer);
  }