Implement advanced multi-part movie detection (via group by mediainfo)
This commit is contained in:
parent
8457561dd5
commit
76bb88042a
|
@ -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);
|
||||||
|
|
|
@ -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));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue