From 0dcaf0a1114b04e92c248891020878e6b45e1ebb Mon Sep 17 00:00:00 2001 From: John Andrews Date: Fri, 15 Apr 2022 10:42:33 +1200 Subject: [PATCH] fixed issue with video stream indexes --- BasicNodes/Plugin.cs | 2 +- ChecksumNodes/Plugin.cs | 2 +- CollectionNodes/Plugin.cs | 2 +- EmailNodes/Plugin.cs | 2 +- MetaNodes/Plugin.cs | 2 +- MusicNodes/Plugin.cs | 2 +- .../Models/FfmpegSubtitleStream.cs | 2 +- VideoNodes/Plugin.cs | 2 +- .../FfmpegBuilder_BasicTests.cs | 48 +++++++++++++++++++ VideoNodes/VideoInfoHelper.cs | 11 +++-- 10 files changed, 64 insertions(+), 11 deletions(-) diff --git a/BasicNodes/Plugin.cs b/BasicNodes/Plugin.cs index cc36950a..24c5839f 100644 --- a/BasicNodes/Plugin.cs +++ b/BasicNodes/Plugin.cs @@ -5,7 +5,7 @@ namespace FileFlows.BasicNodes public class Plugin : FileFlows.Plugin.IPlugin { public string Name => "Basic Nodes"; - public string MinimumVersion => "0.5.0.679"; + public string MinimumVersion => "0.5.0.683"; public void Init() { } } diff --git a/ChecksumNodes/Plugin.cs b/ChecksumNodes/Plugin.cs index 890f5147..c9d78917 100644 --- a/ChecksumNodes/Plugin.cs +++ b/ChecksumNodes/Plugin.cs @@ -3,7 +3,7 @@ namespace ChecksumNodes public class Plugin : IPlugin { public string Name => "Checksum Nodes"; - public string MinimumVersion => "0.5.0.679"; + public string MinimumVersion => "0.5.0.683"; public void Init() { diff --git a/CollectionNodes/Plugin.cs b/CollectionNodes/Plugin.cs index ed95f394..54f8ff8e 100644 --- a/CollectionNodes/Plugin.cs +++ b/CollectionNodes/Plugin.cs @@ -6,7 +6,7 @@ namespace CollectionNodes public class Plugin : IPlugin { public string Name => "Collection Nodes"; - public string MinimumVersion => "0.5.0.679"; + public string MinimumVersion => "0.5.0.683"; [Folder(1)] [Required] diff --git a/EmailNodes/Plugin.cs b/EmailNodes/Plugin.cs index 8af4ce50..6633366e 100644 --- a/EmailNodes/Plugin.cs +++ b/EmailNodes/Plugin.cs @@ -3,7 +3,7 @@ public class Plugin : IPlugin { public string Name => "Email Nodes"; - public string MinimumVersion => "0.5.0.679"; + public string MinimumVersion => "0.5.0.683"; public void Init() { diff --git a/MetaNodes/Plugin.cs b/MetaNodes/Plugin.cs index 002de16e..59de8c65 100644 --- a/MetaNodes/Plugin.cs +++ b/MetaNodes/Plugin.cs @@ -5,7 +5,7 @@ namespace MetaNodes public class Plugin : FileFlows.Plugin.IPlugin { public string Name => "Meta Nodes"; - public string MinimumVersion => "0.5.0.679"; + public string MinimumVersion => "0.5.0.683"; public void Init() { } } diff --git a/MusicNodes/Plugin.cs b/MusicNodes/Plugin.cs index c77cda83..d8f09d88 100644 --- a/MusicNodes/Plugin.cs +++ b/MusicNodes/Plugin.cs @@ -6,7 +6,7 @@ namespace FileFlows.MusicNodes public class Plugin : FileFlows.Plugin.IPlugin { public string Name => "Music Nodes"; - public string MinimumVersion => "0.5.0.679"; + public string MinimumVersion => "0.5.0.683"; public void Init() { diff --git a/VideoNodes/FfmpegBuilderNodes/Models/FfmpegSubtitleStream.cs b/VideoNodes/FfmpegBuilderNodes/Models/FfmpegSubtitleStream.cs index d9d00524..6cdaa5c9 100644 --- a/VideoNodes/FfmpegBuilderNodes/Models/FfmpegSubtitleStream.cs +++ b/VideoNodes/FfmpegBuilderNodes/Models/FfmpegSubtitleStream.cs @@ -11,7 +11,7 @@ if (Deleted) return new string[] { }; - var results = new List { "-map", "0:s:" + outputIndex, "-c:s:" + (Stream.TypeIndex - 1) }; + var results = new List { "-map", "0:s:" + outputIndex, "-c:s:" + Stream.TypeIndex }; //if (EncodingParameters.Any() == false) { results.Add("copy"); diff --git a/VideoNodes/Plugin.cs b/VideoNodes/Plugin.cs index c9e79b63..a3a53419 100644 --- a/VideoNodes/Plugin.cs +++ b/VideoNodes/Plugin.cs @@ -6,7 +6,7 @@ namespace FileFlows.VideoNodes public class Plugin : FileFlows.Plugin.IPlugin { public string Name => "Video Nodes"; - public string MinimumVersion => "0.5.0.679"; + public string MinimumVersion => "0.5.0.683"; public void Init() { diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs index 544d90c9..95f38714 100644 --- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs +++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs @@ -728,6 +728,54 @@ namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests string log = logger.ToString(); Assert.AreEqual(1, result); } + + + [TestMethod] + public void FfmpegBuilder_AudioMinusOne() + { + const string file = @"D:\videos\unprocessed\minus1.mkv"; + var logger = new TestLogger(); + const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe"; + var vi = new VideoInfoHelper(ffmpeg, logger); + var vii = vi.Read(file); + var args = new NodeParameters(file, logger, false, string.Empty); + args.GetToolPathActual = (string tool) => ffmpeg; + args.TempPath = @"D:\videos\temp"; + args.Parameters.Add("VideoInfo", vii); + + + FfmpegBuilderStart ffStart = new(); + Assert.AreEqual(1, ffStart.Execute(args)); + + //FfmpegBuilderVideoCodec ffEncode = new(); + //ffEncode.VideoCodec = "h264"; + //ffEncode.Execute(args); + + FfmpegBuilderAudioTrackRemover ffAudioRemover = new(); + ffAudioRemover.RemoveAll = true; + ffAudioRemover.Execute(args); + + FfmpegBuilderAudioAddTrack ffAddAudio = new(); + ffAddAudio.Codec = "ac3"; + ffAddAudio.Index = 0; + ffAddAudio.Execute(args); + + //FfmpegBuilderAudioAddTrack ffAddAudio2 = new(); + //ffAddAudio2.Codec = "aac"; + //ffAddAudio2.Index = 2; + //ffAddAudio2.Execute(args); + + //FfmpegBuilderAudioNormalization ffAudioNormalize = new(); + //ffAudioNormalize.TwoPass = false; + //ffAudioNormalize.AllAudio = true; + //ffAudioNormalize.Execute(args); + + FfmpegBuilderExecutor ffExecutor = new(); + int result = ffExecutor.Execute(args); + + string log = logger.ToString(); + Assert.AreEqual(1, result); + } } } diff --git a/VideoNodes/VideoInfoHelper.cs b/VideoNodes/VideoInfoHelper.cs index d484b519..c3f78a52 100644 --- a/VideoNodes/VideoInfoHelper.cs +++ b/VideoNodes/VideoInfoHelper.cs @@ -93,7 +93,9 @@ namespace FileFlows.VideoNodes vi.Chapters = ParseChapters(output); - int subtitleIndex = 1; + int subtitleIndex = 0; + int videoIndex = 0; + int audioIndex = 0; foreach (Match sm in streamMatches) { if (sm.Value.Contains(" Video: ")) @@ -102,23 +104,27 @@ namespace FileFlows.VideoNodes if (vs != null) { vs.Index = streamIndex; + vs.TypeIndex = videoIndex; var match = Regex.Match(sm.Value, @"(?<=(Stream #))[\d]+:[\d]+"); if (match.Success) vs.IndexString = match.Value; vi.VideoStreams.Add(vs); } + ++videoIndex; } else if (sm.Value.Contains(" Audio: ")) { var audio = ParseAudioStream(sm.Value); if (audio != null) { + audio.TypeIndex = audioIndex; audio.Index = streamIndex; var match = Regex.Match(sm.Value, @"(?<=(Stream #))[\d]+:[\d]+"); if (match.Success) audio.IndexString = match.Value; vi.AudioStreams.Add(audio); } + ++audioIndex; } else if (sm.Value.Contains(" Subtitle: ")) { @@ -198,8 +204,6 @@ namespace FileFlows.VideoNodes vs.Width = width; if (int.TryParse(dimensions.Groups[2].Value, out int height)) vs.Height = height; - if (int.TryParse(Regex.Match(line, @"#([\d]+):([\d]+)").Groups[2].Value, out int typeIndex)) - vs.TypeIndex = typeIndex; if (Regex.IsMatch(line, @"([\d]+(\.[\d]+)?)\sfps") && float.TryParse(Regex.Match(line, @"([\d]+(\.[\d]+)?)\sfps").Groups[1].Value, out float fps)) vs.FramesPerSecond = fps; @@ -235,6 +239,7 @@ namespace FileFlows.VideoNodes var parts = line.Split(",").Select(x => x?.Trim() ?? "").ToArray(); AudioStream audio = new AudioStream(); audio.Title = ""; + // this isnt type index, this is overall index audio.TypeIndex = int.Parse(Regex.Match(line, @"#([\d]+):([\d]+)").Groups[2].Value) - 1; audio.Codec = parts[0].Substring(parts[0].IndexOf("Audio: ") + "Audio: ".Length).Trim().Split(' ').First().ToLower() ?? ""; audio.Language = Regex.Match(line, @"(?<=(Stream\s#[\d]+:[\d]+)\()[^\)]+").Value?.ToLower() ?? "";