From bc21f06e9aa40ed338faee7eb23dbc85ca44f63b Mon Sep 17 00:00:00 2001 From: aNNiMON Date: Thu, 19 Oct 2023 17:35:54 +0300 Subject: [PATCH] Fix Audio Track parameter --- .../commands/ffmpeg/FFmpegCommandBuilder.java | 5 ++-- .../ffmpegbot/commands/ffmpeg/FFmpegTask.java | 23 +++++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegCommandBuilder.java b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegCommandBuilder.java index 13c4012..cf2fb3c 100644 --- a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegCommandBuilder.java +++ b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegCommandBuilder.java @@ -76,7 +76,8 @@ public class FFmpegCommandBuilder implements Visitor { public void visit(AudioStreamByLanguage p, MediaSession input) { if (discardAudio) return; if (p.getValue().isEmpty()) return; - audioCommands.add("-map 0:m:language:" + p.getValue()); + audioCommands.add("-map"); + audioCommands.add("0:m:language:" + p.getValue()); } @Override @@ -135,7 +136,7 @@ public class FFmpegCommandBuilder implements Visitor { public String[] buildCommand(final @NotNull MediaSession session) { final var commands = new ArrayList(); - commands.addAll(List.of("ffmpeg", "-loglevel", "quiet", "-stats")); + commands.addAll(List.of("ffmpeg", "-loglevel", "error", "-stats")); commands.addAll(session.getInputParams().asFFmpegCommands()); commands.addAll(List.of("-i", FilePath.inputDir() + "/" + session.getInputFile().getName())); if (FileTypes.canContainAudio(session.getFileType())) { diff --git a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegTask.java b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegTask.java index 70f9f9f..246b700 100644 --- a/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegTask.java +++ b/src/main/java/com/annimon/ffmpegbot/commands/ffmpeg/FFmpegTask.java @@ -3,8 +3,10 @@ package com.annimon.ffmpegbot.commands.ffmpeg; import com.annimon.ffmpegbot.parameters.Parameter; import com.annimon.ffmpegbot.session.MediaSession; +import java.io.BufferedReader; import java.io.IOException; -import java.util.Scanner; +import java.io.InputStreamReader; +import java.util.StringJoiner; public class FFmpegTask { @@ -19,13 +21,20 @@ public class FFmpegTask { pb.redirectErrorStream(true); pb.inheritIO(); session.setStatus("Starting ffmpeg"); - final Process process = pb.start(); - final Scanner out = new Scanner(process.getInputStream()); - while (out.hasNextLine()) { - final String line = out.nextLine(); - session.setStatus(line); + final var process = pb.start(); + final var lines = new StringJoiner("\n"); + try (final var reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { + String line; + while ((line = reader.readLine()) != null) { + lines.add(line); + session.setStatus(line); + } + int status = process.waitFor(); + if (status != 0) { + session.setStatus(lines.toString()); + throw new RuntimeException("ffmpeg process was finished with non-zero value " + status); + } } - process.waitFor(); } catch (InterruptedException | IOException e) { session.setStatus("Failed due to " + e.getMessage()); throw new RuntimeException(e);