From 9713b3c06ec9b7786833ad82f07fc0a4a57233a8 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Tue, 2 Oct 2018 12:26:34 +0200 Subject: [PATCH] Hopefully fixes issues #1 and #2 File collision handling similar to windows --- .idea/misc.xml | 4 +++- src/ffmpegconverter/Main.java | 6 +++--- .../converter/AnimeConverter.java | 16 ++++------------ src/ffmpegconverter/converter/Converter.java | 9 +++++++++ .../converter/VideoConverter.java | 2 +- 5 files changed, 20 insertions(+), 17 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index f091b54..74384e8 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,5 +3,7 @@ - + + + \ No newline at end of file diff --git a/src/ffmpegconverter/Main.java b/src/ffmpegconverter/Main.java index 9e7beb9..65f3c6e 100644 --- a/src/ffmpegconverter/Main.java +++ b/src/ffmpegconverter/Main.java @@ -15,8 +15,8 @@ import java.util.function.Predicate; * Converts a files or files in a folder to a web playable mp4. */ public class Main { - private static final String FFPROBE_PATH = "ffprobe"; //Can be just ffprobe if it's in the path - private static final String FFMPEG_PATH = "ffmpeg"; //Can be just ffmpeg if it's in the path + private static final String FFPROBE_PATH = "C:\\Users\\Kristian\\Box Sync\\AutoIt\\FFMPEGConvert\\ffmpeg\\bin\\ffprobe"; //Can be just ffprobe if it's in the path + private static final String FFMPEG_PATH = "C:\\Users\\Kristian\\Box Sync\\AutoIt\\FFMPEGConvert\\ffmpeg\\bin\\ffmpeg"; //Can be just ffmpeg if it's in the path private static Scanner in = new Scanner(System.in); private static Converter con = null; @@ -152,7 +152,7 @@ public class Main { * @param list The list to test against * @param predicate A predicate to use on every element in the list * @param Anything which can be stored in a list - * @return + * @return True if at least one element fulfills the predicate */ private static boolean listContains(T[] list, Predicate predicate) { for (T item : list) { diff --git a/src/ffmpegconverter/converter/AnimeConverter.java b/src/ffmpegconverter/converter/AnimeConverter.java index 1834de5..de172c3 100644 --- a/src/ffmpegconverter/converter/AnimeConverter.java +++ b/src/ffmpegconverter/converter/AnimeConverter.java @@ -43,19 +43,8 @@ public class AnimeConverter extends Converter { if (streams.length == 0) { throw new IllegalArgumentException("The file has no streams"); } - String noExt = file.getName().substring(0, file.getName().lastIndexOf('.')); - String newPath = noExt + ".mp4"; - boolean isMP4 = newPath.equals(file.getName()); - if (isMP4) { - newPath = noExt + ".tmp.mp4"; - } + String newPath = fileCollisionPrevention(stripExtension(file) + ".mp4", "mp4"); convertProcess(new ProcessBuilder(builderCommand(ffmpegPath, file.getName(), streams, newPath)), folder); - if (isMP4) { - File oldFile = new File(newPath); - if (!oldFile.renameTo(new File(noExt + ".mp4"))) { - System.out.println("Failed to move converted file."); - } - } } /** @@ -115,6 +104,9 @@ public class AnimeConverter extends Converter { command.add("subtitles='" + fileName.replace("'", "\'") + "':si=" + subtitleStreams.get(0)); } break; + } else { + command.add("-map"); + command.add("0:" + listVideo(streams).get(0)); } } } diff --git a/src/ffmpegconverter/converter/Converter.java b/src/ffmpegconverter/converter/Converter.java index 1a7ffe8..21c6f69 100644 --- a/src/ffmpegconverter/converter/Converter.java +++ b/src/ffmpegconverter/converter/Converter.java @@ -46,6 +46,15 @@ public abstract class Converter { return stringBetween(output.toString(), "[STREAM]", "[/STREAM]"); } + static String fileCollisionPrevention(String targetPath, String extension) { + File file = new File(targetPath); + int i = 1; + while (file.exists()) { + file = new File(stripExtension(file) + "(" + i + ")" + "." + extension); + } + return file.toString(); + } + static void convertProcess(ProcessBuilder process, File folder) throws IOException { System.out.println(process.command()); process.directory(folder); diff --git a/src/ffmpegconverter/converter/VideoConverter.java b/src/ffmpegconverter/converter/VideoConverter.java index 54bd95d..41f9f56 100644 --- a/src/ffmpegconverter/converter/VideoConverter.java +++ b/src/ffmpegconverter/converter/VideoConverter.java @@ -25,7 +25,7 @@ public class VideoConverter extends Converter { if (streams.length == 0) { throw new IllegalArgumentException("The file has no streams"); } - String newPath = stripExtension(file) + Math.random() + "." + newExt; + String newPath = fileCollisionPrevention(stripExtension(file) + "." + newExt, newExt); convertProcess(new ProcessBuilder(builderCommand(ffmpegPath, file.getName(), streams, newPath)), folder); }