diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderTrackSorter.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderTrackSorter.cs index 6db11106..8cfc2ea2 100644 --- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderTrackSorter.cs +++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderTrackSorter.cs @@ -76,6 +76,8 @@ public class FfmpegBuilderTrackSorter : FfmpegBuilderNode new() { Label = "Codec Reversed", Value = "CodecDesc" }, new() { Label = "Language", Value = "Language" }, new() { Label = "Language Reversed", Value = "LanguageDesc" }, + new() { Label = "Title", Value = "Title" }, + new() { Label = "Title Reversed", Value = "TitleDesc" } }; } @@ -296,6 +298,8 @@ public class FfmpegBuilderTrackSorter : FfmpegBuilderNode result = Regex.IsMatch(value.ToString(), comparison, RegexOptions.IgnoreCase) ? 0 : 1; else if (value != null && double.TryParse(value.ToString(), out double dbl)) result = dbl; + else if (property == nameof(FfmpegStream.Title) && string.IsNullOrWhiteSpace(comparison) == false && string.IsNullOrWhiteSpace(value?.ToString()) == false) + result = value?.ToString()?.ToLowerInvariant()?.Contains(comparison.ToLowerInvariant()) == true ? 0 : 1; else result = string.Equals(value?.ToString() ?? string.Empty, comparison ?? string.Empty, StringComparison.OrdinalIgnoreCase) ? 0 : 1; diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_TrackSorterTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_TrackSorterTests.cs index e754e7ab..1658f6f7 100644 --- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_TrackSorterTests.cs +++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_TrackSorterTests.cs @@ -43,7 +43,8 @@ public class FfmpegBuilder_TrackSorterTests IndexString = "0:a:1", Language = "en", Codec = "AAC", - Channels = 2 + Channels = 2, + Title = "Directors Commentary" }, new AudioStream { @@ -787,7 +788,7 @@ public class FfmpegBuilder_TrackSorterTests // Additional assertions for logging Assert.AreEqual("2 / en / AC3 / 5.1", model.AudioStreams[0].ToString()); Assert.AreEqual("5 / deu / AAC / 5.1", model.AudioStreams[1].ToString()); - Assert.AreEqual("3 / en / AAC / 2.0", model.AudioStreams[2].ToString()); + Assert.AreEqual("3 / en / AAC / Directors Commentary / 2.0", model.AudioStreams[2].ToString()); Assert.AreEqual("4 / fre / AAC / 2.0", model.AudioStreams[3].ToString()); } @@ -824,8 +825,6 @@ public class FfmpegBuilder_TrackSorterTests Assert.AreEqual("2 / en / subrip", model.SubtitleStreams[3].ToString()); } - - [TestMethod] public void ProcessStreams_NoSubtitleChanges() { @@ -858,6 +857,40 @@ public class FfmpegBuilder_TrackSorterTests Assert.AreEqual("3 / fre / srt", model.SubtitleStreams[2].ToString()); Assert.AreEqual("4 / deu / movtext", model.SubtitleStreams[3].ToString()); } + + + [TestMethod] + public void ProcessStreams_CommentaryRemove() + { + Prepare(); + + var trackSorter = new FfmpegBuilderTrackSorter(); + + // Mock sorters by different properties + trackSorter.Sorters = new List> + { + new("TitleDesc", "Commentary"), + new("Language", "English") + }; + trackSorter.StreamType = "Audio"; + + // Act + trackSorter.PreExecute(args); + var result = trackSorter.Execute(args); + + string log = logger.ToString(); + TestContext.WriteLine(log); + + // Assert + Assert.AreEqual(1, result); + var model = GetFFmpegModel(); + + // Additional assertions for logging + Assert.AreEqual("2 / en / AC3 / 5.1", model.AudioStreams[0].ToString()); + Assert.AreEqual("4 / fre / AAC / 2.0", model.AudioStreams[1].ToString()); + Assert.AreEqual("5 / deu / AAC / 5.1", model.AudioStreams[2].ToString()); + Assert.AreEqual("3 / en / AAC / Directors Commentary / 2.0", model.AudioStreams[3].ToString()); + } } #endif \ No newline at end of file