possibility to specify video and audio bitrate separately
[meviz.git] / src / main / java / eu / svjatoslav / meviz / encoder / converters / AvconvVideo.java
index 2cda2d8..87a7880 100644 (file)
@@ -12,6 +12,7 @@ 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;
 
@@ -35,36 +36,32 @@ public class AvconvVideo extends AbstractConverter {
                        codecParams.append("-filter:v yadif ");
        }
 
-       @Override
-       public String getCommand(final File inputFile, final File targetFile,
-                       final EncodingOptions options) {
-
-               int videoBitrate = -1;
-               int audioBitrate = -1;
-
-               switch (options.getVideoBitrate()) {
+       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;
 
                default:
-                       throw new RuntimeException("Video bitrate: " + options.getVideoBitrate()
+                       throw new RuntimeException("Audio bitrate: " + bitRate
                                        + " is not supported.");
                }
+       }
+
+       @Override
+       public String getCommand(final File inputFile, final File targetFile,
+                       final EncodingOptions options) {
+
+               int videoBitrate = getVideoBitrateValue(options.getVideoBitrate());
+               int audioBitrate = getAudioBitrateValue(options.getAudioBitrate());
 
                // convert
                final StringBuffer codecParams = new StringBuffer();
@@ -72,10 +69,11 @@ public class AvconvVideo extends AbstractConverter {
                String videoCodec = "libx264";
                String audioCodec = "libmp3lame";
 
-               if (options.getVideoBitrate() == bitrate.COPY) {
+               if (options.getVideoBitrate() == bitrate.COPY)
                        videoCodec = "copy";
+
+               if (options.getAudioBitrate() == bitrate.COPY)
                        audioCodec = "copy";
-               }
 
                if (options.forPortablePlayer) {
                        videoBitrate = 1000;
@@ -102,6 +100,26 @@ public class AvconvVideo extends AbstractConverter {
                return toList("mkv", "mts", "mp4", "avi", "mpg", "mpeg", "vob", "m4v");
        }
 
+       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
        public boolean isTerminalMandatory() {
                return true;