X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fmeviz%2Fencoder%2Fconverters%2FAvconvVideo.java;h=ea4d1d3444f7447e199b4af9b52c5fe666b61d7e;hb=99240fb3b40e8dd7e3759d2b81ae9a4b05fae1b5;hp=db6ab4d9b16b9529fe93f946fa6d49969352d8de;hpb=1d9057cc722b349a0bc370c0860344f59c42fd0f;p=meviz.git diff --git a/src/main/java/eu/svjatoslav/meviz/encoder/converters/AvconvVideo.java b/src/main/java/eu/svjatoslav/meviz/encoder/converters/AvconvVideo.java index db6ab4d..ea4d1d3 100644 --- a/src/main/java/eu/svjatoslav/meviz/encoder/converters/AvconvVideo.java +++ b/src/main/java/eu/svjatoslav/meviz/encoder/converters/AvconvVideo.java @@ -12,18 +12,24 @@ package eu.svjatoslav.meviz.encoder.converters; import java.io.File; import java.util.List; +import eu.svjatoslav.meviz.encoder.BitrateParameter; import eu.svjatoslav.meviz.encoder.BitrateParameter.bitrate; import eu.svjatoslav.meviz.encoder.EncodingOptions; public class AvconvVideo extends AbstractConverter { - private void constructCodecParamsString(final EncodingOptions options, + private String constructCodecParamsString(final EncodingOptions options, final int videoBitrate, final int audioBitrate, - final StringBuffer codecParams, final String videoCodec, - final String audioCodec) { + final String videoCodec, final String audioCodec) { - codecParams.append("-acodec " + audioCodec + " -vcodec " + videoCodec - + " "); + StringBuffer codecParams = new StringBuffer(); + + if (audioCodec == null) + codecParams.append("-an "); + else + codecParams.append("-acodec " + audioCodec + " "); + + codecParams.append("-vcodec " + videoCodec + " "); if (videoBitrate != -1) codecParams.append("-b " + videoBitrate + "k "); @@ -33,38 +39,39 @@ public class AvconvVideo extends AbstractConverter { if (options.deinterlace) codecParams.append("-filter:v yadif "); - } - @Override - public String getCommand(final File inputFile, final File targetFile, - final EncodingOptions options) { - - int videoBitrate = -1; - int audioBitrate = -1; + return codecParams.toString(); + } - switch (options.videoBitrate) { + private int getAudioBitrateValue(final BitrateParameter.bitrate bitRate) { + switch (bitRate) { case LOW: - videoBitrate = 1000; - audioBitrate = 128; - break; + return 128; case MEDIUM: - videoBitrate = 4000; - audioBitrate = 192; - break; + return 160; case HIGH: - videoBitrate = 40000; - audioBitrate = 500; - break; + return 320; case COPY: - break; + return -1; + + case NONE: + return -1; default: - throw new RuntimeException("Video bitrate: " + options.videoBitrate + throw new RuntimeException("Audio bitrate: " + bitRate + " is not supported."); } + } + + @Override + public String getCommand(final File inputFile, final File targetFile, + final EncodingOptions options, String targetFormat) { + + int videoBitrate = getVideoBitrateValue(options.getVideoBitrate()); + int audioBitrate = getAudioBitrateValue(options.getAudioBitrate()); // convert final StringBuffer codecParams = new StringBuffer(); @@ -72,34 +79,71 @@ public class AvconvVideo extends AbstractConverter { String videoCodec = "libx264"; String audioCodec = "libmp3lame"; - if (options.videoBitrate == bitrate.COPY) { + if (targetFormat.equals("webm")) { + videoCodec = "vp8"; + audioCodec = "opus"; + codecParams.append("-s 800x600 "); + } + + if (options.getVideoBitrate() == bitrate.COPY) videoCodec = "copy"; + + if (options.getAudioBitrate() == bitrate.COPY) audioCodec = "copy"; - } + + if (options.getAudioBitrate() == bitrate.NONE) + audioCodec = null; if (options.forPortablePlayer) { videoBitrate = 1000; audioBitrate = 128; videoCodec = "libxvid"; + + // reduce resolution codecParams.append("-s 640x480 "); + + // enforce maximum keyframe interval + codecParams.append("-g 150 "); } - constructCodecParamsString(options, videoBitrate, audioBitrate, - codecParams, videoCodec, audioCodec); + codecParams.append(constructCodecParamsString(options, videoBitrate, + audioBitrate, videoCodec, audioCodec)); return "avconv -i \"" + inputFile.getAbsolutePath() + "\" " - + codecParams.toString() + "\"" + targetFile.getAbsolutePath() - + "\""; + + codecParams.toString() + "\"" + targetFile.getAbsolutePath() + + "\""; } @Override public List getSourceFileExtensions() { - return toList("mkv", "mts", "mp4", "avi", "mpg", "mpeg", "vob", "m4v"); + return toList("mkv", "mts", "mp4", "avi", "mpg", "mpeg", "vob", "m4v", + "webm"); } @Override public List getTargetFileExtensions() { - return toList("mkv", "mts", "mp4", "avi", "mpg", "mpeg", "vob"); + return toList("mkv", "mts", "mp4", "avi", "mpg", "mpeg", "vob", "m4v", + "webm"); + } + + private int getVideoBitrateValue(final BitrateParameter.bitrate bitRate) { + switch (bitRate) { + case LOW: + return 1000; + + case MEDIUM: + return 4000; + + case HIGH: + return 40000; + + case COPY: + return -1; + + default: + throw new RuntimeException("Video bitrate: " + bitRate + + " is not supported."); + } } @Override