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; }