Browse Source

support start/end for main video in overlay operation

master
Jonathan Cobb 3 years ago
parent
commit
e4754c900a
1 changed files with 14 additions and 3 deletions
  1. +14
    -3
      src/main/java/jvc/operation/exec/OverlayExec.java

+ 14
- 3
src/main/java/jvc/operation/exec/OverlayExec.java View File

@@ -19,7 +19,10 @@ import static org.cobbzilla.util.io.FileUtil.abs;
public class OverlayExec extends ExecBase<OverlayOperation> { public class OverlayExec extends ExecBase<OverlayOperation> {


public static final String OVERLAY_TEMPLATE public static final String OVERLAY_TEMPLATE
= "ffmpeg -i {{{source.path}}} -i {{{overlay.path}}} -filter_complex \""
= "ffmpeg -i {{{source.path}}} -i {{{overlay.path}}} "
+ "{{#if hasMainStart}}-ss {{mainStart}} {{/if}}"
+ "{{#if hasMainEnd}}-t {{mainDuration}} {{/if}}"
+ "-filter_complex \""
+ "[1:v] setpts=PTS-STARTPTS+(1/TB){{#exists width}}, scale={{width}}x{{height}}{{/exists}} [1v]; " + "[1:v] setpts=PTS-STARTPTS+(1/TB){{#exists width}}, scale={{width}}x{{height}}{{/exists}} [1v]; "
+ "[0:v][1v] overlay={{{overlayFilterConfig}}} " + "[0:v][1v] overlay={{{overlayFilterConfig}}} "
+ "\" -y {{{output.path}}}"; + "\" -y {{{output.path}}}";
@@ -43,8 +46,16 @@ public class OverlayExec extends ExecBase<OverlayOperation> {
final Map<String, Object> ctx = initialContext(toolbox, source, getVars()); final Map<String, Object> ctx = initialContext(toolbox, source, getVars());
ctx.put("overlay", overlaySource); ctx.put("overlay", overlaySource);


ctx.put("mainStart", op.getStartTime(ctx, js));
ctx.put("mainEnd", op.getEndTime(ctx, js));
final BigDecimal mainStart = op.getStartTime(ctx, js);
ctx.put("mainStart", mainStart);
ctx.put("hasMainStart", op.hasStartTime());

final BigDecimal mainEnd = op.getEndTime(ctx, js);
ctx.put("mainEnd", mainEnd);
ctx.put("hasMainEnd", op.hasEndTime());
if (op.hasEndTime()) {
ctx.put("mainDuration", mainEnd.subtract(mainStart).doubleValue());
}


final String overlayFilter = buildOverlayFilter(op, source, overlaySource, overlay, ctx, js); final String overlayFilter = buildOverlayFilter(op, source, overlaySource, overlay, ctx, js);
ctx.put("overlayFilterConfig", overlayFilter); ctx.put("overlayFilterConfig", overlayFilter);


Loading…
Cancel
Save