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.hardwarecoding.HardwareDecodeModule; import net.knarcraft.ffmpegconverter.converter.module.mapping.BurnSubtitleModule; import net.knarcraft.ffmpegconverter.converter.module.mapping.NthAudioStreamModule; import net.knarcraft.ffmpegconverter.converter.module.mapping.SelectSingleStreamModule; import net.knarcraft.ffmpegconverter.converter.module.output.SetOutputFileModule; 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; import static net.knarcraft.ffmpegconverter.utility.FFMpegHelper.getNthSteam; /** * A simple converter for web-video */ public class WebVideoConverter extends AbstractConverter { /** * Instantiates a new web video converter * * @param ffprobePath

Path/command to ffprobe.

* @param ffmpegPath

Path/command to ffmpeg.

* @param outExtension

The extension of the new file.

*/ public WebVideoConverter(String ffprobePath, String ffmpegPath, String outExtension) { super(outExtension); this.ffprobePath = ffprobePath; this.ffmpegPath = ffmpegPath; } @Override @NotNull public List getValidFormats() { return videoFormats; } @Override @Nullable public FFMpegCommand generateConversionCommand(@NotNull String executable, @NotNull StreamProbeResult probeResult, @NotNull String outFile) { FFMpegCommand command = FFMpegHelper.getFFMpegWebVideoCommand(executable, probeResult.parsedFiles()); List modules = new ArrayList<>(); if (this.debug) { modules.add(new DebugModule()); } //Get first streams from the file SubtitleStream subtitleStream = getNthSteam(probeResult.getSubtitleStreams(), 0); VideoStream videoStream = getNthSteam(probeResult.getVideoStreams(), 0); if (videoStream == null) { throw new IllegalArgumentException("The selected video stream does not exist."); } if (subtitleStream != null) { modules.add(new BurnSubtitleModule(subtitleStream, videoStream, true)); } else { modules.add(new SelectSingleStreamModule(videoStream)); } modules.add(new NthAudioStreamModule(probeResult.getAudioStreams(), 0)); modules.add(new HardwareDecodeModule()); modules.add(new SetOutputFileModule(outFile)); new ModuleExecutor(command, modules).execute(); return command; } }