From 2d95f6b209c4d79ad16fbfe3798cc16853a3cc0d Mon Sep 17 00:00:00 2001 From: Ben Fry Date: Sun, 27 Jun 2021 13:50:17 -0400 Subject: [PATCH] fix gif looping args, parse frame progress properly --- .../src/processing/app/tools/FFmpegEngine.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/build/shared/tools/MovieMaker/src/processing/app/tools/FFmpegEngine.java b/build/shared/tools/MovieMaker/src/processing/app/tools/FFmpegEngine.java index 55e2b2444..537f9c324 100644 --- a/build/shared/tools/MovieMaker/src/processing/app/tools/FFmpegEngine.java +++ b/build/shared/tools/MovieMaker/src/processing/app/tools/FFmpegEngine.java @@ -14,7 +14,8 @@ import java.util.regex.Pattern; class FFmpegEngine { - Pattern framePattern = Pattern.compile("\\sframe=(\\d+)\\s"); + //Pattern framePattern = Pattern.compile("\\sframe=(\\d+)\\s"); + Pattern framePattern = Pattern.compile("^frame=(\\d+)$"); Component parent; String ffmpegPath; @@ -149,8 +150,10 @@ class FFmpegEngine { cmd.add("-vf"); cmd.add(formatArgs); + // https://www.ffmpeg.org/ffmpeg-formats.html#gif-2 cmd.add("-loop"); - cmd.add(formatName.contains("loop") ? "1" : "0"); + // -1 means no loop, 0 means infinite loop (1+ means number of loops?) + cmd.add(formatName.contains("loop") ? "0" : "-1"); if (!outputPath.toLowerCase().endsWith(".gif")) { outputPath += ".gif"; @@ -180,8 +183,10 @@ class FFmpegEngine { int frameCount = Integer.parseInt(m.group(1)); // this was used to show which (input) image file was being handled //progress.setNote(Language.interpolate("movie_maker.progress.processing", inputName)); - System.out.println(frameCount + " of " + imgFiles.length); +// System.out.println(frameCount + " of " + imgFiles.length); progress.setProgress(frameCount); +// } else { +// System.out.println(">>>" + line + "<<<"); } }); @@ -189,7 +194,11 @@ class FFmpegEngine { new Thread(errorGobbler).start(); try { int result = p.waitFor(); - System.out.println(result); + //System.out.println("encoding result was " + result); + if (result != 0) { + throw new IOException("Unknown error while creating movie. " + + "(FFmpeg result was " + result + ")"); + } progress.close(); } catch (InterruptedException ignored) { }