diff --git a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java index 992a3d0a..3ee91674 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java @@ -96,7 +96,7 @@ public abstract class AbstractFFmpegStreamBuilder extra_args = new ArrayList<>(); - public FFmpegBuilder.Strict strict = FFmpegBuilder.Strict.NORMAL; + public Strict strict = Strict.NORMAL; public long targetSize = 0; // in bytes public long pass_padding_bitrate = 1024; // in bits per second @@ -455,7 +455,7 @@ public T setDuration(long duration, TimeUnit units) { return getThis(); } - public T setStrict(FFmpegBuilder.Strict strict) { + public T setStrict(Strict strict) { this.strict = checkNotNull(strict); return getThis(); } @@ -592,7 +592,7 @@ protected List build(FFmpegBuilder parent, int pass) { protected abstract void addSourceTarget(int pass, ImmutableList.Builder args); protected void addGlobalFlags(FFmpegBuilder parent, ImmutableList.Builder args) { - if (strict != FFmpegBuilder.Strict.NORMAL) { + if (strict != Strict.NORMAL) { args.add("-strict", strict.toString()); } diff --git a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java index 6f8945b0..e2ab9225 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/FFmpegBuilder.java @@ -29,21 +29,6 @@ public class FFmpegBuilder { private static final Logger log = LoggerFactory.getLogger(FFmpegBuilder.class); - public enum Strict { - VERY, // strictly conform to an older more strict version of the specifications or reference - // software - STRICT, // strictly conform to all the things in the specificiations no matter what consequences - NORMAL, // normal - UNOFFICIAL, // allow unofficial extensions - EXPERIMENTAL; - - @Override - public String toString() { - // ffmpeg command line requires these options in lower case - return Ascii.toLowerCase(name()); - } - } - /** Log level options: ffmpeg documentation */ public enum Verbosity { QUIET, @@ -85,11 +70,18 @@ public String toString() { // Output final List> outputs = new ArrayList<>(); + protected Strict strict = Strict.NORMAL; + // Filters String audioFilter; String videoFilter; String complexFilter; + public FFmpegBuilder setStrict(Strict strict) { + this.strict = checkNotNull(strict); + return this; + } + public FFmpegBuilder overrideOutputFiles(boolean override) { this.override = override; return this; @@ -366,6 +358,10 @@ public List build() { Preconditions.checkArgument(!inputs.isEmpty(), "At least one input must be specified"); Preconditions.checkArgument(!outputs.isEmpty(), "At least one output must be specified"); + if (strict != Strict.NORMAL) { + args.add("-strict", strict.toString()); + } + args.add(override ? "-y" : "-n"); args.add("-v", this.verbosity.toString()); diff --git a/src/main/java/net/bramp/ffmpeg/builder/Strict.java b/src/main/java/net/bramp/ffmpeg/builder/Strict.java new file mode 100644 index 00000000..9747607a --- /dev/null +++ b/src/main/java/net/bramp/ffmpeg/builder/Strict.java @@ -0,0 +1,18 @@ +package net.bramp.ffmpeg.builder; + +import com.google.common.base.Ascii; + +public enum Strict { + VERY, // strictly conform to an older more strict version of the specifications or reference + // software + STRICT, // strictly conform to all the things in the specificiations no matter what consequences + NORMAL, // normal + UNOFFICIAL, // allow unofficial extensions + EXPERIMENTAL; + + @Override + public String toString() { + // ffmpeg command line requires these options in lower case + return Ascii.toLowerCase(name()); + } +} diff --git a/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java b/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java index d3ceaa79..fedd2501 100644 --- a/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java +++ b/src/test/java/net/bramp/ffmpeg/FFmpegExecutorTest.java @@ -19,6 +19,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import net.bramp.ffmpeg.builder.FFmpegBuilder; +import net.bramp.ffmpeg.builder.Strict; import net.bramp.ffmpeg.fixtures.Samples; import net.bramp.ffmpeg.job.FFmpegJob; import net.bramp.ffmpeg.probe.FFmpegProbeResult; @@ -105,7 +106,7 @@ public void testNormal() throws InterruptedException, ExecutionException, IOExce // .setVideoPixelFormat("yuv420p") // .setVideoBitStreamFilter("noise") .setVideoQuality(2) - .setStrict(FFmpegBuilder.Strict.EXPERIMENTAL) + .setStrict(Strict.EXPERIMENTAL) .done(); FFmpegJob job = ffExecutor.createJob(builder); @@ -262,7 +263,7 @@ public void testIssue112() { .setVideoCodec("libx264") .setVideoFrameRate(24, 1) .setVideoResolution(640, 480) - .setStrict(FFmpegBuilder.Strict.EXPERIMENTAL) // Allow FFmpeg to use experimental specs + .setStrict(Strict.EXPERIMENTAL) // Allow FFmpeg to use experimental specs .done(); // Run a one-pass encode diff --git a/src/test/java/net/bramp/ffmpeg/ReadmeTest.java b/src/test/java/net/bramp/ffmpeg/ReadmeTest.java index 2815893a..275ec2d0 100644 --- a/src/test/java/net/bramp/ffmpeg/ReadmeTest.java +++ b/src/test/java/net/bramp/ffmpeg/ReadmeTest.java @@ -8,6 +8,7 @@ import java.util.Locale; import java.util.concurrent.TimeUnit; import net.bramp.ffmpeg.builder.FFmpegBuilder; +import net.bramp.ffmpeg.builder.Strict; import net.bramp.ffmpeg.fixtures.Samples; import net.bramp.ffmpeg.job.FFmpegJob; import net.bramp.ffmpeg.probe.FFmpegFormat; @@ -59,7 +60,7 @@ public void testVideoEncoding() throws IOException { .setVideoCodec("libx264") // Video using x264 .setVideoFrameRate(24, 1) // at 24 frames per second .setVideoResolution(640, 480) // at 640x480 resolution - .setStrict(FFmpegBuilder.Strict.EXPERIMENTAL) // Allow FFmpeg to use experimental specs + .setStrict(Strict.EXPERIMENTAL) // Allow FFmpeg to use experimental specs .done(); FFmpegExecutor executor = new FFmpegExecutor(ffmpeg, ffprobe); diff --git a/src/test/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilderTest.java b/src/test/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilderTest.java index 19cc6f6f..2254b0b8 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilderTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilderTest.java @@ -214,7 +214,7 @@ public void testSetPresetFilename() { @Test public void testSetStrict() { - List command = getBuilder().setStrict(FFmpegBuilder.Strict.STRICT).build(0); + List command = getBuilder().setStrict(Strict.STRICT).build(0); assertEquals("strict", command.get(command.indexOf("-strict") + 1)); } diff --git a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java index 1685786b..a0042d8d 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/FFmpegBuilderTest.java @@ -585,4 +585,17 @@ public void testQuestion156(){ args ); } + + @Test + public void testSetStrict() { + List args = new FFmpegBuilder() + .addInput("input.mp4") + .done() + .addOutput("output.mp4") + .done() + .setStrict(Strict.EXPERIMENTAL) + .build(); + + assertEquals(ImmutableList.of("-strict", "experimental", "-y", "-v", "error", "-i", "input.mp4", "output.mp4"), args); + } }