added mov support
[meviz.git] / src / main / java / eu / svjatoslav / meviz / encoder / converters / AvconvVideo.java
index 87a7880..58cd215 100644 (file)
@@ -18,13 +18,18 @@ 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
-                               + " ");
+               final 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 ");
@@ -32,8 +37,13 @@ public class AvconvVideo extends AbstractConverter {
                if (audioBitrate != -1)
                        codecParams.append("-b:a " + audioBitrate + "k ");
 
-               if (options.deinterlace)
+               if (options.isDeinterlace())
                        codecParams.append("-filter:v yadif ");
+
+               if (options.getTargetFps() != null)
+                       codecParams.append("-r " + options.getTargetFps() + " ");
+
+               return codecParams.toString();
        }
 
        private int getAudioBitrateValue(final BitrateParameter.bitrate bitRate) {
@@ -50,6 +60,9 @@ public class AvconvVideo extends AbstractConverter {
                case COPY:
                        return -1;
 
+               case NONE:
+                       return -1;
+
                default:
                        throw new RuntimeException("Audio bitrate: " + bitRate
                                        + " is not supported.");
@@ -58,7 +71,7 @@ public class AvconvVideo extends AbstractConverter {
 
        @Override
        public String getCommand(final File inputFile, final File targetFile,
-                       final EncodingOptions options) {
+                       final EncodingOptions options, final String targetFormat) {
 
                int videoBitrate = getVideoBitrateValue(options.getVideoBitrate());
                int audioBitrate = getAudioBitrateValue(options.getAudioBitrate());
@@ -69,21 +82,35 @@ public class AvconvVideo extends AbstractConverter {
                String videoCodec = "libx264";
                String audioCodec = "libmp3lame";
 
+               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.forPortablePlayer) {
+               if (options.getAudioBitrate() == bitrate.NONE)
+                       audioCodec = null;
+
+               if (options.isForPortablePlayer()) {
                        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()
@@ -92,12 +119,14 @@ public class AvconvVideo extends AbstractConverter {
 
        @Override
        public List<String> getSourceFileExtensions() {
-               return toList("mkv", "mts", "mp4", "avi", "mpg", "mpeg", "vob", "m4v");
+               return toList("mkv", "mts", "mp4", "avi", "mpg", "mpeg", "vob", "m4v",
+                               "webm", "mov");
        }
 
        @Override
        public List<String> getTargetFileExtensions() {
-               return toList("mkv", "mts", "mp4", "avi", "mpg", "mpeg", "vob", "m4v");
+               return toList("mkv", "mts", "mp4", "avi", "mpg", "mpeg", "vob", "m4v",
+                               "webm", "mov");
        }
 
        private int getVideoBitrateValue(final BitrateParameter.bitrate bitRate) {
@@ -109,7 +138,7 @@ public class AvconvVideo extends AbstractConverter {
                        return 4000;
 
                case HIGH:
-                       return 40000;
+                       return 16000;
 
                case COPY:
                        return -1;