diff --git a/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioTrackReorder.cs b/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioTrackReorder.cs
index 9bd836c9..80e10dd6 100644
--- a/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioTrackReorder.cs
+++ b/VideoNodes/FfmpegBuilderNodes/Audio/FfmpegBuilderAudioTrackReorder.cs
@@ -124,22 +124,25 @@ public class FfmpegBuilderAudioTrackReorder : FfmpegBuilderNode
/// the type to reorder
/// the reordered tracks
public List Reorder(List input) where T : FfmpegStream
+ => Reorder(Languages, OrderedTracks, Channels, input);
+
+ public static List Reorder(List languages, List orderedTracks, List channels, List input) where T : FfmpegStream
{
- Languages ??= new List();
- OrderedTracks ??= new List();
- Channels ??= new List();
- List actualChannels = Channels.Select(x =>
+ languages ??= new List();
+ orderedTracks ??= new List();
+ channels ??= new List();
+ List actualChannels = channels.Select(x =>
{
if (float.TryParse(x, out float value))
return value;
return -1f;
}).Where(x => x > 0f).ToList();
- if (Languages.Any() == false && OrderedTracks.Any() == false && actualChannels.Any() == false)
+ if (languages.Any() == false && orderedTracks.Any() == false && actualChannels.Any() == false)
return input; // nothing to do
- Languages.Reverse();
- OrderedTracks.Reverse();
+ languages.Reverse();
+ orderedTracks.Reverse();
actualChannels.Reverse();
const int base_number = 1_000_000_000;
@@ -153,15 +156,15 @@ public class FfmpegBuilderAudioTrackReorder : FfmpegBuilderNode
if (x is FfmpegAudioStream audioStream)
{
- langIndex = Languages.IndexOf(audioStream.Stream.Language?.ToLower() ?? String.Empty);
- codecIndex = OrderedTracks.IndexOf(audioStream.Stream.Codec?.ToLower() ?? String.Empty);
- float channels = audioStream.Channels > 0 ? audioStream.Channels : audioStream.Stream.Channels;
- channelIndex = actualChannels.IndexOf(channels);
+ langIndex = languages.IndexOf(audioStream.Stream.Language?.ToLower() ?? String.Empty);
+ codecIndex = orderedTracks.IndexOf(audioStream.Stream.Codec?.ToLower() ?? String.Empty);
+ float asChannels = audioStream.Channels > 0 ? audioStream.Channels : audioStream.Stream.Channels;
+ channelIndex = actualChannels.IndexOf(asChannels);
}
else if (x is FfmpegSubtitleStream subStream)
{
- langIndex = Languages.IndexOf(subStream.Stream.Language?.ToLower() ?? String.Empty);
- codecIndex = OrderedTracks.IndexOf(subStream.Stream.Codec?.ToLower() ?? String.Empty);
+ langIndex = languages.IndexOf(subStream.Stream.Language?.ToLower() ?? String.Empty);
+ codecIndex = orderedTracks.IndexOf(subStream.Stream.Codec?.ToLower() ?? String.Empty);
}
int result = base_number;
diff --git a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderNode.cs b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderNode.cs
index fdb254c7..5b375e67 100644
--- a/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderNode.cs
+++ b/VideoNodes/FfmpegBuilderNodes/FfmpegBuilderNode.cs
@@ -39,8 +39,8 @@ namespace FileFlows.VideoNodes.FfmpegBuilderNodes
{
get
{
- if (Args.Variables.ContainsKey(MODEL_KEY))
- return Args.Variables[MODEL_KEY] as FfmpegModel;
+ if (Args.Variables.TryGetValue(MODEL_KEY, out var variable))
+ return variable as FfmpegModel;
return null;
}
set
diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AddAudioTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AddAudioTests.cs
index 677687c8..4f26007d 100644
--- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AddAudioTests.cs
+++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AddAudioTests.cs
@@ -1,6 +1,7 @@
#if(DEBUG)
using FileFlows.VideoNodes.FfmpegBuilderNodes;
+using FileFlows.VideoNodes.FfmpegBuilderNodes.Models;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using VideoNodes.Tests;
@@ -166,6 +167,42 @@ public class FfmpegBuilder_AddAudioTests
Assert.AreEqual("AAC", best.Codec);
Assert.AreEqual(2f, best.Channels);
}
+
+ [TestMethod]
+ public void FfmpegBuilder_AddAudio_Basic()
+ {
+ Prepare();
+
+ FfmpegBuilderAudioAddTrack ffAddAudio = new();
+ ffAddAudio.Codec = "dts";
+ ffAddAudio.Channels = 1;
+ ffAddAudio.Index = 1000;
+ ffAddAudio.PreExecute(args);
+ var output = ffAddAudio.Execute(args);
+ Assert.AreEqual(1, output);
+
+ FfmpegModel model = (FfmpegModel)args.Variables["FfmpegBuilderModel"];
+ var last = model.AudioStreams.Last();
+ Assert.AreEqual(1, last.Channels);
+ }
+
+ [TestMethod]
+ public void FfmpegBuilder_AddAudio_Basic_2()
+ {
+ Prepare();
+
+ FfmpegBuilderAudioAddTrack ffAddAudio = new();
+ ffAddAudio.Codec = "dts";
+ ffAddAudio.Channels = 2;
+ ffAddAudio.Index = 1000;
+ ffAddAudio.PreExecute(args);
+ var output = ffAddAudio.Execute(args);
+ Assert.AreEqual(1, output);
+
+ FfmpegModel model = (FfmpegModel)args.Variables["FfmpegBuilderModel"];
+ var last = model.AudioStreams.Last();
+ Assert.AreEqual(2, last.Channels);
+ }
}
#endif
\ No newline at end of file