diff --git a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java index 3ee91674..95ad8508 100644 --- a/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java +++ b/src/main/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilder.java @@ -70,6 +70,7 @@ public abstract class AbstractFFmpegStreamBuilder meta_tags = new ArrayList<>(); + public final List maps = new ArrayList<>(); public boolean audio_enabled = true; public String audio_codec; @@ -364,6 +365,18 @@ public T addMetaTag(MetadataSpecifier spec, String key, String value) { return getThis(); } + public T addMap(int inputIndex) { + checkArgument(inputIndex >=0, "inputIndex must be greater or equal to zero"); + this.maps.add(String.valueOf(inputIndex)); + return getThis(); + } + + public T addMap(int inputIndex, StreamSpecifier spec) { + checkArgument(inputIndex >=0, "inputIndex must be greater or equal to zero"); + this.maps.add(inputIndex + ":" + spec.spec()); + return getThis(); + } + public T setAudioCodec(String codec) { this.audio_enabled = true; this.audio_codec = checkNotEmpty(codec, "codec must not be empty"); @@ -676,6 +689,8 @@ protected void addVideoFlags(FFmpegBuilder parent, ImmutableList.Builder } protected void addFormatArgs(ImmutableList.Builder args) { - + for (String map : maps) { + args.add("-map", map); + } } } diff --git a/src/test/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilderTest.java b/src/test/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilderTest.java index 2254b0b8..7a505810 100644 --- a/src/test/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilderTest.java +++ b/src/test/java/net/bramp/ffmpeg/builder/AbstractFFmpegStreamBuilderTest.java @@ -7,6 +7,8 @@ import java.util.List; import java.util.concurrent.TimeUnit; +import static net.bramp.ffmpeg.builder.StreamSpecifier.stream; +import static net.bramp.ffmpeg.builder.StreamSpecifierType.*; import static org.hamcrest.core.Is.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; @@ -227,4 +229,13 @@ public void testAddExtraArgs() { assertThat(removeCommon(command), is(ImmutableList.of("-some", "args"))); } + + @Test + public void testAddMap() { + List command = getBuilder() + .addMap(0, stream(Video)) + .build(0); + + assertThat(removeCommon(command), is(ImmutableList.of("-map", "0:v"))); + } }