diff --git a/BasicNodes/BasicNodes.csproj b/BasicNodes/BasicNodes.csproj index 8f74d388..c3ab3ca1 100644 Binary files a/BasicNodes/BasicNodes.csproj and b/BasicNodes/BasicNodes.csproj differ diff --git a/BasicNodes/File/MoveFile.cs b/BasicNodes/File/MoveFile.cs index bb2fc571..dc9c5dd4 100644 --- a/BasicNodes/File/MoveFile.cs +++ b/BasicNodes/File/MoveFile.cs @@ -26,6 +26,8 @@ namespace FileFlows.BasicNodes.File public override int Execute(NodeParameters args) { string dest = args.ReplaceVariables(DestinationPath, true); + dest = dest.Replace("\\", Path.DirectorySeparatorChar.ToString()); + dest = dest.Replace("/", Path.DirectorySeparatorChar.ToString()); if (string.IsNullOrEmpty(dest)) { args.Logger?.ELog("No destination specified"); diff --git a/Builds/BasicNodes.zip b/Builds/BasicNodes.zip index 5922def2..a514f644 100644 Binary files a/Builds/BasicNodes.zip and b/Builds/BasicNodes.zip differ diff --git a/Builds/MetaNodes.zip b/Builds/MetaNodes.zip index 245fe511..7af965b2 100644 Binary files a/Builds/MetaNodes.zip and b/Builds/MetaNodes.zip differ diff --git a/Builds/VideoNodes.zip b/Builds/VideoNodes.zip index ce306ea6..abe48522 100644 Binary files a/Builds/VideoNodes.zip and b/Builds/VideoNodes.zip differ diff --git a/MetaNodes/MetaNodes.csproj b/MetaNodes/MetaNodes.csproj index 4dd77985..7d9953c4 100644 Binary files a/MetaNodes/MetaNodes.csproj and b/MetaNodes/MetaNodes.csproj differ diff --git a/VideoNodes/VideoInfo.cs b/VideoNodes/VideoInfo.cs index 76317628..cbe9dea1 100644 --- a/VideoNodes/VideoInfo.cs +++ b/VideoNodes/VideoInfo.cs @@ -66,6 +66,11 @@ namespace FileFlows.VideoNodes /// The duration of the stream /// public TimeSpan Duration { get; set; } + + /// + /// The sample rate of the audio stream + /// + public int SampleRate { get; set; } } public class SubtitleStream : VideoFileStream diff --git a/VideoNodes/VideoInfoHelper.cs b/VideoNodes/VideoInfoHelper.cs index aaed82b8..c5f57c77 100644 --- a/VideoNodes/VideoInfoHelper.cs +++ b/VideoNodes/VideoInfoHelper.cs @@ -13,6 +13,7 @@ namespace FileFlows.VideoNodes Regex rgxTitle = new Regex(@"(?<=((^[\s]+title[\s]+:[\s])))(.*?)$", RegexOptions.Multiline); Regex rgxDuration = new Regex(@"(?<=((^[\s]+DURATION(\-[\w]+)?[\s]+:[\s])))([\d]+:?)+\.[\d]+[1-9]", RegexOptions.Multiline); Regex rgxDuration2 = new Regex(@"(?<=((^[\s]+Duration:[\s])))([\d]+:?)+\.[\d]+[1-9]", RegexOptions.Multiline); + Regex rgxAudioSampleRate = new Regex(@"(?<=((,|\s)))[\d]+(?=([\s]?hz))", RegexOptions.IgnoreCase); public VideoInfoHelper(string ffMpegExe, ILogger logger) { @@ -147,6 +148,10 @@ namespace FileFlows.VideoNodes audio.Channels = float.Parse(Regex.Match(parts[2], @"^[\d]+(\.[\d]+)?").Value); } + var match = rgxAudioSampleRate.Match(info); + if (match.Success) + audio.SampleRate = int.Parse(match.Value); + if (rgxTitle.IsMatch(info)) audio.Title = rgxTitle.Match(info).Value.Trim(); diff --git a/VideoNodes/VideoNodes.csproj b/VideoNodes/VideoNodes.csproj index ab3046c4..035181c3 100644 Binary files a/VideoNodes/VideoNodes.csproj and b/VideoNodes/VideoNodes.csproj differ diff --git a/VideoNodes/VideoNodes/Video_H265_AC3.cs b/VideoNodes/VideoNodes/Video_H265_AC3.cs index 750cb138..a1425dd5 100644 --- a/VideoNodes/VideoNodes/Video_H265_AC3.cs +++ b/VideoNodes/VideoNodes/Video_H265_AC3.cs @@ -108,8 +108,11 @@ namespace FileFlows.VideoNodes TotalTime = videoInfo.VideoStreams[0].Duration; - if(NormalizeAudio) - ffArgs.Add($"-map 0:{bestAudio.Index} -c:a ac3 -af loudnorm=I=-24:LRA=7:TP=-2.0"); + if (NormalizeAudio) + { + int sampleRate = bestAudio.SampleRate > 0 ? bestAudio.SampleRate : 48_000; + ffArgs.Add($"-map 0:{bestAudio.Index} -c:a ac3 -ar {sampleRate} -af loudnorm=I=-24:LRA=7:TP=-2.0"); + } else if (bestAudio.Codec.ToLower() != "ac3") ffArgs.Add($"-map 0:{bestAudio.Index} -c:a ac3"); else diff --git a/plugins.json b/plugins.json index dc6292a4..09be1111 100644 --- a/plugins.json +++ b/plugins.json @@ -1,17 +1,17 @@ [ { "Name": "BasicNodes", - "Version": "0.0.1.17", + "Version": "0.0.1.18", "Package": "https://github.com/revenz/FileFlowsPlugins/blob/master/Builds/BasicNodes.zip?raw=true" }, { "Name": "MetaNodes", - "Version": "0.0.1.17", + "Version": "0.0.1.18", "Package": "https://github.com/revenz/FileFlowsPlugins/blob/master/Builds/MetaNodes.zip?raw=true" }, { "Name": "VideoNodes", - "Version": "0.0.1.17", + "Version": "0.0.1.18", "Package": "https://github.com/revenz/FileFlowsPlugins/blob/master/Builds/VideoNodes.zip?raw=true" } ]