Makes the anime converter map unknown streams
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				KnarCraft/FFmpegConvert/pipeline/head This commit looks good
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	KnarCraft/FFmpegConvert/pipeline/head This commit looks good
				
			This commit is contained in:
		@@ -1,6 +1,7 @@
 | 
			
		||||
package net.knarcraft.ffmpegconverter.container;
 | 
			
		||||
 | 
			
		||||
import net.knarcraft.ffmpegconverter.streams.AudioStream;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.streams.OtherStream;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.streams.StreamObject;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.streams.SubtitleStream;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.streams.VideoStream;
 | 
			
		||||
@@ -48,6 +49,18 @@ public record StreamProbeResult(@NotNull List<File> parsedFiles, @NotNull List<S
 | 
			
		||||
        return filterStreamsByType(this.parsedStreams, VideoStream.class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Gets all other streams
 | 
			
		||||
     *
 | 
			
		||||
     * <p>Other streams are streams that are not video, audio or subtitle streams</p>
 | 
			
		||||
     *
 | 
			
		||||
     * @return <p>All other streams</p>
 | 
			
		||||
     */
 | 
			
		||||
    @NotNull
 | 
			
		||||
    public List<OtherStream> getOtherStreams() {
 | 
			
		||||
        return filterStreamsByType(this.parsedStreams, OtherStream.class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Filters parsed streams into one of the stream types
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -139,6 +139,9 @@ public class AnimeConverter extends AbstractConverter {
 | 
			
		||||
            modules.add(new CopyVideoModule());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Map all attached streams, such as fonts and covers
 | 
			
		||||
        modules.add(new MapAllModule<>(probeResult.getOtherStreams()));
 | 
			
		||||
 | 
			
		||||
        modules.add(new SetOutputFileModule(outFile));
 | 
			
		||||
 | 
			
		||||
        new ModuleExecutor(command, modules).execute();
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,27 @@
 | 
			
		||||
package net.knarcraft.ffmpegconverter.streams;
 | 
			
		||||
 | 
			
		||||
import org.jetbrains.annotations.NotNull;
 | 
			
		||||
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A stream type for attached streams that aren't audio, video or subtitles
 | 
			
		||||
 */
 | 
			
		||||
public class OtherStream extends AbstractStream {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Instantiates a new other stream
 | 
			
		||||
     *
 | 
			
		||||
     * @param streamInfo <p>All info about the stream</p>
 | 
			
		||||
     * @param inputIndex <p>The index of the input file this stream belongs to</p>
 | 
			
		||||
     */
 | 
			
		||||
    public OtherStream(@NotNull Map<StreamTag, String> streamInfo, int inputIndex) {
 | 
			
		||||
        super(streamInfo, inputIndex, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public char streamTypeCharacter() {
 | 
			
		||||
        return '?';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -58,7 +58,8 @@ public class SubtitleStream extends AbstractStream implements StreamObject {
 | 
			
		||||
                !titleLowercase.matches("signs?") &&
 | 
			
		||||
                !titleLowercase.matches("songs?") &&
 | 
			
		||||
                !titleLowercase.matches(".*signs only.*") &&
 | 
			
		||||
                !titleLowercase.matches(".* signs .*");
 | 
			
		||||
                !titleLowercase.matches(".* signs .*") &&
 | 
			
		||||
                !titleLowercase.matches("signs@.*");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ import net.knarcraft.ffmpegconverter.container.FFMpegCommand;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.container.ProcessResult;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.container.StreamProbeResult;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.streams.AudioStream;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.streams.OtherStream;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.streams.StreamObject;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.streams.StreamTag;
 | 
			
		||||
import net.knarcraft.ffmpegconverter.streams.SubtitleStream;
 | 
			
		||||
@@ -300,7 +301,12 @@ public final class FFMpegHelper {
 | 
			
		||||
            String codecType = ValueParsingHelper.parseString(streamInfo.get(StreamTag.CODEC_TYPE), "");
 | 
			
		||||
            switch (codecType) {
 | 
			
		||||
                case "video":
 | 
			
		||||
                    parsedStreams.add(new VideoStream(streamInfo, 0, relativeVideoIndex++));
 | 
			
		||||
                    // Some attached covers are marked as video streams
 | 
			
		||||
                    if (ValueParsingHelper.parseInt(streamInfo.get(StreamTag.DISPOSITION_ATTACHED_PIC), 0) != 1) {
 | 
			
		||||
                        parsedStreams.add(new VideoStream(streamInfo, 0, relativeVideoIndex++));
 | 
			
		||||
                    } else {
 | 
			
		||||
                        parsedStreams.add(new OtherStream(streamInfo, 0));
 | 
			
		||||
                    }
 | 
			
		||||
                    break;
 | 
			
		||||
                case "audio":
 | 
			
		||||
                    parsedStreams.add(new AudioStream(streamInfo, 0, relativeAudioIndex++));
 | 
			
		||||
@@ -308,6 +314,8 @@ public final class FFMpegHelper {
 | 
			
		||||
                case "subtitle":
 | 
			
		||||
                    parsedStreams.add(new SubtitleStream(streamInfo, 0, relativeSubtitleIndex++));
 | 
			
		||||
                    break;
 | 
			
		||||
                default:
 | 
			
		||||
                    parsedStreams.add(new OtherStream(streamInfo, 0));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        StreamProbeResult probeResult = new StreamProbeResult(List.of(file), parsedStreams);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user