public MediaDesc convertToMPEG(MediaDesc mediaIn, String outPath, ShellCallback sc)
      throws Exception {
    ArrayList<String> cmd = new ArrayList<String>();

    cmd.add(ffmpegBin);
    cmd.add("-y");
    cmd.add("-i");
    cmd.add(mediaIn.path);

    if (mediaIn.startTime != null) {
      cmd.add("-ss");
      cmd.add(mediaIn.startTime);
    }

    if (mediaIn.duration != null) {
      cmd.add("-t");
      cmd.add(mediaIn.duration);
    }

    // cmd.add("-strict");
    // cmd.add("experimental");

    // everything to mpeg
    cmd.add("-f");
    cmd.add("mpeg");

    MediaDesc mediaOut = mediaIn.clone();
    mediaOut.path = outPath + ".mpg";

    cmd.add(mediaOut.path);

    execFFMPEG(cmd, sc);

    return mediaOut;
  }
  // based on this gist: https://gist.github.com/3757344
  // ffmpeg -i input1.mp4 -vcodec copy -vbsf h264_mp4toannexb -acodec copy part1.ts
  public MediaDesc convertToMP4Stream(MediaDesc mediaIn, String outPath, ShellCallback sc)
      throws Exception {
    ArrayList<String> cmd = new ArrayList<String>();

    MediaDesc mediaOut = mediaIn.clone();

    String mediaPath = mediaIn.path;

    cmd = new ArrayList<String>();

    cmd.add(ffmpegBin);
    cmd.add("-y");
    cmd.add("-i");
    cmd.add(mediaPath);

    if (mediaIn.startTime != null) {
      cmd.add(FFMPEGArg.ARG_STARTTIME);
      cmd.add(mediaIn.startTime);
    }

    if (mediaIn.duration != null) {
      cmd.add(FFMPEGArg.ARG_DURATION);
      cmd.add(mediaIn.duration);
    }

    if (mediaIn.videoFilter == null) {
      cmd.add(FFMPEGArg.ARG_VIDEOCODEC);
      cmd.add("copy");
    } else {
      cmd.add(FFMPEGArg.ARG_VIDEOCODEC);
      cmd.add("libx264");

      cmd.add("-vf");
      cmd.add(mediaIn.videoFilter);

      if (mediaIn.videoBitrate != -1) {
        cmd.add(FFMPEGArg.ARG_BITRATE_VIDEO);
        cmd.add(mediaIn.videoBitrate + "k");
      }
    }

    cmd.add(FFMPEGArg.ARG_VIDEOBITSTREAMFILTER);
    cmd.add("h264_mp4toannexb");

    cmd.add(FFMPEGArg.ARG_AUDIOCODEC);
    cmd.add("copy");

    mediaOut.path = outPath + ".ts";

    cmd.add(mediaOut.path);

    execFFMPEG(cmd, sc);

    return mediaOut;
  }