Ignore commentary tracks

This commit is contained in:
2022-06-12 14:33:00 +02:00
parent 2d861b0f1c
commit bad2a39614
3 changed files with 27 additions and 6 deletions

View File

@@ -49,6 +49,7 @@ public class Config {
private boolean isWindows; private boolean isWindows;
private final Set<String> forcedKeywords = new HashSet<>(Arrays.asList("forced", "signs")); private final Set<String> forcedKeywords = new HashSet<>(Arrays.asList("forced", "signs"));
private final Set<String> commentaryKeywords = new HashSet<>(Arrays.asList("commentary", "director"));
private final Set<String> excludedDirectories = new HashSet<>(); private final Set<String> excludedDirectories = new HashSet<>();
private List<AttributeConfig> attributeConfig; private List<AttributeConfig> attributeConfig;

View File

@@ -2,6 +2,7 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config; import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.*; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.*;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.SetUtils;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -73,17 +74,23 @@ public class MkvFileProcessor implements FileProcessor {
public FileInfoDto filterAttributes(List<FileAttribute> attributes) { public FileInfoDto filterAttributes(List<FileAttribute> attributes) {
FileInfoDto info = new FileInfoDto(); FileInfoDto info = new FileInfoDto();
List<FileAttribute> nonForcedTracks = attributes.stream() List<FileAttribute> nonForcedTracks = attributes.stream()
.filter(elem -> !StringUtils.containsAnyIgnoreCase(elem.getTrackName(), forcedKeywords)) .filter(elem -> !StringUtils.containsAnyIgnoreCase(elem.getTrackName(),
Config.getInstance().getForcedKeywords().toArray(new CharSequence[0])))
.filter(elem -> !elem.isForcedTrack())
.collect(Collectors.toList());
List<FileAttribute> nonCommentaryTracks = attributes.stream()
.filter(elem -> !StringUtils.containsAnyIgnoreCase(elem.getTrackName(),
Config.getInstance().getCommentaryKeywords().toArray(new CharSequence[0])))
.collect(Collectors.toList()); .collect(Collectors.toList());
detectDefaultTracks(attributes, info, nonForcedTracks); detectDefaultTracks(info, attributes, nonForcedTracks);
detectDesiredTracks(info, nonForcedTracks); detectDesiredTracks(info, nonForcedTracks, nonCommentaryTracks);
log.debug(info); log.debug(info);
return info; return info;
} }
private void detectDefaultTracks(List<FileAttribute> attributes, FileInfoDto info, List<FileAttribute> nonForcedTracks) { private void detectDefaultTracks(FileInfoDto info, List<FileAttribute> attributes, List<FileAttribute> nonForcedTracks) {
Set<FileAttribute> detectedForcedSubtitleLanes = new HashSet<>(); Set<FileAttribute> detectedForcedSubtitleLanes = new HashSet<>();
for (FileAttribute attribute : attributes) { for (FileAttribute attribute : attributes) {
if (attribute.isDefaultTrack() && AUDIO.equals(attribute.getType())) if (attribute.isDefaultTrack() && AUDIO.equals(attribute.getType()))
@@ -101,11 +108,11 @@ public class MkvFileProcessor implements FileProcessor {
); );
} }
private void detectDesiredTracks(FileInfoDto info, List<FileAttribute> nonForcedTracks) { private void detectDesiredTracks(FileInfoDto info, List<FileAttribute> nonForcedTracks, List<FileAttribute> nonCommentaryTracks) {
for (AttributeConfig config : Config.getInstance().getAttributeConfig()) { for (AttributeConfig config : Config.getInstance().getAttributeConfig()) {
FileAttribute desiredAudio = null; FileAttribute desiredAudio = null;
FileAttribute desiredSubtitle = null; FileAttribute desiredSubtitle = null;
for (FileAttribute attribute : nonForcedTracks) { for (FileAttribute attribute : SetUtils.retainOf(nonForcedTracks, nonCommentaryTracks)) {
if (attribute.getLanguage().equals(config.getAudioLanguage()) if (attribute.getLanguage().equals(config.getAudioLanguage())
&& AUDIO.equals(attribute.getType())) desiredAudio = attribute; && AUDIO.equals(attribute.getType())) desiredAudio = attribute;
if (attribute.getLanguage().equals(config.getSubtitleLanguage()) if (attribute.getLanguage().equals(config.getSubtitleLanguage())

View File

@@ -0,0 +1,13 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.util;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class SetUtils {
public static <T> Set<T> retainOf(List<T> list1, List<T> list2) {
Set<T> set = new HashSet<>(list1);
set.retainAll(list2);
return set;
}
}