Implement advanced multi-part movie detection (via group by mediainfo)

This commit is contained in:
Reinhard Pointner 2016-08-08 07:46:04 +08:00
parent 8457561dd5
commit 76bb88042a
3 changed files with 12 additions and 21 deletions

View File

@ -770,11 +770,6 @@ public class MediaBindingBean {
return (int) (getDuration() / 60000); return (int) (getDuration() / 60000);
} }
@Define("encodedDate")
public String getEncodedDate() {
return getMediaInfo(StreamKind.General, 0, "Encoded_Date"); // e.g. UTC 2014-07-18 13:57:37
}
@Define("media") @Define("media")
public AssociativeScriptObject getGeneralMediaInfo() { public AssociativeScriptObject getGeneralMediaInfo() {
return createMediaInfoBindings(StreamKind.General).get(0); return createMediaInfoBindings(StreamKind.General).get(0);

View File

@ -46,6 +46,8 @@ import net.filebot.ApplicationFolder;
import net.filebot.Resource; import net.filebot.Resource;
import net.filebot.WebServices; import net.filebot.WebServices;
import net.filebot.archive.Archive; import net.filebot.archive.Archive;
import net.filebot.mediainfo.MediaInfo;
import net.filebot.mediainfo.MediaInfo.StreamKind;
import net.filebot.similarity.CommonSequenceMatcher; import net.filebot.similarity.CommonSequenceMatcher;
import net.filebot.similarity.DateMatcher; import net.filebot.similarity.DateMatcher;
import net.filebot.similarity.EpisodeMetrics; import net.filebot.similarity.EpisodeMetrics;
@ -1082,16 +1084,16 @@ public class MediaDetection {
return; return;
} }
try { filesByMediaFolder.stream().collect(groupingBy(f -> {
filesByMediaFolder.stream().collect(groupingBy(new VideoQuality()::getEncodedDate)).forEach((group, videos) -> { if (VIDEO_FILES.accept(f)) {
groups.add(videos); try (MediaInfo mi = new MediaInfo().open(f)) {
}); return mi.get(StreamKind.General, 0, "Encoded_Date");
} catch (Exception e) { } catch (Exception e) {
debug.warning(format("Failed to group by media characteristics: %s", e.getMessage())); debug.warning(format("Failed to read media characteristics: %s", e.getMessage()));
}
// if mediainfo fails and we can't further group by video bitrate then just keep the grouping we have }
groups.add(filesByMediaFolder); return "";
} })).forEach((group, videos) -> groups.add(videos));
}); });
}); });

View File

@ -64,10 +64,4 @@ public class VideoQuality implements Comparator<File> {
}).orElseGet(f::length); }).orElseGet(f::length);
} }
public String getEncodedDate(File f) {
return media(f).map(it -> {
return it.getEncodedDate();
}).orElse(null);
}
} }