Adds a converter for converting video audio to vorbis
This commit is contained in:
		@@ -3,6 +3,7 @@ package net.knarcraft.ffmpegconverter;
 | 
				
			|||||||
import net.knarcraft.ffmpegconverter.config.Configuration;
 | 
					import net.knarcraft.ffmpegconverter.config.Configuration;
 | 
				
			||||||
import net.knarcraft.ffmpegconverter.converter.AnimeConverter;
 | 
					import net.knarcraft.ffmpegconverter.converter.AnimeConverter;
 | 
				
			||||||
import net.knarcraft.ffmpegconverter.converter.AudioConverter;
 | 
					import net.knarcraft.ffmpegconverter.converter.AudioConverter;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.converter.AudioToVorbisConverter;
 | 
				
			||||||
import net.knarcraft.ffmpegconverter.converter.Converter;
 | 
					import net.knarcraft.ffmpegconverter.converter.Converter;
 | 
				
			||||||
import net.knarcraft.ffmpegconverter.converter.DownScaleConverter;
 | 
					import net.knarcraft.ffmpegconverter.converter.DownScaleConverter;
 | 
				
			||||||
import net.knarcraft.ffmpegconverter.converter.LetterboxCropper;
 | 
					import net.knarcraft.ffmpegconverter.converter.LetterboxCropper;
 | 
				
			||||||
@@ -98,7 +99,8 @@ public class FFMpegConvert {
 | 
				
			|||||||
                9. mp4 Subtitle Embed
 | 
					                9. mp4 Subtitle Embed
 | 
				
			||||||
                10. Anime to h265 all streams
 | 
					                10. Anime to h265 all streams
 | 
				
			||||||
                11. Stream reorder
 | 
					                11. Stream reorder
 | 
				
			||||||
                12. Letterbox cropper""", 1, 12);
 | 
					                12. Letterbox cropper
 | 
				
			||||||
 | 
					                13. Video's Audio to vorbis converter""", 1, 13);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return switch (choice) {
 | 
					        return switch (choice) {
 | 
				
			||||||
            case 1 -> generateWebAnimeConverter();
 | 
					            case 1 -> generateWebAnimeConverter();
 | 
				
			||||||
@@ -113,6 +115,7 @@ public class FFMpegConvert {
 | 
				
			|||||||
            case 10 -> generateAnimeConverter();
 | 
					            case 10 -> generateAnimeConverter();
 | 
				
			||||||
            case 11 -> generateStreamOrderConverter();
 | 
					            case 11 -> generateStreamOrderConverter();
 | 
				
			||||||
            case 12 -> new LetterboxCropper(FFPROBE_PATH, FFMPEG_PATH);
 | 
					            case 12 -> new LetterboxCropper(FFPROBE_PATH, FFMPEG_PATH);
 | 
				
			||||||
 | 
					            case 13 -> new AudioToVorbisConverter(FFPROBE_PATH, FFMPEG_PATH);
 | 
				
			||||||
            default -> null;
 | 
					            default -> null;
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,84 @@
 | 
				
			|||||||
 | 
					package net.knarcraft.ffmpegconverter.converter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.container.FFMpegCommand;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.container.StreamProbeResult;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.converter.module.ConverterModule;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.converter.module.DebugModule;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.converter.module.ModuleExecutor;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.converter.module.mapping.MapAllModule;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.converter.module.output.CopySubtitlesModule;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.converter.module.output.CopyVideoModule;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.converter.module.output.SetOutputFileModule;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.streams.AudioStream;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.streams.SubtitleStream;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.streams.VideoStream;
 | 
				
			||||||
 | 
					import net.knarcraft.ffmpegconverter.utility.FFMpegHelper;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.NotNull;
 | 
				
			||||||
 | 
					import org.jetbrains.annotations.Nullable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * A converter to convert a video's audio into flac
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class AudioToVorbisConverter extends AbstractConverter {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Initializes variables used by the abstract converter
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param ffprobePath <p>Path/command to ffprobe.</p>
 | 
				
			||||||
 | 
					     * @param ffmpegPath  <p>Path/command to ffmpeg.</p>
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public AudioToVorbisConverter(String ffprobePath, String ffmpegPath) {
 | 
				
			||||||
 | 
					        super("mkv");
 | 
				
			||||||
 | 
					        this.ffprobePath = ffprobePath;
 | 
				
			||||||
 | 
					        this.ffmpegPath = ffmpegPath;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public @NotNull List<String> getValidFormats() {
 | 
				
			||||||
 | 
					        return this.videoFormats;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public @Nullable FFMpegCommand generateConversionCommand(@NotNull String executable, @NotNull StreamProbeResult probeResult, @NotNull String outFile) {
 | 
				
			||||||
 | 
					        FFMpegCommand command = FFMpegHelper.getFFMpegGeneralFileCommand(executable, probeResult.parsedFiles());
 | 
				
			||||||
 | 
					        List<ConverterModule> modules = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.debug) {
 | 
				
			||||||
 | 
					            modules.add(new DebugModule());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Map video if present
 | 
				
			||||||
 | 
					        List<VideoStream> videoStreams = probeResult.getVideoStreams();
 | 
				
			||||||
 | 
					        if (!videoStreams.isEmpty()) {
 | 
				
			||||||
 | 
					            modules.add(new MapAllModule<>(videoStreams));
 | 
				
			||||||
 | 
					            modules.add(new CopyVideoModule());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Map audio if present
 | 
				
			||||||
 | 
					        List<AudioStream> audioStreams = probeResult.getAudioStreams();
 | 
				
			||||||
 | 
					        if (!audioStreams.isEmpty()) {
 | 
				
			||||||
 | 
					            modules.add(new MapAllModule<>(audioStreams));
 | 
				
			||||||
 | 
					            setOutputIndexes(audioStreams);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Map subtitles if present
 | 
				
			||||||
 | 
					        List<SubtitleStream> subtitleStreams = probeResult.getSubtitleStreams();
 | 
				
			||||||
 | 
					        if (!subtitleStreams.isEmpty()) {
 | 
				
			||||||
 | 
					            modules.add(new MapAllModule<>(subtitleStreams));
 | 
				
			||||||
 | 
					            setOutputIndexes(subtitleStreams);
 | 
				
			||||||
 | 
					            modules.add(new CopySubtitlesModule());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Map any fonts, cover images or similar
 | 
				
			||||||
 | 
					        modules.add(new MapAllModule<>(probeResult.getOtherStreams()));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Set output file and execute
 | 
				
			||||||
 | 
					        modules.add(new SetOutputFileModule(outFile));
 | 
				
			||||||
 | 
					        new ModuleExecutor(command, modules).execute();
 | 
				
			||||||
 | 
					        return command;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -8,7 +8,6 @@ import net.knarcraft.ffmpegconverter.converter.module.ModuleExecutor;
 | 
				
			|||||||
import net.knarcraft.ffmpegconverter.converter.module.hardwarecoding.H265HardwareEncodingModule;
 | 
					import net.knarcraft.ffmpegconverter.converter.module.hardwarecoding.H265HardwareEncodingModule;
 | 
				
			||||||
import net.knarcraft.ffmpegconverter.converter.module.hardwarecoding.HardwareDecodeModule;
 | 
					import net.knarcraft.ffmpegconverter.converter.module.hardwarecoding.HardwareDecodeModule;
 | 
				
			||||||
import net.knarcraft.ffmpegconverter.converter.module.mapping.MapAllModule;
 | 
					import net.knarcraft.ffmpegconverter.converter.module.mapping.MapAllModule;
 | 
				
			||||||
import net.knarcraft.ffmpegconverter.converter.module.output.CopyAudioModule;
 | 
					 | 
				
			||||||
import net.knarcraft.ffmpegconverter.converter.module.output.CopySubtitlesModule;
 | 
					import net.knarcraft.ffmpegconverter.converter.module.output.CopySubtitlesModule;
 | 
				
			||||||
import net.knarcraft.ffmpegconverter.converter.module.output.FastStartModule;
 | 
					import net.knarcraft.ffmpegconverter.converter.module.output.FastStartModule;
 | 
				
			||||||
import net.knarcraft.ffmpegconverter.converter.module.output.SetOutputFileModule;
 | 
					import net.knarcraft.ffmpegconverter.converter.module.output.SetOutputFileModule;
 | 
				
			||||||
@@ -70,7 +69,8 @@ public class MkvH265ReducedConverter extends AbstractConverter {
 | 
				
			|||||||
        if (!audioStreams.isEmpty()) {
 | 
					        if (!audioStreams.isEmpty()) {
 | 
				
			||||||
            modules.add(new MapAllModule<>(audioStreams));
 | 
					            modules.add(new MapAllModule<>(audioStreams));
 | 
				
			||||||
            setOutputIndexes(audioStreams);
 | 
					            setOutputIndexes(audioStreams);
 | 
				
			||||||
            modules.add(new CopyAudioModule(audioStreams));
 | 
					            command.addOutputFileOption("-c:a", "flac");
 | 
				
			||||||
 | 
					            command.addOutputFileOption("-compression_level", "12");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Map subtitles if present
 | 
					        // Map subtitles if present
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user