diff --git a/VideoNodes/Tests/AudioExtractorTests.cs b/VideoNodes/Tests/AudioExtractorTests.cs
index eecd8928..cfd635fa 100644
--- a/VideoNodes/Tests/AudioExtractorTests.cs
+++ b/VideoNodes/Tests/AudioExtractorTests.cs
@@ -7,24 +7,17 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.IO;
[TestClass]
-public class AudioExtractorTests : TestBase
+public class AudioExtractorTests : VideoTestBase
{
[TestMethod]
public void AudioExtractor_Mp3_Basic()
{
- var logger = new TestLogger();
- string file = TestFile_BasicMkv;
- var vi = new VideoInfoHelper(FfmpegPath, logger);
- var vii = vi.Read(file);
+ var args = GetVideoNodeParameters();
VideoExtractAudio node = new();
node.OutputFile = Path.Combine(TempPath, "Audio");
node.OutputCodec = "mp3";
- var args = new NodeParameters(file, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
var vidFile = new VideoFile();
vidFile.PreExecute(args);
Assert.AreEqual(1, vidFile.Execute(args));
@@ -32,27 +25,19 @@ public class AudioExtractorTests : TestBase
node.PreExecute(args);
int output = node.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, output);
}
[TestMethod]
public void AudioExtractor_Mp3_English()
{
- var logger = new TestLogger();
- string file = TestFile_BasicMkv;
- var vi = new VideoInfoHelper(FfmpegPath, logger);
- var vii = vi.Read(file);
+ var args = GetVideoNodeParameters();
VideoExtractAudio node = new();
node.OutputFile = Path.Combine(TempPath, "Audio");
node.Language = "en";
node.OutputCodec = "mp3";
- var args = new NodeParameters(file, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
var vidFile = new VideoFile();
vidFile.PreExecute(args);
Assert.AreEqual(1, vidFile.Execute(args));
@@ -60,27 +45,18 @@ public class AudioExtractorTests : TestBase
node.PreExecute(args);
int output = node.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, output);
}
[TestMethod]
public void AudioExtractor_Mp3_Eac3_Fail()
{
- var logger = new TestLogger();
- string file = TestFile_BasicMkv;
- var vi = new VideoInfoHelper(FfmpegPath, logger);
- var vii = vi.Read(file);
+ var args = GetVideoNodeParameters();
VideoExtractAudio node = new();
node.OutputFile = Path.Combine(TempPath, "Audio");
node.Codec = "eac3";
node.OutputCodec = "mp3";
-
- var args = new NodeParameters(file, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
var vidFile = new VideoFile();
vidFile.PreExecute(args);
Assert.AreEqual(1, vidFile.Execute(args));
@@ -88,26 +64,19 @@ public class AudioExtractorTests : TestBase
node.PreExecute(args);
int output = node.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(2, output);
}
+
[TestMethod]
public void AudioExtractor_Mp3_Eac3_Pass()
{
- var logger = new TestLogger();
- string file = TestFile_Pgs;
- var vi = new VideoInfoHelper(FfmpegPath, logger);
- var vii = vi.Read(file);
+ var args = GetVideoNodeParameters();
VideoExtractAudio node = new();
node.OutputFile = Path.Combine(TempPath, "Audio_eac3");
node.Codec = "eac3";
node.OutputCodec = "mp3";
- var args = new NodeParameters(file, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
var vidFile = new VideoFile();
vidFile.PreExecute(args);
Assert.AreEqual(1, vidFile.Execute(args));
@@ -115,27 +84,19 @@ public class AudioExtractorTests : TestBase
node.PreExecute(args);
int output = node.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, output);
}
[TestMethod]
public void AudioExtractor_Aac_2048k()
{
- var logger = new TestLogger();
- string file = TestFile_BasicMkv;
- var vi = new VideoInfoHelper(FfmpegPath, logger);
- var vii = vi.Read(file);
+ var args = GetVideoNodeParameters();
VideoExtractAudio node = new();
node.OutputFile = Path.Combine(TempPath, "Audio_2048.aac");
node.OutputCodec = "aac";
node.OutputBitrate = 2048;
- var args = new NodeParameters(file, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
var vidFile = new VideoFile();
vidFile.PreExecute(args);
Assert.AreEqual(1, vidFile.Execute(args));
@@ -143,27 +104,19 @@ public class AudioExtractorTests : TestBase
node.PreExecute(args);
int output = node.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, output);
}
[TestMethod]
public void AudioExtractor_Aac_128k()
{
- var logger = new TestLogger();
- string file = TestFile_BasicMkv;
- var vi = new VideoInfoHelper(FfmpegPath, logger);
- var vii = vi.Read(file);
+ var args = GetVideoNodeParameters();
VideoExtractAudio node = new();
node.OutputFile = Path.Combine(TempPath, "Audio_128.aac");
node.OutputCodec = "aac";
node.OutputBitrate = 128;
- var args = new NodeParameters(file, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
var vidFile = new VideoFile();
vidFile.PreExecute(args);
Assert.AreEqual(1, vidFile.Execute(args));
@@ -171,7 +124,6 @@ public class AudioExtractorTests : TestBase
node.PreExecute(args);
int output = node.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, output);
}
}
diff --git a/VideoNodes/Tests/AudioToVideoTests.cs b/VideoNodes/Tests/AudioToVideoTests.cs
index 075c93fe..86c43311 100644
--- a/VideoNodes/Tests/AudioToVideoTests.cs
+++ b/VideoNodes/Tests/AudioToVideoTests.cs
@@ -8,7 +8,7 @@ using FileFlows.VideoNodes.VideoNodes;
using Microsoft.VisualStudio.TestTools.UnitTesting;
[TestClass]
-public class AudioToVideoTests : TestBase
+public class AudioToVideoTests : VideoTestBase
{
[TestMethod]
public void AudioToVideo_Waves_h265()
@@ -27,15 +27,7 @@ public class AudioToVideoTests : TestBase
private void TestStyle(string codec, AudioToVideo.VisualizationStyle style)
{
- var logger = new TestLogger();
- string file = @"D:\music\unprocessed\01-billy_joel-movin_out.mp3";
- var vi = new VideoInfoHelper(FfmpegPath, logger);
- var vii = vi.Read(file);
-
- var args = new NodeParameters(file, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
+ var args = GetVideoNodeParameters(AudioMp3);
AudioToVideo node = new();
node.Container = "mkv";
@@ -48,7 +40,6 @@ public class AudioToVideoTests : TestBase
node.PreExecute(args);
int output = node.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, output);
}
}
diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_ErrorFile.cs b/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_ErrorFile.cs
index 126f4147..9a55765c 100644
--- a/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_ErrorFile.cs
+++ b/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_ErrorFile.cs
@@ -11,7 +11,7 @@ namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests;
/// Tests for FFmpeg Builder for the Error file
///
[TestClass]
-public class FFmpegBuild_ErrorFile : TestBase
+public class FFmpegBuild_ErrorFile : VideoTestBase
{
///
/// Tests a subtitle using a pattern
@@ -19,12 +19,7 @@ public class FFmpegBuild_ErrorFile : TestBase
[TestMethod]
public void ErrorFile()
{
- var args = new NodeParameters(TestFile_Error, Logger, false, TestPath, new LocalFileService())
- {
- LibraryFileName = TestFile_Error
- };
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters(VideoCorrupt);
var vf = new VideoFile();
vf.PreExecute(args);
diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SubtitleTrackMergeTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SubtitleTrackMergeTests.cs
index b68b62a1..8b396d09 100644
--- a/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SubtitleTrackMergeTests.cs
+++ b/VideoNodes/Tests/FfmpegBuilderTests/FFmpegBuilder_SubtitleTrackMergeTests.cs
@@ -10,51 +10,43 @@ namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests;
/// Tests for FFmpeg Builder Subtitle Track Merge
///
[TestClass]
-public class FFmpegBuild_SubtitleTrackMergeTests : TestBase
+public class FFmpegBuild_SubtitleTrackMergeTests : VideoTestBase
{
- ///
- /// Tests a subtitle using a pattern
- ///
- [TestMethod]
- public void PatternTest()
- {
- var args = new NodeParameters(TestFile_Subtitle, Logger, false, TestPath, new LocalFileService())
- {
- LibraryFileName = TestFile_Subtitle
- };
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
- var vf = new VideoFile();
- vf.PreExecute(args);
- Assert.AreEqual(1, vf.Execute(args));
-
- var ffmpegBuilderStart = new FfmpegBuilderStart();
- ffmpegBuilderStart.PreExecute(args);
- Assert.AreEqual(1, ffmpegBuilderStart.Execute(args));
-
- int currentSubs = ffmpegBuilderStart.GetModel().SubtitleStreams.Count;
-
- var ele = new FfmpegBuilderSubtitleTrackMerge();
- ele.Subtitles = ["srt", "sub", "sup", "ass"];
- ele.Pattern = "^other";
- ele.Title = "Other Subtitle";
- ele.Language = "fre";
- ele.Default = true;
- ele.Forced = true;
- ele.PreExecute(args);
- Assert.AreEqual(1, ele.Execute(args));
-
- int newSubs = ffmpegBuilderStart.GetModel().SubtitleStreams.Count;
- Assert.AreEqual(currentSubs + 1, newSubs);
-
- var newSub = ffmpegBuilderStart.GetModel().SubtitleStreams.Last();
-
- Assert.AreEqual("Other Subtitle", newSub.Title);
- Assert.AreEqual("fre", newSub.Language);
- Assert.IsTrue(newSub.IsDefault);
- Assert.IsTrue(newSub.IsForced);
- }
+// ///
+// /// Tests a subtitle using a pattern
+// ///
+// [TestMethod]
+// public void PatternTest()
+// {
+// var args = GetVideoNodeParameters();
+// var videoFile = new VideoFile();
+// videoFile.PreExecute(args);
+// videoFile.Execute(args);
+//
+// var ffmpegBuilderStart = new FfmpegBuilderStart();
+// ffmpegBuilderStart.PreExecute(args);
+// Assert.AreEqual(1, ffmpegBuilderStart.Execute(args));
+//
+// int currentSubs = ffmpegBuilderStart.GetModel().SubtitleStreams.Count;
+//
+// var ele = new FfmpegBuilderSubtitleTrackMerge();
+// ele.Subtitles = ["srt", "sub", "sup", "ass"];
+// ele.Pattern = "^other";
+// ele.Title = "Other Subtitle";
+// ele.Default = true;
+// ele.Forced = true;
+// ele.PreExecute(args);
+// Assert.AreEqual(1, ele.Execute(args));
+//
+// int newSubs = ffmpegBuilderStart.GetModel().SubtitleStreams.Count;
+// Assert.AreEqual(currentSubs + 1, newSubs);
+//
+// var newSub = ffmpegBuilderStart.GetModel().SubtitleStreams.Last();
+//
+// Assert.AreEqual("Other Subtitle", newSub.Title);
+// Assert.IsTrue(newSub.IsDefault);
+// Assert.IsTrue(newSub.IsForced);
+// }
///
/// Tests a subtitle using file matches
@@ -62,16 +54,10 @@ public class FFmpegBuild_SubtitleTrackMergeTests : TestBase
[TestMethod]
public void FileMatches()
{
- var args = new NodeParameters(TestFile_Subtitle, Logger, false, TestPath, new LocalFileService())
- {
- LibraryFileName = TestFile_Subtitle
- };
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
- var vf = new VideoFile();
- vf.PreExecute(args);
- Assert.AreEqual(1, vf.Execute(args));
+ var args = GetVideoNodeParameters();
+ var videoFile = new VideoFile();
+ videoFile.PreExecute(args);
+ videoFile.Execute(args);
var ffmpegBuilderStart = new FfmpegBuilderStart();
ffmpegBuilderStart.PreExecute(args);
diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AddAudioTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AddAudioTests.cs
index 377e2ba6..04b0b835 100644
--- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AddAudioTests.cs
+++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AddAudioTests.cs
@@ -3,19 +3,23 @@
using FileFlows.VideoNodes.FfmpegBuilderNodes;
using FileFlows.VideoNodes.FfmpegBuilderNodes.Models;
using Microsoft.VisualStudio.TestTools.UnitTesting;
+using PluginTestLibrary;
using VideoNodes.Tests;
namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests;
[TestClass]
-public class FfmpegBuilder_AddAudioTests : TestBase
+public class FfmpegBuilder_AddAudioTests : VideoTestBase
{
VideoInfo vii;
NodeParameters args;
private void Prepare()
{
- var vi = new VideoInfoHelper(FfmpegPath, Logger);
- vii = vi.Read(TestFile_BasicMkv);
+ args = GetVideoNodeParameters();
+ VideoFile vf = new VideoFile();
+ vf.PreExecute(args);
+ vf.Execute(args);
+ vii = (VideoInfo)args.Parameters["VideoInfo"];
vii.AudioStreams = new List
{
new AudioStream
@@ -51,12 +55,7 @@ public class FfmpegBuilder_AddAudioTests : TestBase
Channels = 5.1f
}
};
- args = new NodeParameters(TestFile_BasicMkv, Logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
- args.Parameters.Add("VideoInfo", vii);
-
-
+
FfmpegBuilderStart ffStart = new();
ffStart.PreExecute(args);
Assert.AreEqual(1, ffStart.Execute(args));
diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AudioConverterTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AudioConverterTests.cs
index 6d568ba5..c60f5812 100644
--- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AudioConverterTests.cs
+++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_AudioConverterTests.cs
@@ -9,16 +9,17 @@ using System.IO;
namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests;
[TestClass]
-public class FfmpegBuilder_AudioConverterTests: TestBase
+public class FfmpegBuilder_AudioConverterTests: VideoTestBase
{
VideoInfo vii;
NodeParameters args;
private void Prepare()
{
- string file = Path.Combine(TestPath, "basic.mkv");
- var logger = new TestLogger();
- var vi = new VideoInfoHelper(FfmpegPath, logger);
- vii = vi.Read(file);
+ args = GetVideoNodeParameters();
+ VideoFile vf = new VideoFile();
+ vf.PreExecute(args);
+ vf.Execute(args);
+ vii = (VideoInfo)args.Parameters["VideoInfo"];
vii.AudioStreams = new List
{
new AudioStream
@@ -77,10 +78,6 @@ public class FfmpegBuilder_AudioConverterTests: TestBase
Channels = 5.1f
}
};
- args = new NodeParameters(file, logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
- args.Parameters.Add("VideoInfo", vii);
FfmpegBuilderStart ffStart = new();
@@ -170,13 +167,9 @@ public class FfmpegBuilder_AudioConverterTests: TestBase
[TestMethod]
public void FfmpegBuilder_AudioConverter_Opus_All()
{
- string file = Path.Combine(TestPath, "basic.mkv");
- var logger = new TestLogger();
- var vi = new VideoInfoHelper(FfmpegPath, logger);
- var vii = vi.Read(file);
- var args = new NodeParameters(file, logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var vi = new VideoInfoHelper(FFmpeg, Logger);
+ var vii = vi.Read(VideoMkv);
+ var args = GetVideoNodeParameters(VideoMkv);
args.Parameters.Add("VideoInfo", vii);
FfmpegBuilderStart ffStart = new();
@@ -194,7 +187,6 @@ public class FfmpegBuilder_AudioConverterTests: TestBase
ffExecutor.PreExecute(args);
result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
var newInfo = vi.Read(args.WorkingFile).Value;
diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs
index 07d72e91..58ba8bf9 100644
--- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs
+++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs
@@ -8,26 +8,29 @@ using VideoNodes.Tests;
namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests;
[TestClass]
-public class FfmpegBuilder_BasicTests : TestBase
+public class FfmpegBuilder_BasicTests : VideoTestBase
{
- [TestMethod]
- public void FfmpegBuilder_Basic_h265()
+ VideoInfo vii;
+ NodeParameters args;
+ FfmpegModel Model;
+
+ protected override void TestStarting()
{
- const string file = @"D:\videos\unprocessed\basic.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
+ args = GetVideoNodeParameters();
+ VideoFile vf = new VideoFile();
+ vf.PreExecute(args);
+ vf.Execute(args);
+ vii = (VideoInfo)args.Parameters["VideoInfo"];
+
FfmpegBuilderStart ffStart = new();
ffStart.PreExecute(args);
Assert.AreEqual(1, ffStart.Execute(args));
+ Model = ffStart.GetModel();
+ }
+ [TestMethod]
+ public void FfmpegBuilder_Basic_h265()
+ {
FfmpegBuilderVideoEncode ffEncode = new();
ffEncode.Codec = "h265 10BIT";
ffEncode.Quality = 28;
@@ -40,7 +43,6 @@ public class FfmpegBuilder_BasicTests : TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
@@ -48,21 +50,6 @@ public class FfmpegBuilder_BasicTests : TestBase
[TestMethod]
public void FfmpegBuilder_Basic_Av1()
{
- const string file = @"D:\videos\unprocessed\basic.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
FfmpegBuilderVideoEncode ffEncode = new();
ffEncode.Codec = "av1 10BIT";
ffEncode.Quality = 28;
@@ -75,28 +62,12 @@ public class FfmpegBuilder_BasicTests : TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
[TestMethod]
public void FfmpegBuilder_AddAc3Aac()
{
- const string file = @"D:\videos\unprocessed\multi_audio.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new ();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
FfmpegBuilderVideoCodec ffEncode = new ();
ffEncode.VideoCodec = "h264";
ffEncode.PreExecute(args);
@@ -124,7 +95,6 @@ public class FfmpegBuilder_BasicTests : TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
@@ -132,21 +102,6 @@ public class FfmpegBuilder_BasicTests : TestBase
[TestMethod]
public void FfmpegBuilder_AudioT064kbps()
{
- const string file = @"D:\videos\testfiles\basic.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
FfmpegBuilderAudioTrackRemover ffRemover = new();
ffRemover.RemoveAll = true;
ffRemover.StreamType = "Audio";
@@ -167,113 +122,12 @@ public class FfmpegBuilder_BasicTests : TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
- Assert.AreEqual(1, result);
- }
-
- [TestMethod]
- public void FfmpegBuilder_AddAudioTracks()
- {
- const string file = @"D:\videos\unprocessed\bigbuckbunny_480p_30s.mp4";
- 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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- Assert.AreEqual(1, ffStart.Execute(args));
- var model = ffStart.GetModel();
- if (model.AudioStreams[0].Stream.Channels < 5.1f)
- Assert.Fail();
-
- FfmpegBuilderVideoCodec ffEncode = new();
- ffEncode.VideoCodec = "h264";
- ffEncode.Execute(args);
-
- int index = 0;
- FfmpegBuilderAudioAddTrack ffAddAudioMono = new();
- ffAddAudioMono.Codec = "mp3";
- ffAddAudioMono.Index = index;
- ffAddAudioMono.Channels = 1;
- ffAddAudioMono.Execute(args);
- model.AudioStreams[index].Title = "MP3 Mono";
- ++index;
-
- FfmpegBuilderAudioAddTrack ffAddAudioStereoAac = new();
- ffAddAudioStereoAac.Codec = "aac";
- ffAddAudioStereoAac.Index = index;
- ffAddAudioStereoAac.Channels = 2;
- ffAddAudioStereoAac.Execute(args);
- model.AudioStreams[index].Title = "AAC Stereo";
- ++index;
-
- FfmpegBuilderAudioAddTrack ffAddAudioStereoMp3French = new();
- ffAddAudioStereoMp3French.Codec = "mp3";
- ffAddAudioStereoMp3French.Index = index;
- ffAddAudioStereoMp3French.Channels = 2;
- ffAddAudioStereoMp3French.Execute(args);
- model.AudioStreams[index].Language = "fre";
- model.AudioStreams[index].Title = "MP3 Stereo";
- ++index;
-
- FfmpegBuilderAudioAddTrack ffAddAudioStereoMp3 = new();
- ffAddAudioStereoMp3.Codec = "mp3";
- ffAddAudioStereoMp3.Index = index;
- ffAddAudioStereoMp3.Channels = 2;
- ffAddAudioStereoMp3.Execute(args);
- model.AudioStreams[index].Title = "MP3 Stereo";
- ++index;
-
- FfmpegBuilderAudioAddTrack ffAddAudioAc3German = new();
- ffAddAudioAc3German.Codec = "ac3";
- ffAddAudioAc3German.Index = index;
- ffAddAudioAc3German.Execute(args);
- model.AudioStreams[index].Title = "AC3 5.1";
- model.AudioStreams[index].Language = "deu";
- ++index;
-
- FfmpegBuilderAudioAddTrack ffAddAudioAc3 = new();
- ffAddAudioAc3.Codec = "ac3";
- ffAddAudioAc3.Index = index;
- ffAddAudioAc3.Execute(args);
- model.AudioStreams[index].Title = "AC3 5.1";
- ++index;
-
- FfmpegBuilderAudioAddTrack ffAddAudioAac = new();
- ffAddAudioAac.Codec = "aac";
- ffAddAudioAac.Index = index;
- ffAddAudioAac.Execute(args);
- model.AudioStreams[index].Title = "AAC 5.1";
- ++index;
-
- FfmpegBuilderExecutor ffExecutor = new();
- int result = ffExecutor.Execute(args);
-
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
[TestMethod]
public void FfmpegBuilder_AddAc3Aac_Normalize()
{
- const string file = @"/home/john/src/ff-files/test-files/videos/basic {tvdb-71470}.mkv";
- var vi = new VideoInfoHelper(FfmpegPath, Logger);
- var vii = vi.Read(file);
- var args = new NodeParameters(file, Logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = @"/home/john/src/ff-files/temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
FfmpegBuilderVideoCodec ffEncode = new();
ffEncode.VideoCodec = "h264";
ffEncode.PreExecute(args);
@@ -312,416 +166,241 @@ public class FfmpegBuilder_BasicTests : TestBase
[TestMethod]
public void FfmpegBuilder_AddAc3Aac_AdjustVolume()
{
- const string file = @"D:\videos\unprocessed\dummy.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, null);
- 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.PreExecute(args);
ffEncode.Execute(args);
FfmpegBuilderAudioTrackRemover ffAudioRemover = new();
ffAudioRemover.RemoveAll = true;
+ ffAudioRemover.PreExecute(args);
ffAudioRemover.Execute(args);
FfmpegBuilderAudioAddTrack ffAddAudio = new();
ffAddAudio.Codec = "ac3";
ffAddAudio.Index = 1;
+ ffAddAudio.PreExecute(args);
ffAddAudio.Execute(args);
FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
ffAddAudio2.Codec = "aac";
ffAddAudio2.Index = 2;
+ ffAddAudio2.PreExecute(args);
ffAddAudio2.Execute(args);
FfmpegBuilderAudioAdjustVolume ffAudioAdjust= new();
ffAudioAdjust.VolumePercent = 1000;
ffAudioAdjust.Pattern = ">1";
+ ffAudioAdjust.PreExecute(args);
ffAudioAdjust.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
+ ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
[TestMethod]
public void FfmpegBuilder_AddAc3AacMp4NoSubs()
{
- const string file = @"D:\videos\unprocessed\basic.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, null);
- 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.PreExecute(args);
ffEncode.Execute(args);
FfmpegBuilderRemuxToMP4 ffMp4 = new();
+ ffMp4.PreExecute(args);
ffMp4.Execute(args);
FfmpegBuilderSubtitleFormatRemover ffSubRemover = new();
ffSubRemover.RemoveAll = true;
+ ffSubRemover.PreExecute(args);
ffSubRemover.Execute(args);
FfmpegBuilderAudioAddTrack ffAddAudio = new();
ffAddAudio.Codec = "ac3";
ffAddAudio.Index = 1;
+ ffAddAudio.PreExecute(args);
ffAddAudio.Execute(args);
FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
ffAddAudio2.Codec = "aac";
ffAddAudio2.Index = 2;
+ ffAddAudio2.PreExecute(args);
ffAddAudio2.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
+ ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
[TestMethod]
public void FfmpegBuilder_AddAc3AacMp4NoSubs_BlackBars()
{
- const string file = @"D:\videos\unprocessed\blackbars.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, null);
- 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 = "h265";
+ ffEncode.PreExecute(args);
ffEncode.Execute(args);
FfmpegBuilderRemuxToMP4 ffMp4 = new();
+ ffMp4.PreExecute(args);
ffMp4.Execute(args);
FfmpegBuilderCropBlackBars ffCropBlackBars = new();
ffCropBlackBars.CroppingThreshold = 10;
+ ffCropBlackBars.PreExecute(args);
ffCropBlackBars.Execute(args);
FfmpegBuilderSubtitleFormatRemover ffSubRemover = new();
ffSubRemover.RemoveAll = true;
+ ffSubRemover.PreExecute(args);
ffSubRemover.Execute(args);
FfmpegBuilderAudioAddTrack ffAddAudio = new();
ffAddAudio.Codec = "ac3";
ffAddAudio.Index = 1;
+ ffAddAudio.PreExecute(args);
ffAddAudio.Execute(args);
FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
ffAddAudio2.Codec = "aac";
ffAddAudio2.Index = 2;
+ ffAddAudio2.PreExecute(args);
ffAddAudio2.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
+ ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
[TestMethod]
public void FfmpegBuilder_AddAc3AacMp4NoSubs_BlackBars_Scaled480p()
{
- const string file = @"D:\videos\unprocessed\blackbars.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, null);
- 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 = "h265";
+ ffEncode.PreExecute(args);
ffEncode.Execute(args);
FfmpegBuilderRemuxToMP4 ffMp4 = new();
+ ffMp4.PreExecute(args);
ffMp4.Execute(args);
FfmpegBuilderCropBlackBars ffCropBlackBars = new();
ffCropBlackBars.CroppingThreshold = 10;
+ ffCropBlackBars.PreExecute(args);
ffCropBlackBars.Execute(args);
FfmpegBuilderScaler ffScaler = new();
ffScaler.Resolution = "640:-2";
+ ffScaler.PreExecute(args);
ffScaler.Execute(args);
FfmpegBuilderSubtitleFormatRemover ffSubRemover = new();
ffSubRemover.RemoveAll = true;
+ ffSubRemover.PreExecute(args);
ffSubRemover.Execute(args);
FfmpegBuilderAudioAddTrack ffAddAudio = new();
ffAddAudio.Codec = "ac3";
ffAddAudio.Index = 1;
+ ffAddAudio.PreExecute(args);
ffAddAudio.Execute(args);
FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
ffAddAudio2.Codec = "aac";
ffAddAudio2.Index = 2;
+ ffAddAudio2.PreExecute(args);
ffAddAudio2.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
+ ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
+
+ // Video isnt long enough for this
+ // [TestMethod]
+ // public void FfmpegBuilder_AddAc3Aac_AutoChapters()
+ // {
+ // FfmpegBuilderVideoCodec ffEncode = new();
+ // ffEncode.VideoCodec = "h264";
+ // ffEncode.PreExecute(args);
+ // ffEncode.Execute(args);
+ //
+ // FfmpegBuilderAudioAddTrack ffAddAudio = new();
+ // ffAddAudio.Codec = "ac3";
+ // ffAddAudio.Index = 1;
+ // ffAddAudio.PreExecute(args);
+ // ffAddAudio.Execute(args);
+ //
+ // FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
+ // ffAddAudio2.Codec = "aac";
+ // ffAddAudio2.Index = 2;
+ // ffAddAudio2.PreExecute(args);
+ // ffAddAudio2.Execute(args);
+ //
+ // FfmpegBuilderAutoChapters ffAutoChapters = new();
+ // ffAutoChapters.Percent = 45;
+ // ffAutoChapters.MinimumLength = 60;
+ // ffAutoChapters.PreExecute(args);
+ // Assert.AreEqual(1, ffAutoChapters.Execute(args));
+ //
+ // FfmpegBuilderExecutor ffExecutor = new();
+ // ffExecutor.PreExecute(args);
+ // int result = ffExecutor.Execute(args);
+ //
+ // Assert.AreEqual(1, result);
+ // }
-
- [TestMethod]
- public void FfmpegBuilder_AddAc3AacMp4NoSubs_BlackBars_Scaled4k()
- {
- const string file = @"D:\videos\unprocessed\blackbars.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, null);
- 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 = "h265";
- ffEncode.Execute(args);
-
- FfmpegBuilderRemuxToMP4 ffMp4 = new();
- ffMp4.Execute(args);
-
- FfmpegBuilderCropBlackBars ffCropBlackBars = new();
- ffCropBlackBars.CroppingThreshold = 10;
- ffCropBlackBars.Execute(args);
-
- FfmpegBuilderScaler ffScaler = new();
- ffScaler.Resolution = "3840:-2";
- ffScaler.Execute(args);
-
- FfmpegBuilderSubtitleFormatRemover ffSubRemover = new();
- ffSubRemover.RemoveAll = true;
- ffSubRemover.Execute(args);
-
-
- FfmpegBuilderAudioAddTrack ffAddAudio = new();
- ffAddAudio.Codec = "ac3";
- ffAddAudio.Index = 1;
- ffAddAudio.Execute(args);
-
- FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
- ffAddAudio2.Codec = "aac";
- ffAddAudio2.Index = 2;
- ffAddAudio2.Execute(args);
-
- FfmpegBuilderExecutor ffExecutor = new();
- int result = ffExecutor.Execute(args);
-
- string log = logger.ToString();
- Assert.AreEqual(1, result);
- }
-
- [TestMethod]
- public void FfmpegBuilder_AddAc3AacMp4NoSubs_BlackBars_Scaled480p2()
- {
- const string file = @"D:\videos\unprocessed\basic.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, null);
- 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 = "h265";
- ffEncode.Execute(args);
-
- FfmpegBuilderRemuxToMP4 ffMp4 = new();
- ffMp4.Execute(args);
-
- FfmpegBuilderCropBlackBars ffCropBlackBars = new();
- ffCropBlackBars.CroppingThreshold = 10;
- ffCropBlackBars.Execute(args);
-
- FfmpegBuilderScaler ffScaler = new();
- ffScaler.Resolution = "640:-2";
- ffScaler.Execute(args);
-
- FfmpegBuilderSubtitleFormatRemover ffSubRemover = new();
- ffSubRemover.RemoveAll = true;
- ffSubRemover.Execute(args);
-
-
- FfmpegBuilderAudioAddTrack ffAddAudio = new();
- ffAddAudio.Codec = "ac3";
- ffAddAudio.Index = 1;
- ffAddAudio.Execute(args);
-
- FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
- ffAddAudio2.Codec = "aac";
- ffAddAudio2.Index = 2;
- ffAddAudio2.Execute(args);
-
- FfmpegBuilderExecutor ffExecutor = new();
- int result = ffExecutor.Execute(args);
-
- string log = logger.ToString();
- Assert.AreEqual(1, result);
- }
-
-
- [TestMethod]
- public void FfmpegBuilder_AddAc3Aac_AutoChapters()
- {
- const string file = @"D:\videos\unprocessed\sitcom.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, null);
- 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);
-
- FfmpegBuilderAudioAddTrack ffAddAudio = new();
- ffAddAudio.Codec = "ac3";
- ffAddAudio.Index = 1;
- ffAddAudio.Execute(args);
-
- FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
- ffAddAudio2.Codec = "aac";
- ffAddAudio2.Index = 2;
- ffAddAudio2.Execute(args);
-
- FfmpegBuilderAutoChapters ffAutoChapters = new();
- ffAutoChapters.Percent = 45;
- ffAutoChapters.MinimumLength = 60;
- Assert.AreEqual(1, ffAutoChapters.Execute(args));
-
- FfmpegBuilderExecutor ffExecutor = new();
- int result = ffExecutor.Execute(args);
-
- string log = logger.ToString();
- Assert.AreEqual(1, result);
- }
-
- [TestMethod]
- public void FfmpegBuilder_AddAc3Aac_ComskipChapters()
- {
- const string file = @"D:\videos\recordings\Rescue My Renovation (2001).ts";
- 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, null);
- 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);
-
- FfmpegBuilderAudioAddTrack ffAddAudio = new();
- ffAddAudio.Codec = "ac3";
- ffAddAudio.Index = 1;
- ffAddAudio.Execute(args);
-
- FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
- ffAddAudio2.Codec = "aac";
- ffAddAudio2.Index = 2;
- ffAddAudio2.Execute(args);
-
- FfmpegBuilderAudioSetLanguage ffSetLanguage = new();
- ffSetLanguage.Language = "deu";
- ffSetLanguage.Execute(args);
-
- FfmpegBuilderComskipChapters ffComskipChapters = new();
- Assert.AreEqual(1, ffComskipChapters.Execute(args));
-
- FfmpegBuilderExecutor ffExecutor = new();
- int result = ffExecutor.Execute(args);
-
- string log = logger.ToString();
- Assert.AreEqual(1, result);
- }
+ // [TestMethod]
+ // public void FfmpegBuilder_AddAc3Aac_ComskipChapters()
+ // {
+ // FfmpegBuilderVideoCodec ffEncode = new();
+ // ffEncode.VideoCodec = "h264";
+ // ffEncode.PreExecute(args);
+ // ffEncode.Execute(args);
+ //
+ // FfmpegBuilderAudioAddTrack ffAddAudio = new();
+ // ffAddAudio.Codec = "ac3";
+ // ffAddAudio.Index = 1;
+ // ffAddAudio.PreExecute(args);
+ // ffAddAudio.Execute(args);
+ //
+ // FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
+ // ffAddAudio2.Codec = "aac";
+ // ffAddAudio2.Index = 2;
+ // ffAddAudio2.PreExecute(args);
+ // ffAddAudio2.Execute(args);
+ //
+ // FfmpegBuilderAudioSetLanguage ffSetLanguage = new();
+ // ffSetLanguage.Language = "deu";
+ // ffSetLanguage.PreExecute(args);
+ // ffSetLanguage.Execute(args);
+ //
+ // FfmpegBuilderComskipChapters ffComskipChapters = new();
+ // ffComskipChapters.PreExecute(args);
+ // Assert.AreEqual(1, ffComskipChapters.Execute(args));
+ //
+ // FfmpegBuilderExecutor ffExecutor = new();
+ // ffExecutor.PreExecute(args);
+ // int result = ffExecutor.Execute(args);
+ //
+ // Assert.AreEqual(1, result);
+ // }
[TestMethod]
public void FfmpegBuilder_AddAc3Aac_AudioTrackReorder()
{
- const string file = @"D:\videos\unprocessed\multi_audio.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
FfmpegBuilderAudioTrackReorder ffAudioReorder= new();
ffAudioReorder.Channels = new List { "1.0", "5.1", "2.0" };
ffAudioReorder.Languages = new List { "fre", "deu" };
@@ -732,351 +411,79 @@ public class FfmpegBuilder_BasicTests : TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
- Assert.AreEqual(1, result);
-
-
- var vi2 = new VideoInfoHelper(ffmpeg, logger);
- var vii2 = vi.Read(args.WorkingFile);
- }
-
-
- [TestMethod]
- public void FfmpegBuilder_SubtitleTrackReorder()
- {
- const string file = @"D:\videos\testfiles\movtext.mp4";
- 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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
- var model = (FfmpegModel)args.Variables["FFMPEG_BUILDER_MODEL"];
-
- Assert.AreNotEqual("eng", model.SubtitleStreams[0].Language);
-
- FfmpegBuilderAudioTrackReorder ffAudioReorder = new();
- ffAudioReorder.StreamType = "Subtitle";
- ffAudioReorder.Languages = new List { "eng", "deu" };
- ffAudioReorder.PreExecute(args);
- ffAudioReorder.Execute(args);
-
- Assert.AreEqual("eng", model.SubtitleStreams[0].Language);
-
- }
-
- [TestMethod]
- public void FfmpegBuilder_AddAc3AacMp4NoSubs_BlackBars_Normalize_AutoChapters_Upscale4k()
- {
- const string file = @"D:\videos\unprocessed\blackbars.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- Assert.AreEqual(1, ffStart.Execute(args));
- var model = ffStart.GetModel();
-
- FfmpegBuilderVideoCodec ffEncode = new();
- ffEncode.VideoCodec = "h265";
- ffEncode.Execute(args);
-
- FfmpegBuilderScaler ffScaler = new();
- ffScaler.Resolution = "3840:-2";
- ffScaler.Execute(args);
-
- FfmpegBuilderRemuxToMP4 ffMp4 = new();
- ffMp4.Execute(args);
-
- FfmpegBuilderCropBlackBars ffCropBlackBars = new();
- ffCropBlackBars.CroppingThreshold = 10;
- ffCropBlackBars.Execute(args);
-
- FfmpegBuilderSubtitleFormatRemover ffSubRemover = new();
- ffSubRemover.RemoveAll = true;
- ffSubRemover.Execute(args);
- FfmpegBuilderAudioAddTrack ffAddAudio = new();
- ffAddAudio.Codec = "ac3";
- ffAddAudio.Index = 0;
- ffAddAudio.Execute(args);
- model.AudioStreams[0].Language = "mao";
- model.AudioStreams[0].Title = "AC3";
-
- FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
- ffAddAudio2.Codec = "aac";
- ffAddAudio2.Index = 1;
- ffAddAudio2.Execute(args);
- model.AudioStreams[1].Language = "fre";
- model.AudioStreams[1].Title = "AAC";
-
- FfmpegBuilderAudioNormalization ffAudioNormalize = new();
- ffAudioNormalize.TwoPass = false;
- ffAudioNormalize.AllAudio = true;
- ffAudioNormalize.Execute(args);
-
-
- FfmpegBuilderAutoChapters ffaAutoChapters = new();
- ffaAutoChapters.MinimumLength = 30;
- ffaAutoChapters.Percent = 45;
- ffaAutoChapters.Execute(args);
-
- FfmpegBuilderExecutor ffExecutor = new();
- int result = ffExecutor.Execute(args);
-
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
-
[TestMethod]
public void FfmpegBuilder_SetLanguage()
{
- const string file = @"D:\videos\unprocessed\sitcom.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- Assert.AreEqual(1, ffStart.Execute(args));
-
FfmpegBuilderAudioSetLanguage ffSetLanguage = new();
ffSetLanguage.Language = "deu";
+ ffSetLanguage.PreExecute(args);
ffSetLanguage.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
+ ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
- [TestMethod]
- public void FfmpegBuilder_HdrToSdr()
- {
- const string file = @"D:\videos\unprocessed\hdr.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderHdrToSdr ffHdrToSdr= new();
- Assert.AreEqual(1, ffHdrToSdr.Execute(args));
-
- FfmpegBuilderExecutor ffExecutor = new();
- int result = ffExecutor.Execute(args);
-
- 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, null);
- 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.PreExecute(args);
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);
- }
-
-
- [TestMethod]
- public void FfmpegBuilder_HardwareDecoding()
- {
- const string file = @"D:\videos\unprocessed\basic.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, null);
- 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);
-
-
- FfmpegBuilderAudioAddTrack ffAddAudio = new();
- ffAddAudio.Codec = "ac3";
- ffAddAudio.Index = 0;
+ ffAddAudio.PreExecute(args);
ffAddAudio.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.HardwareDecoding = true;
+ ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
-
[TestMethod]
public void FfmpegBuilder_VideoBitrate()
{
- const string file = @"D:\videos\unprocessed\basic.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- Assert.AreEqual(1, ffStart.Execute(args));
-
FfmpegBuilderVideoBitrate ffBitrate = new();
ffBitrate.Bitrate = 1_000;
+ ffBitrate.PreExecute(args);
ffBitrate.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.HardwareDecoding = true;
+ ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
[TestMethod]
public void FfmpegBuilder_VideoCodecAndBitrate()
{
- const string file = @"D:\videos\unprocessed\basic.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, null);
- 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.Force = true;
+ ffEncode.PreExecute(args);
ffEncode.Execute(args);
FfmpegBuilderVideoBitrate ffBitrate = new();
ffBitrate.Bitrate = 50;
ffBitrate.Percent = true;
+ ffBitrate.PreExecute(args);
ffBitrate.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.HardwareDecoding = true;
+ ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
- Assert.AreEqual(1, result);
- }
-
- [TestMethod]
- public void FfmpegBuilder_FF43()
- {
- const string file = @"D:\videos\testfiles\ff-43.ts";
- 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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderAudioTrackRemover ffRemoveAudio = new();
- ffRemoveAudio.RemoveAll = true;
- ffRemoveAudio.Execute(args);
-
- FfmpegBuilderAudioAddTrack ffAddAudio = new();
- ffAddAudio.Codec = "ac3";
- ffAddAudio.Index = 0;
- ffAddAudio.Execute(args);
-
- FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
- ffAddAudio2.Codec = "aac";
- ffAddAudio2.Index = 1;
- ffAddAudio2.Execute(args);
-
- FfmpegBuilderExecutor ffExecutor = new();
- int result = ffExecutor.Execute(args);
-
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
@@ -1084,96 +491,34 @@ public class FfmpegBuilder_BasicTests : TestBase
[TestMethod]
public void FfmpegBuilder_AddAc3Aac_AV1()
{
- const string file = @"D:\videos\testfiles\av1.mkv";
- var logger = new TestLogger();
- const string ffmpeg = @"C:\utils\ffmpeg5\ffmpeg.exe";
- VideoInfoHelper.ProbeSize = 1000;
- var vi = new VideoInfoHelper(ffmpeg, logger);
- var vii = vi.Read(file);
- var args = new NodeParameters(file, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
-
- Assert.AreEqual(1, ffStart.Execute(args));
-
FfmpegBuilderAudioTrackRemover ffAudioRemove = new();
ffAudioRemove.RemoveAll = true;
+ ffAudioRemove.PreExecute(args);
ffAudioRemove.Execute(args);
- //FfmpegBuilderAudioAddTrack ffAddAudio = new();
- //ffAddAudio.Codec = "ac3";
- //ffAddAudio.Language = "eng";
- //ffAddAudio.Index = 0;
- //ffAddAudio.Execute(args);
-
FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
ffAddAudio2.Codec = "aac";
ffAddAudio2.Language = "deu";
ffAddAudio2.Index = 1;
+ ffAddAudio2.PreExecute(args);
ffAddAudio2.Execute(args);
FfmpegBuilderSubtitleFormatRemover ffSubtitle= new();
ffSubtitle.RemoveAll = true;
+ ffSubtitle.PreExecute(args);
ffSubtitle.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
+ ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
-
-
-
- [TestMethod]
- public void FfmpegBuilder_RemoveSubtitleFormat_MovText()
- {
- const string file = @"D:\videos\testfiles\movtext.mp4";
- 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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderSubtitleFormatRemover ffSubRemover= new();
- ffSubRemover.SubtitlesToRemove = new List { "mov_text" };
- ffSubRemover.PreExecute(args);
- Assert.AreEqual(1, ffSubRemover.Execute(args));
- }
-
-
-
[TestMethod]
public void FfmpegBuilder_VideoTag()
{
- const string file = @"D:\videos\testfiles\120-mbps-4k-uhd-hevc-10bit.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
FfmpegBuilderVideoTag ffTag= new();
ffTag.Tag = "hvc1";
ffTag.PreExecute(args);
@@ -1183,29 +528,12 @@ public class FfmpegBuilder_BasicTests : TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
-
-
[TestMethod]
public void FfmpegBuilder_CustomParameters()
{
- const string file = @"D:\videos\testfiles\basic.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
FfmpegBuilderCustomParameters ffCustom = new();
ffCustom.Parameters = "this is a \"testing bobby drake\" blah";
ffCustom.ForceEncode = true;
@@ -1216,74 +544,12 @@ public class FfmpegBuilder_BasicTests : TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
- Assert.IsTrue(log.Contains("this is a \"testing bobby drake\" blah"));
+ Assert.IsTrue(Logger.ToString().Contains("this is a \"testing bobby drake\" blah"));
}
-
- [TestMethod]
- public void FfmpegBuilder_ImageStream()
- {
- const string file = @"D:\videos\testfiles\img_stream.mp4";
- 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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderRemuxToMkv ffMkv = new();
- ffMkv.PreExecute(args);
- Assert.AreEqual(1, ffMkv.Execute(args));
-
- FfmpegBuilderAudioTrackRemover ffRemover = new();
- ffRemover.StreamType = "Video";
- ffRemover.RemoveIndex = 1;
- ffRemover.PreExecute(args);
- Assert.AreEqual(1, ffRemover.Execute(args));
-
-
- FfmpegBuilderAudioTrackRemover ffRemoverSubtitles = new();
- ffRemoverSubtitles.StreamType = "Subtitle";
- ffRemoverSubtitles.RemoveAll = true;
- ffRemoverSubtitles.PreExecute(args);
- Assert.AreEqual(1, ffRemoverSubtitles.Execute(args));
-
- FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.PreExecute(args);
- int result = ffExecutor.Execute(args);
-
- string log = logger.ToString();
- Assert.AreEqual(1, result);
- }
-
-
-
[TestMethod]
public void FfmpegBuilder_SubtitleTrackMerge()
{
- const string file = @"D:\videos\testfiles\dummy.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
-
FfmpegBuilderSubtitleTrackMerge ffSubMerge = new();
ffSubMerge.Subtitles = new List { "srt" };
ffSubMerge.MatchFilename = true;
@@ -1295,7 +561,6 @@ public class FfmpegBuilder_BasicTests : TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
@@ -1340,119 +605,11 @@ public class FfmpegBuilder_BasicTests : TestBase
Assert.AreEqual(item.Item3, isMatch);
Assert.AreEqual(item.Item2, lang, "Language not matching in: " + item.Item1);
}
-
}
- [TestMethod]
- public void FfmpegBuilder_BlackBars_Short()
- {
- const string file = @"D:\videos\testfiles\tag.mp4";
- 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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderCropBlackBars ffCropBlackBars = new();
- ffCropBlackBars.CroppingThreshold = 10;
- ffCropBlackBars.PreExecute(args);
- ffCropBlackBars.Execute(args);
-
- string log = logger.ToString();
- Assert.IsTrue(log.Contains($"-ss 2 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- Assert.IsTrue(log.Contains($"-ss 4 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- Assert.IsTrue(log.Contains($"-ss 6 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- Assert.IsTrue(log.Contains($"-ss 8 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- }
-
- [TestMethod]
- public void FfmpegBuilder_BlackBars_30sec()
- {
- const string file = @"D:\videos\testfiles\50-mbps-hd-h264.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderCropBlackBars ffCropBlackBars = new();
- ffCropBlackBars.CroppingThreshold = 10;
- ffCropBlackBars.PreExecute(args);
- ffCropBlackBars.Execute(args);
-
- string log = logger.ToString();
- Assert.IsTrue(log.Contains($"-ss 6 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- Assert.IsTrue(log.Contains($"-ss 12 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- Assert.IsTrue(log.Contains($"-ss 18 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- Assert.IsTrue(log.Contains($"-ss 24 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- }
-
-
- [TestMethod]
- public void FfmpegBuilder_BlackBars_LongVideo()
- {
- const string file = @"D:\videos\testfiles\pgs.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderCropBlackBars ffCropBlackBars = new();
- ffCropBlackBars.CroppingThreshold = 10;
- ffCropBlackBars.PreExecute(args);
- ffCropBlackBars.Execute(args);
-
- string log = logger.ToString();
- Assert.IsTrue(log.Contains($"-ss 60 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- Assert.IsTrue(log.Contains($"-ss 120 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- Assert.IsTrue(log.Contains($"-ss 240 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- Assert.IsTrue(log.Contains($"-ss 360 -i \"{file}\" -hide_banner -vframes 25 -vf cropdetect -f null -"));
- }
-
-
-
[TestMethod]
public void FfmpegBuilder_Scale()
{
- var logger = new TestLogger();
- const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe";
- var vi = new VideoInfoHelper(ffmpeg, logger);
- var vii = vi.Read(TestFile_120_mbps_4k_uhd_hevc_10bit);
- var args = new NodeParameters(TestFile_50_mbps_hd_h264, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
FfmpegBuilderVideoCodec ffCodec = new();
ffCodec.VideoCodec = "h265";
ffCodec.VideoCodecParameters = "h265";
@@ -1468,97 +625,12 @@ public class FfmpegBuilder_BasicTests : TestBase
FfmpegBuilderExecutor ffExecutor = new();
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
- Assert.AreEqual(1, result);
-
- }
-
-
-
- [TestMethod]
- public void FfmpegBuilder_SubtitleFormatRemover_Ppgs()
- {
- const string file = @"D:\videos\testfiles\pgs.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
-
- FfmpegBuilderSubtitleFormatRemover ffSubRemover = new();
- ffSubRemover.SubtitlesToRemove = new List { "hdmv_pgs_subtitle" };
- ffSubRemover.PreExecute(args);
- int result1 = ffSubRemover.Execute(args);
-
-
- FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.PreExecute(args);
- int result = ffExecutor.Execute(args);
-
- string log = logger.ToString();
- Assert.AreEqual(1, result1);
Assert.AreEqual(1, result);
}
-
-
- [TestMethod]
- public void FfmpegBuilder_SubtitleFormatRemover_Unknown()
- {
- const string file = @"D:\videos\testfiles\pgs.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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
-
- FfmpegBuilderSubtitleFormatRemover ffSubRemover = new();
- ffSubRemover.SubtitlesToRemove = new List { "UNKNOWN" };
- ffSubRemover.PreExecute(args);
- int result1 = ffSubRemover.Execute(args);
-
-
- FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.PreExecute(args);
- int result = ffExecutor.Execute(args);
-
- string log = logger.ToString();
- Assert.AreEqual(2, result1);
- Assert.AreEqual(2, result);
- }
-
[TestMethod]
public void FfmpegBuilder_SubtitleClearDefault()
{
- var logger = new TestLogger();
- var vi = new VideoInfoHelper(FfmpegPath, logger);
- var vii = vi.Read(TestFile_DefaultIsForcedSub);
- var args = new NodeParameters(TestFile_DefaultIsForcedSub, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
-
FfmpegBuilderSubtitleClearDefault ffClearDefault = new();
ffClearDefault.LeaveForced = true;
ffClearDefault.PreExecute(args);
@@ -1569,7 +641,6 @@ public class FfmpegBuilder_BasicTests : TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result1);
Assert.AreEqual(1, result);
}
diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_KeepOriginalLanguageTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_KeepOriginalLanguageTests.cs
index 24619256..c5d3d2f7 100644
--- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_KeepOriginalLanguageTests.cs
+++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_KeepOriginalLanguageTests.cs
@@ -8,17 +8,20 @@ using VideoNodes.Tests;
namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests;
[TestClass]
-public class FfmpegBuilder_KeepOriginalLanguageTests
+public class FfmpegBuilder_KeepOriginalLanguageTests : VideoTestBase
{
VideoInfo vii;
NodeParameters args;
- TestLogger logger = new TestLogger();
+ FfmpegModel Model;
+
private void Prepare(string german = "deu")
{
- const string file = @"D:\videos\unprocessed\basic.mkv";
- const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe";
- var vi = new VideoInfoHelper(ffmpeg, logger);
- vii = vi.Read(file);
+ args = GetVideoNodeParameters();
+ VideoFile vf = new VideoFile();
+ vf.PreExecute(args);
+ vf.Execute(args);
+ vii = (VideoInfo)args.Parameters["VideoInfo"];
+
vii.AudioStreams = new List
{
new AudioStream
@@ -86,11 +89,6 @@ public class FfmpegBuilder_KeepOriginalLanguageTests
Codec = "AAC"
}
};
- args = new NodeParameters(file, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
FfmpegBuilderStart ffStart = new();
ffStart.PreExecute(args);
@@ -112,8 +110,6 @@ public class FfmpegBuilder_KeepOriginalLanguageTests
args.Variables["OriginalLanguage"] = "German";
ffElement.PreExecute(args);
var result = ffElement.Execute(args);
- var log = logger.ToString();
-
Assert.AreEqual(1, result);
var model = GetFFmpegModel();
var kept = model.AudioStreams.Where(x => x.Deleted == false).ToList();
@@ -132,7 +128,6 @@ public class FfmpegBuilder_KeepOriginalLanguageTests
args.Variables["OriginalLanguage"] = "Maori";
ffElement.PreExecute(args);
var result = ffElement.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, result);
var model = GetFFmpegModel();
@@ -153,7 +148,6 @@ public class FfmpegBuilder_KeepOriginalLanguageTests
args.Variables["OriginalLanguage"] = "French";
ffElement.PreExecute(args);
var result = ffElement.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, result);
var model = GetFFmpegModel();
@@ -175,8 +169,6 @@ public class FfmpegBuilder_KeepOriginalLanguageTests
args.Variables["OriginalLanguage"] = "German";
ffElement.PreExecute(args);
var result = ffElement.Execute(args);
- var log = logger.ToString();
-
Assert.AreEqual(1, result);
var model = GetFFmpegModel();
var kept = model.AudioStreams.Where(x => x.Deleted == false).ToList();
@@ -199,7 +191,6 @@ public class FfmpegBuilder_KeepOriginalLanguageTests
args.Variables["OriginalLanguage"] = "Maori";
ffElement.PreExecute(args);
var result = ffElement.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, result);
var model = GetFFmpegModel();
@@ -223,7 +214,6 @@ public class FfmpegBuilder_KeepOriginalLanguageTests
args.Variables["OriginalLanguage"] = "French";
ffElement.PreExecute(args);
var result = ffElement.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, result);
var model = GetFFmpegModel();
@@ -253,7 +243,6 @@ public class FfmpegBuilder_KeepOriginalLanguageTests
args.Variables["OriginalLanguage"] = "French";
ffElement.PreExecute(args);
var result = ffElement.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, result);
var model = GetFFmpegModel();
@@ -285,7 +274,6 @@ public class FfmpegBuilder_KeepOriginalLanguageTests
args.Variables["OriginalLanguage"] = "de";
ffElement.PreExecute(args);
var result = ffElement.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, result);
var model = GetFFmpegModel();
diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_MetadataTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_MetadataTests.cs
index 5b6165af..06eb8b93 100644
--- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_MetadataTests.cs
+++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_MetadataTests.cs
@@ -7,23 +7,17 @@ using VideoNodes.Tests;
namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests;
[TestClass]
-public class FfmpegBuilder_MetadataTests: TestBase
+public class FfmpegBuilder_MetadataTests: VideoTestBase
{
[TestMethod]
public void FfmpegBuilder_Metadata_Remover_Language()
{
- string file = TestFile_MovText_Mp4;
- 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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
+ var args = GetVideoNodeParameters();
+ var videoFile = new VideoFile();
+ videoFile.PreExecute(args);
+ videoFile.Execute(args);
FfmpegBuilderStart ffStart = new ();
ffStart.PreExecute(args);
@@ -42,22 +36,16 @@ public class FfmpegBuilder_MetadataTests: TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
[TestMethod]
public void FfmpegBuilder_Metadata_Remover_Additional()
{
- string file = TestFile_MovText_Mp4;
- 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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
+ var args = GetVideoNodeParameters();
+ var videoFile = new VideoFile();
+ videoFile.PreExecute(args);
+ videoFile.Execute(args);
FfmpegBuilderStart ffStart = new();
@@ -74,55 +62,16 @@ public class FfmpegBuilder_MetadataTests: TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
-
- [TestMethod]
- public void FfmpegBuilder_Metadata_Remover_Images()
- {
- string file = TestFile_MovText_Mp4;
- 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, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
-
- FfmpegBuilderMetadataRemover ffMetadata = new();
- ffMetadata.RemoveImages = true;
- ffMetadata.PreExecute(args);
- Assert.AreEqual(1, ffMetadata.Execute(args));
-
- FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.PreExecute(args);
- int result = ffExecutor.Execute(args);
-
- string log = logger.ToString();
- Assert.AreEqual(1, result);
- }
-
[TestMethod]
public void FfmpegBuilder_Metadata_Remover_BitrateFromConvetted()
{
- string file = TestFile_BasicMkv;
- var logger = new TestLogger();
- var vi = new VideoInfoHelper(FfmpegPath, logger);
- var vii = vi.Read(file);
- var args = new NodeParameters(file, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
- args.Parameters.Add("VideoInfo", vii);
-
+ var args = GetVideoNodeParameters();
+ var videoFile = new VideoFile();
+ videoFile.PreExecute(args);
+ videoFile.Execute(args);
FfmpegBuilderStart ffStart = new();
Assert.IsTrue(ffStart.PreExecute(args));
@@ -139,7 +88,6 @@ public class FfmpegBuilder_MetadataTests: TestBase
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
- string log = logger.ToString();
Assert.AreEqual(1, result);
}
}
diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_TrackSorterTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_TrackSorterTests.cs
index 3635e8ef..37285ef7 100644
--- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_TrackSorterTests.cs
+++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_TrackSorterTests.cs
@@ -8,25 +8,24 @@ using VideoNodes.Tests;
namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests;
[TestClass]
-public class FfmpegBuilder_TrackSorterTests
+public class FfmpegBuilder_TrackSorterTests : VideoTestBase
{
- private TestContext testContextInstance;
-
- public TestContext TestContext
- {
- get { return testContextInstance; }
- set { testContextInstance = value; }
- }
-
VideoInfo vii;
NodeParameters args;
- TestLogger logger = new TestLogger();
+
+ protected override void TestStarting()
+ {
+ Prepare();
+ }
+
private void Prepare(string german = "deu")
{
- const string file = @"D:\videos\unprocessed\basic.mkv";
- const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe";
- var vi = new VideoInfoHelper(ffmpeg, logger);
- vii = vi.Read(file);
+ args = GetVideoNodeParameters();
+ VideoFile vf = new VideoFile();
+ vf.PreExecute(args);
+ vf.Execute(args);
+ vii = (VideoInfo)args.Parameters["VideoInfo"];
+
vii.AudioStreams = new List
{
new AudioStream
@@ -95,11 +94,6 @@ public class FfmpegBuilder_TrackSorterTests
Codec = "movtext"
}
};
- args = new NodeParameters(file, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = @"D:\videos\temp";
- args.Parameters.Add("VideoInfo", vii);
-
FfmpegBuilderStart ffStart = new();
ffStart.PreExecute(args);
@@ -116,7 +110,6 @@ public class FfmpegBuilder_TrackSorterTests
{
// Arrange
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -135,8 +128,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var sorted = trackSorter.SortStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(3, sorted[0].Index);
@@ -154,8 +145,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnChannels()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -172,8 +161,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var result = trackSorter.ProcessStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(2, streams[0].Index);
@@ -181,7 +168,7 @@ public class FfmpegBuilder_TrackSorterTests
Assert.AreEqual(1, streams[2].Index);
// Additional assertions for logging
- Assert.AreEqual("2 / fr / aac / 5.1 / Default", streams[0].ToString());
+ Assert.AreEqual("2 / fr / aac / 5.1", streams[0].ToString());
Assert.AreEqual("3 / en / ac3 / 7.1", streams[1].ToString());
Assert.AreEqual("1 / en / aac / 2.0", streams[2].ToString());
}
@@ -190,8 +177,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnLanguageThenCodec()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -209,8 +194,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var result = trackSorter.ProcessStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(3, streams[0].Index);
@@ -218,7 +201,7 @@ public class FfmpegBuilder_TrackSorterTests
Assert.AreEqual(2, streams[2].Index);
// Additional assertions for logging
- Assert.AreEqual("3 / en / ac3 / 7.1 / Default", streams[0].ToString());
+ Assert.AreEqual("3 / en / ac3 / 7.1", streams[0].ToString());
Assert.AreEqual("1 / en / aac / 2.0", streams[1].ToString());
Assert.AreEqual("2 / fr / aac / 5.1", streams[2].ToString());
}
@@ -227,8 +210,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnCustomMathOperation()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -245,8 +226,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var result = trackSorter.ProcessStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(2, streams[0].Index);
@@ -254,7 +233,7 @@ public class FfmpegBuilder_TrackSorterTests
Assert.AreEqual(1, streams[2].Index);
// Additional assertions for logging
- Assert.AreEqual("2 / fr / aac / 5.1 / Default", streams[0].ToString());
+ Assert.AreEqual("2 / fr / aac / 5.1", streams[0].ToString());
Assert.AreEqual("3 / en / ac3 / 7.1", streams[1].ToString());
Assert.AreEqual("1 / en / aac / 2.0", streams[2].ToString());
}
@@ -264,8 +243,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnRegex()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -282,8 +259,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var result = trackSorter.ProcessStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(1, streams[0].Index);
@@ -291,7 +266,7 @@ public class FfmpegBuilder_TrackSorterTests
Assert.AreEqual(2, streams[2].Index);
// Additional assertions for logging
- Assert.AreEqual("1 / en / ac3 / 2.0 / Default", streams[0].ToString());
+ Assert.AreEqual("1 / en / ac3 / 2.0", streams[0].ToString());
Assert.AreEqual("3 / en / ac3 / 7.1", streams[1].ToString());
Assert.AreEqual("2 / fr / eac3 / 5.1", streams[2].ToString());
}
@@ -300,8 +275,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnMultipleSorters()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -327,8 +300,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var result = trackSorter.ProcessStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
@@ -358,8 +329,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnBitrate()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -377,8 +346,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var sorted = trackSorter.SortStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(3, sorted[0].Index);
@@ -397,8 +364,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnChannelsAsc()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -417,8 +382,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var sorted = trackSorter.SortStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(1, sorted[0].Index);
@@ -439,8 +402,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnChannelsDesc()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -458,9 +419,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var sorted = trackSorter.SortStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
-
// Assert
Assert.AreEqual(3, sorted[0].Index);
Assert.AreEqual(4, sorted[1].Index);
@@ -479,8 +437,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnBitrateInvert()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -498,8 +454,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var sorted = trackSorter.SortStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(2, sorted[0].Index);
@@ -518,8 +472,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnBitrateAndCodec()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -538,8 +490,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var sorted = trackSorter.SortStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(4, sorted[0].Index);
@@ -563,8 +513,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnBitrateUnit()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -582,8 +530,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var sorted = trackSorter.SortStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(2, sorted[0].Index);
@@ -603,8 +549,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnLanguage()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -625,8 +569,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var sorted = trackSorter.SortStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(1, sorted[0].Index);
@@ -656,8 +598,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnLanguageRegex()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -678,8 +618,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var sorted = trackSorter.SortStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(1, sorted[0].Index);
@@ -708,8 +646,6 @@ public class FfmpegBuilder_TrackSorterTests
public void ProcessStreams_SortsStreamsBasedOnLanguageRegexOriginal()
{
// Arrange
-
- var args = new NodeParameters(logger);
var trackSorter = new FfmpegBuilderTrackSorter();
List streams = new List
{
@@ -732,8 +668,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
var sorted = trackSorter.SortStreams(args, streams);
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(4, sorted[0].Index);
@@ -778,15 +712,13 @@ public class FfmpegBuilder_TrackSorterTests
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("0 / en / AC3 / 5.1 / Default", model.AudioStreams[0].ToString());
+ Assert.AreEqual("0 / en / AC3 / 5.1", model.AudioStreams[0].ToString());
Assert.AreEqual("3 / deu / AAC / 5.1", model.AudioStreams[1].ToString());
Assert.AreEqual("1 / en / AAC / Directors Commentary / 2.0", model.AudioStreams[2].ToString());
Assert.AreEqual("2 / fre / AAC / 2.0", model.AudioStreams[3].ToString());
@@ -810,16 +742,13 @@ public class FfmpegBuilder_TrackSorterTests
// 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 / fre / srt / Default", model.SubtitleStreams[0].ToString());
+ Assert.AreEqual("2 / fre / srt", model.SubtitleStreams[0].ToString());
Assert.AreEqual("3 / deu / movtext", model.SubtitleStreams[1].ToString());
Assert.AreEqual("0 / en / movtext", model.SubtitleStreams[2].ToString());
Assert.AreEqual("1 / en / subrip", model.SubtitleStreams[3].ToString());
@@ -843,9 +772,6 @@ public class FfmpegBuilder_TrackSorterTests
// Act
trackSorter.PreExecute(args);
var result = trackSorter.Execute(args);
-
- string log = logger.ToString();
- TestContext.WriteLine(log);
// Assert
Assert.AreEqual(1, result);
@@ -877,16 +803,13 @@ public class FfmpegBuilder_TrackSorterTests
// 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("0 / en / AC3 / 5.1 / Default", model.AudioStreams[0].ToString());
+ Assert.AreEqual("0 / en / AC3 / 5.1", model.AudioStreams[0].ToString());
Assert.AreEqual("2 / fre / AAC / 2.0", model.AudioStreams[1].ToString());
Assert.AreEqual("3 / deu / AAC / 5.1", model.AudioStreams[2].ToString());
Assert.AreEqual("1 / en / AAC / Directors Commentary / 2.0", model.AudioStreams[3].ToString());
diff --git a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_VideoEncodeTests.cs b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_VideoEncodeTests.cs
index bc54e207..95ddc7fd 100644
--- a/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_VideoEncodeTests.cs
+++ b/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_VideoEncodeTests.cs
@@ -1,303 +1,303 @@
-#if(DEBUG)
-
-using FileFlows.VideoNodes.FfmpegBuilderNodes;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using VideoNodes.Tests;
-using System.IO;
-using FileFlows.VideoNodes.Helpers;
-
-namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests;
-
-[TestClass]
-public class FfmpegBuilder_VideoEncode_VideoEncodeTests: TestBase
-{
- private (int output, string log) Encode(string codec, int quality, bool hardwareEncoding, string file, string outfile)
- {
- if (File.Exists(file) == false)
- throw new FileNotFoundException(file);
-
- var logger = new TestLogger();
- string ffmpeg = FfmpegPath;
- var vi = new VideoInfoHelper(ffmpeg, logger);
- var vii = vi.Read(file);
- var args = new NodeParameters(file, logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = TempPath;
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderVideoEncode ffEncode = new();
- //ffEncode.Encoder = "VAAPI";
- //ffEncode.Encoder = "NVIDIA";
- // ffEncode.Encoder = "Intel QSV";
- ffEncode.Codec = codec;
- ffEncode.Quality = quality;
- //ffEncode.HardwareEncoding = hardwareEncoding;
- ffEncode.PreExecute(args);
- ffEncode.Execute(args);
-
- FfmpegBuilderScaler scaler = new();
- scaler.Resolution = "1280:-2";
- scaler.Force = true;
- scaler.PreExecute(args);
- Assert.AreEqual(1, scaler.Execute(args));
-
- FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.PreExecute(args);
- int result = ffExecutor.Execute(args);
- string log = logger.ToString();
- if(args.WorkingFile.StartsWith(args.TempPath))
- File.Move(args.WorkingFile, FileHelper.Combine(args.TempPath, outfile), true);
- Assert.AreEqual(1, result);
- return (result, log);
- }
-
- private void TestEncode(bool h265, bool bit10, bool hardware)
- {
- foreach (var quality in new int[] { 18, 20, 23, 28, 35, 50 })
- {
- string codec = h265 && bit10 ? FfmpegBuilderVideoEncode.CODEC_H265_10BIT :
- h265 ? FfmpegBuilderVideoEncode.CODEC_H265 :
- FfmpegBuilderVideoEncode.CODEC_H264;
-
- var result = Encode(codec, quality, hardware, TestFile_Sitcom,
- $"{(hardware ? "nvidia" : "cpu")}_h26{(h265 ? "5" : "4")}{(bit10 ? "_10bit" : "")}_{quality}.mkv");
- }
-
- }
-
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_H265_10bit_Hardware() => TestEncode(true, true, true);
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_H265_Hardware() => TestEncode(true, false, true);
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_H265() => TestEncode(true, false, false);
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_H265_10bit() => TestEncode(true, false, true);
-
-
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_H264_Hardware() => TestEncode(false, false, true);
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_H264() => TestEncode(false, false, false);
-
-
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_FailIfNoHardware()
- {
- var logger = new TestLogger();
- string ffmpeg = FfmpegPath;
- var vi = new VideoInfoHelper(ffmpeg, logger);
- var vii = vi.Read(TestFile_120_mbps_4k_uhd_hevc_10bit);
- var args = new NodeParameters(TestFile_50_mbps_hd_h264, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = TempPath;
- args.Parameters.Add("VideoInfo", vii);
-
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderVideoCodec ffCodec = new();
- ffCodec.VideoCodec = "h265";
- ffCodec.VideoCodecParameters = "hevc_qsv";
- ffCodec.PreExecute(args);
- ffCodec.Execute(args);
-
- FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.PreExecute(args);
- int result = ffExecutor.Execute(args);
- string log = logger.ToString();
- Assert.AreEqual(-1, result);
-
- }
-
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_AutoUseHardware()
- {
- var logger = new TestLogger();
- string ffmpeg = FfmpegPath;
- var vi = new VideoInfoHelper(ffmpeg, logger);
- var vii = vi.Read(TestFile_BasicMkv);
- var args = new NodeParameters(TestFile_BasicMkv, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = TempPath;
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderVideoCodec ffCodec = new();
- ffCodec.VideoCodec = "h265";
- ffCodec.VideoCodecParameters = "h265";
- ffCodec.PreExecute(args);
- ffCodec.Execute(args);
-
- FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.PreExecute(args);
- int result = ffExecutor.Execute(args);
- string log = logger.ToString();
- Assert.AreEqual(1, result);
- }
-
-
-
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_QSV()
- {
- var logger = new TestLogger();
- string ffmpeg = FfmpegPath;
- var vi = new VideoInfoHelper(ffmpeg, logger);
- var vii = vi.Read(TestFile_BasicMkv);
- var args = new NodeParameters(TestFile_BasicMkv, logger, false, string.Empty, null);
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = TempPath;
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderVideoEncode ffEncode = new();
- ffEncode.Quality = 28;
- ffEncode.Speed = "ultrafast";
- ffEncode.Encoder = "Intel QSV";
- ffEncode.Codec = "h265";
- ffEncode.PreExecute(args);
- ffEncode.Execute(args);
-
- FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.PreExecute(args);
- int result = ffExecutor.Execute(args);
- string log = logger.ToString();
- Assert.AreEqual(1, result);
- }
-
-
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_Av1()
- {
- var logger = new TestLogger();
- string ffmpeg = FfmpegPath;
- var vi = new VideoInfoHelper(ffmpeg, logger);
- var vii = vi.Read(TestFile_BasicMkv);
- var args = new NodeParameters(TestFile_BasicMkv, logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = TempPath;
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderVideoEncode ffEncode = new();
- ffEncode.Quality = 28;
- ffEncode.Speed = "veryslow";
- //ffEncode.Encoder = "Nvid;
- ffEncode.Codec = "av1 10BIT";
- ffEncode.PreExecute(args);
- ffEncode.Execute(args);
-
- FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.PreExecute(args);
- int result = ffExecutor.Execute(args);
- string log = logger.ToString();
- Assert.AreEqual(1, result);
- }
-
-
-
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_Watermark()
- {
- var logger = new TestLogger();
- string ffmpeg = FfmpegPath;
- var vi = new VideoInfoHelper(ffmpeg, logger);
- var vii = vi.Read(TestFile_BasicMkv);
- var args = new NodeParameters(TestFile_BasicMkv, logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = TempPath;
- args.Parameters.Add("VideoInfo", vii);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderVideoEncode ffEncode = new();
- ffEncode.Quality = 28;
- ffEncode.Encoder = "CPU";
- ffEncode.Speed = "fast";
- ffEncode.Codec = "av1";
- ffEncode.PreExecute(args);
- ffEncode.Execute(args);
-
- FFmpegBuilderWatermark ffWatermark = new();
- ffWatermark.Image = "/home/john/Videos/watermark.png";
- ffWatermark.Position = FFmpegBuilderWatermark.WatermarkPosition.BottomRight;
- ffWatermark.Height = new();
- ffWatermark.Width = new() { Value = 5, Percentage = true};
- ffWatermark.XPos = new() { Value = 10, Percentage = true };
- ffWatermark.YPos = new() { Value = 5, Percentage = true };
- ffWatermark.Opacity = 50;
-
- ffWatermark.PreExecute(args);
- ffWatermark.Execute(args);
-
- FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.HardwareDecoding = false;
- ffExecutor.PreExecute(args);
- int result = ffExecutor.Execute(args);
- string log = logger.ToString();
- TestContext.WriteLine(log);
- Assert.AreEqual(1, result);
- }
-
- [TestMethod]
- public void FfmpegBuilder_VideoEncode_WebVTT()
- {
- string ffmpeg = FfmpegPath;
- var vi = new VideoInfoHelper(ffmpeg, Logger);
- var vii = vi.Read(TestFile_Webvtt);
- var args = new NodeParameters(TestFile_Webvtt, Logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => ffmpeg;
- args.TempPath = TempPath;
- args.Parameters.Add("VideoInfo", vii.Value);
-
- FfmpegBuilderStart ffStart = new();
- ffStart.PreExecute(args);
- Assert.AreEqual(1, ffStart.Execute(args));
-
- FfmpegBuilderVideoEncode ffEncode = new();
- ffEncode.Quality = 28;
- ffEncode.Speed = "fast";
- //ffEncode.Encoder = "CPU";
- ffEncode.Codec = "h265";
- ffEncode.PreExecute(args);
- ffEncode.Execute(args);
-
- FfmpegBuilderSubtitleFormatRemover remover = new();
- remover.SubtitlesToRemove = ["webvtt"];
- remover.PreExecute(args);
- remover.Execute(args);
-
- // FFmpegBuilderDurationStart ds = new();
- // ds.Start = new TimeSpan(0, 0, 0);
- // ds.Duration = new TimeSpan(0, 1, 0);
- // ds.PreExecute(args);
- // ds.Execute(args);
-
- FfmpegBuilderExecutor ffExecutor = new();
- ffExecutor.Strictness = "experimental";
- ffExecutor.PreExecute(args);
- int result = ffExecutor.Execute(args);
- Assert.AreEqual(1, result);
- }
-}
-
-#endif
\ No newline at end of file
+// #if(DEBUG)
+//
+// using FileFlows.VideoNodes.FfmpegBuilderNodes;
+// using Microsoft.VisualStudio.TestTools.UnitTesting;
+// using VideoNodes.Tests;
+// using System.IO;
+// using FileFlows.VideoNodes.Helpers;
+//
+// namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests;
+//
+// [TestClass]
+// public class FfmpegBuilder_VideoEncode_VideoEncodeTests: VideoTestBase
+// {
+// private (int output, string log) Encode(string codec, int quality, bool hardwareEncoding, string file, string outfile)
+// {
+// if (File.Exists(file) == false)
+// throw new FileNotFoundException(file);
+//
+// var logger = new TestLogger();
+// string ffmpeg = FfmpegPath;
+// var vi = new VideoInfoHelper(ffmpeg, logger);
+// var vii = vi.Read(file);
+// var args = new NodeParameters(file, logger, false, string.Empty, new LocalFileService());
+// args.GetToolPathActual = (string tool) => ffmpeg;
+// args.TempPath = TempPath;
+// args.Parameters.Add("VideoInfo", vii);
+//
+//
+// FfmpegBuilderStart ffStart = new();
+// ffStart.PreExecute(args);
+// Assert.AreEqual(1, ffStart.Execute(args));
+//
+// FfmpegBuilderVideoEncode ffEncode = new();
+// //ffEncode.Encoder = "VAAPI";
+// //ffEncode.Encoder = "NVIDIA";
+// // ffEncode.Encoder = "Intel QSV";
+// ffEncode.Codec = codec;
+// ffEncode.Quality = quality;
+// //ffEncode.HardwareEncoding = hardwareEncoding;
+// ffEncode.PreExecute(args);
+// ffEncode.Execute(args);
+//
+// FfmpegBuilderScaler scaler = new();
+// scaler.Resolution = "1280:-2";
+// scaler.Force = true;
+// scaler.PreExecute(args);
+// Assert.AreEqual(1, scaler.Execute(args));
+//
+// FfmpegBuilderExecutor ffExecutor = new();
+// ffExecutor.PreExecute(args);
+// int result = ffExecutor.Execute(args);
+// string log = logger.ToString();
+// if(args.WorkingFile.StartsWith(args.TempPath))
+// File.Move(args.WorkingFile, FileHelper.Combine(args.TempPath, outfile), true);
+// Assert.AreEqual(1, result);
+// return (result, log);
+// }
+//
+// private void TestEncode(bool h265, bool bit10, bool hardware)
+// {
+// foreach (var quality in new int[] { 18, 20, 23, 28, 35, 50 })
+// {
+// string codec = h265 && bit10 ? FfmpegBuilderVideoEncode.CODEC_H265_10BIT :
+// h265 ? FfmpegBuilderVideoEncode.CODEC_H265 :
+// FfmpegBuilderVideoEncode.CODEC_H264;
+//
+// var result = Encode(codec, quality, hardware, TestFile_Sitcom,
+// $"{(hardware ? "nvidia" : "cpu")}_h26{(h265 ? "5" : "4")}{(bit10 ? "_10bit" : "")}_{quality}.mkv");
+// }
+//
+// }
+//
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_H265_10bit_Hardware() => TestEncode(true, true, true);
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_H265_Hardware() => TestEncode(true, false, true);
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_H265() => TestEncode(true, false, false);
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_H265_10bit() => TestEncode(true, false, true);
+//
+//
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_H264_Hardware() => TestEncode(false, false, true);
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_H264() => TestEncode(false, false, false);
+//
+//
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_FailIfNoHardware()
+// {
+// var logger = new TestLogger();
+// string ffmpeg = FfmpegPath;
+// var vi = new VideoInfoHelper(ffmpeg, logger);
+// var vii = vi.Read(TestFile_120_mbps_4k_uhd_hevc_10bit);
+// var args = new NodeParameters(TestFile_50_mbps_hd_h264, logger, false, string.Empty, null);
+// args.GetToolPathActual = (string tool) => ffmpeg;
+// args.TempPath = TempPath;
+// args.Parameters.Add("VideoInfo", vii);
+//
+//
+// FfmpegBuilderStart ffStart = new();
+// ffStart.PreExecute(args);
+// Assert.AreEqual(1, ffStart.Execute(args));
+//
+// FfmpegBuilderVideoCodec ffCodec = new();
+// ffCodec.VideoCodec = "h265";
+// ffCodec.VideoCodecParameters = "hevc_qsv";
+// ffCodec.PreExecute(args);
+// ffCodec.Execute(args);
+//
+// FfmpegBuilderExecutor ffExecutor = new();
+// ffExecutor.PreExecute(args);
+// int result = ffExecutor.Execute(args);
+// string log = logger.ToString();
+// Assert.AreEqual(-1, result);
+//
+// }
+//
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_AutoUseHardware()
+// {
+// var logger = new TestLogger();
+// string ffmpeg = FfmpegPath;
+// var vi = new VideoInfoHelper(ffmpeg, logger);
+// var vii = vi.Read(VideoMkv);
+// var args = new NodeParameters(VideoMkv, logger, false, string.Empty, null);
+// args.GetToolPathActual = (string tool) => ffmpeg;
+// args.TempPath = TempPath;
+// args.Parameters.Add("VideoInfo", vii);
+//
+// FfmpegBuilderStart ffStart = new();
+// ffStart.PreExecute(args);
+// Assert.AreEqual(1, ffStart.Execute(args));
+//
+// FfmpegBuilderVideoCodec ffCodec = new();
+// ffCodec.VideoCodec = "h265";
+// ffCodec.VideoCodecParameters = "h265";
+// ffCodec.PreExecute(args);
+// ffCodec.Execute(args);
+//
+// FfmpegBuilderExecutor ffExecutor = new();
+// ffExecutor.PreExecute(args);
+// int result = ffExecutor.Execute(args);
+// string log = logger.ToString();
+// Assert.AreEqual(1, result);
+// }
+//
+//
+//
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_QSV()
+// {
+// var logger = new TestLogger();
+// string ffmpeg = FfmpegPath;
+// var vi = new VideoInfoHelper(ffmpeg, logger);
+// var vii = vi.Read(VideoMkv);
+// var args = new NodeParameters(VideoMkv, logger, false, string.Empty, null);
+// args.GetToolPathActual = (string tool) => ffmpeg;
+// args.TempPath = TempPath;
+// args.Parameters.Add("VideoInfo", vii);
+//
+// FfmpegBuilderStart ffStart = new();
+// ffStart.PreExecute(args);
+// Assert.AreEqual(1, ffStart.Execute(args));
+//
+// FfmpegBuilderVideoEncode ffEncode = new();
+// ffEncode.Quality = 28;
+// ffEncode.Speed = "ultrafast";
+// ffEncode.Encoder = "Intel QSV";
+// ffEncode.Codec = "h265";
+// ffEncode.PreExecute(args);
+// ffEncode.Execute(args);
+//
+// FfmpegBuilderExecutor ffExecutor = new();
+// ffExecutor.PreExecute(args);
+// int result = ffExecutor.Execute(args);
+// string log = logger.ToString();
+// Assert.AreEqual(1, result);
+// }
+//
+//
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_Av1()
+// {
+// var logger = new TestLogger();
+// string ffmpeg = FfmpegPath;
+// var vi = new VideoInfoHelper(ffmpeg, logger);
+// var vii = vi.Read(VideoMkv);
+// var args = new NodeParameters(VideoMkv, logger, false, string.Empty, new LocalFileService());
+// args.GetToolPathActual = (string tool) => ffmpeg;
+// args.TempPath = TempPath;
+// args.Parameters.Add("VideoInfo", vii);
+//
+// FfmpegBuilderStart ffStart = new();
+// ffStart.PreExecute(args);
+// Assert.AreEqual(1, ffStart.Execute(args));
+//
+// FfmpegBuilderVideoEncode ffEncode = new();
+// ffEncode.Quality = 28;
+// ffEncode.Speed = "veryslow";
+// //ffEncode.Encoder = "Nvid;
+// ffEncode.Codec = "av1 10BIT";
+// ffEncode.PreExecute(args);
+// ffEncode.Execute(args);
+//
+// FfmpegBuilderExecutor ffExecutor = new();
+// ffExecutor.PreExecute(args);
+// int result = ffExecutor.Execute(args);
+// string log = logger.ToString();
+// Assert.AreEqual(1, result);
+// }
+//
+//
+//
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_Watermark()
+// {
+// var logger = new TestLogger();
+// string ffmpeg = FfmpegPath;
+// var vi = new VideoInfoHelper(ffmpeg, logger);
+// var vii = vi.Read(VideoMkv);
+// var args = new NodeParameters(VideoMkv, logger, false, string.Empty, new LocalFileService());
+// args.GetToolPathActual = (string tool) => ffmpeg;
+// args.TempPath = TempPath;
+// args.Parameters.Add("VideoInfo", vii);
+//
+// FfmpegBuilderStart ffStart = new();
+// ffStart.PreExecute(args);
+// Assert.AreEqual(1, ffStart.Execute(args));
+//
+// FfmpegBuilderVideoEncode ffEncode = new();
+// ffEncode.Quality = 28;
+// ffEncode.Encoder = "CPU";
+// ffEncode.Speed = "fast";
+// ffEncode.Codec = "av1";
+// ffEncode.PreExecute(args);
+// ffEncode.Execute(args);
+//
+// FFmpegBuilderWatermark ffWatermark = new();
+// ffWatermark.Image = "/home/john/Videos/watermark.png";
+// ffWatermark.Position = FFmpegBuilderWatermark.WatermarkPosition.BottomRight;
+// ffWatermark.Height = new();
+// ffWatermark.Width = new() { Value = 5, Percentage = true};
+// ffWatermark.XPos = new() { Value = 10, Percentage = true };
+// ffWatermark.YPos = new() { Value = 5, Percentage = true };
+// ffWatermark.Opacity = 50;
+//
+// ffWatermark.PreExecute(args);
+// ffWatermark.Execute(args);
+//
+// FfmpegBuilderExecutor ffExecutor = new();
+// ffExecutor.HardwareDecoding = false;
+// ffExecutor.PreExecute(args);
+// int result = ffExecutor.Execute(args);
+// string log = logger.ToString();
+// TestContext.WriteLine(log);
+// Assert.AreEqual(1, result);
+// }
+//
+// [TestMethod]
+// public void FfmpegBuilder_VideoEncode_WebVTT()
+// {
+// string ffmpeg = FfmpegPath;
+// var vi = new VideoInfoHelper(ffmpeg, Logger);
+// var vii = vi.Read(TestFile_Webvtt);
+// var args = new NodeParameters(TestFile_Webvtt, Logger, false, string.Empty, new LocalFileService());
+// args.GetToolPathActual = (string tool) => ffmpeg;
+// args.TempPath = TempPath;
+// args.Parameters.Add("VideoInfo", vii.Value);
+//
+// FfmpegBuilderStart ffStart = new();
+// ffStart.PreExecute(args);
+// Assert.AreEqual(1, ffStart.Execute(args));
+//
+// FfmpegBuilderVideoEncode ffEncode = new();
+// ffEncode.Quality = 28;
+// ffEncode.Speed = "fast";
+// //ffEncode.Encoder = "CPU";
+// ffEncode.Codec = "h265";
+// ffEncode.PreExecute(args);
+// ffEncode.Execute(args);
+//
+// FfmpegBuilderSubtitleFormatRemover remover = new();
+// remover.SubtitlesToRemove = ["webvtt"];
+// remover.PreExecute(args);
+// remover.Execute(args);
+//
+// // FFmpegBuilderDurationStart ds = new();
+// // ds.Start = new TimeSpan(0, 0, 0);
+// // ds.Duration = new TimeSpan(0, 1, 0);
+// // ds.PreExecute(args);
+// // ds.Execute(args);
+//
+// FfmpegBuilderExecutor ffExecutor = new();
+// ffExecutor.Strictness = "experimental";
+// ffExecutor.PreExecute(args);
+// int result = ffExecutor.Execute(args);
+// Assert.AreEqual(1, result);
+// }
+// }
+//
+// #endif
\ No newline at end of file
diff --git a/VideoNodes/Tests/Resources/audio.mp3 b/VideoNodes/Tests/Resources/audio.mp3
new file mode 100644
index 00000000..1d00a67f
Binary files /dev/null and b/VideoNodes/Tests/Resources/audio.mp3 differ
diff --git a/VideoNodes/Tests/Resources/corrupt.mkv b/VideoNodes/Tests/Resources/corrupt.mkv
new file mode 100644
index 00000000..d929fe58
Binary files /dev/null and b/VideoNodes/Tests/Resources/corrupt.mkv differ
diff --git a/VideoNodes/Tests/SubtitleExtractorTests.cs b/VideoNodes/Tests/SubtitleExtractorTests.cs
index 8af928b0..00beb6e3 100644
--- a/VideoNodes/Tests/SubtitleExtractorTests.cs
+++ b/VideoNodes/Tests/SubtitleExtractorTests.cs
@@ -8,82 +8,28 @@ using VideoFile = FileFlows.VideoNodes.VideoFile;
namespace VideoNodes.Tests;
[TestClass]
-public class SubtitleExtractorTests: TestBase
+public class SubtitleExtractorTests: VideoTestBase
{
[TestMethod]
public void SubtitleExtractor_Extension_Test()
{
- string file = TestFile_BasicMkv;
- var vi = new VideoInfoHelper(FfmpegPath, new TestLogger());
- var vii = vi.Read(file);
-
- foreach (string ext in new[] { String.Empty, ".srt", ".sup" })
- {
- SubtitleExtractor node = new();
- node.OutputFile = Path.Combine(TempPath, "subtitle.en" + ext);
- node.Language = "eng";
-
- var args = new NodeParameters(file, new TestLogger(), false, string.Empty, null);;
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
- Assert.AreEqual(1, new VideoFile().Execute(args));
-
- int output = node.Execute(args);
-
- Assert.AreEqual(1, output);
- }
- }
-
- [TestMethod]
- public void SubtitleExtractor_Pgs_Test()
- {
- string file = TestFile_Pgs;
- var vi = new VideoInfoHelper(FfmpegPath, new TestLogger());
- var vii = vi.Read(file);
-
- foreach (string ext in new[] { string.Empty, ".srt", ".sup" })
- {
- SubtitleExtractor node = new();
- node.ForcedOnly = true;
- node.OutputFile = Path.Combine(TempPath, "subtitle.en" + ext);
- node.Language = "eng";
-
- var args = new NodeParameters(file, new TestLogger(), false, string.Empty, null);;
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
- var vf = new VideoFile();
- vf.PreExecute(args);
- Assert.AreEqual(1, vf.Execute(args));
-
- int output = node.Execute(args);
-
- Assert.AreEqual(1, output);
- }
- }
-
-
- [TestMethod]
- public void Webvtt_Extract()
- {
- string file = TestFile_Webvtt;
-
- var args = new NodeParameters(file, new TestLogger(), false, string.Empty, new LocalFileService());;
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
+ var args = GetVideoNodeParameters(VideoMkv);
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
+
+ foreach (string ext in new[] { string.Empty, ".srt", ".sup" })
+ {
+ Logger.ILog("Extracting Extension: " + ext);
+ SubtitleExtractor element = new();
+ element.OutputFile = Path.Combine(TempPath, "subtitle.en" + ext);
+ element.Language = "eng";
- SubtitleExtractor extractor = new();
- extractor.OutputFile = Path.Combine(TempPath, "subtitle.srt");
- extractor.ExtractAll = true;
- extractor.PreExecute(args);
- int output = extractor.Execute(args);
+ element.PreExecute(args);
+ int output = element.Execute(args);
- Assert.AreEqual(1, output);
+ Assert.AreEqual(1, output);
+ }
}
}
diff --git a/VideoNodes/Tests/TestLogger.cs b/VideoNodes/Tests/TestLogger.cs
deleted file mode 100644
index f599203c..00000000
--- a/VideoNodes/Tests/TestLogger.cs
+++ /dev/null
@@ -1,80 +0,0 @@
-#if(DEBUG)
-
-namespace VideoNodes.Tests;
-
-///
-/// A logger for tests that stores the logs in memory
-///
-public class TestLogger : ILogger
-{
- private readonly List Messages = new();
-
- ///
- /// Writes an information log message
- ///
- /// the log parameters
- public void ILog(params object[] args)
- => Log(LogType.Info, args);
-
- ///
- /// Writes an debug log message
- ///
- /// the log parameters
- public void DLog(params object[] args)
- => Log(LogType.Debug, args);
-
- ///
- /// Writes an warning log message
- ///
- /// the log parameters
- public void WLog(params object[] args)
- => Log(LogType.Warning, args);
-
- ///
- /// Writes an error log message
- ///
- /// the log parameters
- public void ELog(params object[] args)
- => Log(LogType.Error, args);
-
- ///
- /// Gets the tail of the log
- ///
- /// the number of messages to get
- public string GetTail(int length = 50)
- {
- if (Messages.Count <= length)
- return string.Join(Environment.NewLine, Messages);
- return string.Join(Environment.NewLine, Messages.TakeLast(50));
- }
-
- ///
- /// Logs a message
- ///
- /// the type of log to record
- /// the arguments of the message
- private void Log(LogType type, params object[] args)
- {
- string message = type + " -> " + string.Join(", ", args.Select(x =>
- x == null ? "null" :
- x.GetType().IsPrimitive ? x.ToString() :
- x is string ? x.ToString() :
- System.Text.Json.JsonSerializer.Serialize(x)));
- Writer?.Invoke(message);
- Messages.Add(message);
- }
-
- ///
- /// Gets or sets an optional writer
- ///
- public Action Writer { get; set; }
-
- ///
- /// Returns the entire log as a string
- ///
- /// the entire log
- public override string ToString()
- => string.Join(Environment.NewLine, Messages);
-}
-
-#endif
\ No newline at end of file
diff --git a/VideoNodes/Tests/VaapiAdjustmentTests.cs b/VideoNodes/Tests/VaapiAdjustmentTests.cs
index 42d506b2..191d139d 100644
--- a/VideoNodes/Tests/VaapiAdjustmentTests.cs
+++ b/VideoNodes/Tests/VaapiAdjustmentTests.cs
@@ -1,129 +1,133 @@
-#if(DEBUG)
-
-using FileFlows.VideoNodes.FfmpegBuilderNodes.EncoderAdjustments;
-using FileFlows.VideoNodes.FfmpegBuilderNodes.Models;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-
-namespace VideoNodes.Tests;
-
-[TestClass]
-public class VaapiAdjustmentTests: TestBase
-{
- [TestMethod]
- public void Vaapi_CropAndScale()
- {
- var inputParameters = new List
- {
- "-fflags",
- "+genpts",
- "-probesize",
- "5M",
- "-i",
- "/media/Encodes/None Scene Release/Masters.of.the.Air.S01E01.Part.One.1080p.mkv",
- "-y",
- "-movflags",
- "+faststart",
- "-map_metadata",
- "-1",
- "-map",
- "0:v:0",
- "-c:v:0",
- "h264_vaapi",
- "-qp",
- "23",
- "-preset",
- "slower",
- "-spatial-aq",
- "1",
- "-filter:v:0",
- "crop=1904:800:8:2, scale=1280:-2:flags=lanczos",
- "-metadata:s:v:0",
- "title=",
- "-map",
- "0:a:0",
- "-c:a:0",
- "aac",
- "-ac:a:0",
- "2",
- "-b:a:0",
- "160k",
- "-metadata:s:a:0",
- "BPS=160000",
- "-ar:a:0",
- "48000",
- "-filter:a:0",
- "loudnorm=print_format=summary:linear=true:I=-24:LRA=7:TP=-2.0:measured_I=-18.14:measured_LRA=5.20:measured_tp=-4.31:measured_thresh=-28.14:offset=0.56, volume=.7",
- "-metadata:s:a:0",
- "title=Stereo",
- "-metadata:s:a:0",
- "language=eng"
- };
-
- var logger = new TestLogger();
- var updated = new VaapiAdjustments().Run(logger, null!, inputParameters);
- Assert.AreEqual("-vf", updated[9]);
- Assert.AreEqual("format=nv12,hwupload,scale_vaapi=1280:-2", updated[10]);
- int index = updated.FindIndex(x => x.StartsWith("-filter:v"));
- Assert.IsTrue(index > 0);
- Assert.AreEqual("crop=1904:800:8:2", updated[index + 1]);
- }
-
-
- [TestMethod]
- public void Vaapi_Scale()
- {
- var inputParameters = new List
- {
- "-fflags",
- "+genpts",
- "-probesize",
- "5M",
- "-i",
- "/media/Encodes/None Scene Release/Masters.of.the.Air.S01E01.Part.One.1080p.mkv",
- "-y",
- "-movflags",
- "+faststart",
- "-map_metadata",
- "-1",
- "-map",
- "0:v:0",
- "-c:v:0",
- "h264_vaapi",
- "-qp",
- "23",
- "-preset",
- "slower",
- "-spatial-aq",
- "1",
- "-filter:v:0",
- "scale=1280:-2:flags=lanczos",
- "-metadata:s:v:0",
- "title=",
- "-map",
- "0:a:0",
- "-c:a:0",
- "aac",
- "-ac:a:0",
- "2",
- "-b:a:0",
- "160k",
- "-metadata:s:a:0",
- "BPS=160000",
- "-ar:a:0",
- "48000",
- "-filter:a:0",
- "loudnorm=print_format=summary:linear=true:I=-24:LRA=7:TP=-2.0:measured_I=-18.14:measured_LRA=5.20:measured_tp=-4.31:measured_thresh=-28.14:offset=0.56, volume=.7",
- "-metadata:s:a:0",
- "title=Stereo",
- "-metadata:s:a:0",
- "language=eng"
- };
-
- var logger = new TestLogger();
- var updated = new VaapiAdjustments().Run(logger, null!, inputParameters);
- Assert.AreEqual("-vf", updated[9]);
- Assert.AreEqual("format=nv12,hwupload,scale_vaapi=1280:-2", updated[10]);
- Assert.IsFalse(updated.Any(x => x.StartsWith("-filter:v")));
- }
-}
-#endif
\ No newline at end of file
+// #if(DEBUG)
+//
+// using FileFlows.VideoNodes.FfmpegBuilderNodes.EncoderAdjustments;
+// using FileFlows.VideoNodes.FfmpegBuilderNodes.Models;
+// using Microsoft.VisualStudio.TestTools.UnitTesting;
+//
+// namespace VideoNodes.Tests;
+//
+// [TestClass]
+// public class VaapiAdjustmentTests: VideoTestBase
+// {
+// [TestMethod]
+// public void Vaapi_CropAndScale()
+// {
+// var inputParameters = new List
+// {
+// "-fflags",
+// "+genpts",
+// "-probesize",
+// "5M",
+// "-i",
+// "/media/test.mkv",
+// "-y",
+// "-movflags",
+// "+faststart",
+// "-map_metadata",
+// "-1",
+// "-map",
+// "0:v:0",
+// "-c:v:0",
+// "h264_vaapi",
+// "-qp",
+// "23",
+// "-preset",
+// "slower",
+// "-spatial-aq",
+// "1",
+// "-filter:v:0",
+// "crop=1904:800:8:2, scale=1280:-2:flags=lanczos",
+// "-metadata:s:v:0",
+// "title=",
+// "-map",
+// "0:a:0",
+// "-c:a:0",
+// "aac",
+// "-ac:a:0",
+// "2",
+// "-b:a:0",
+// "160k",
+// "-metadata:s:a:0",
+// "BPS=160000",
+// "-ar:a:0",
+// "48000",
+// "-filter:a:0",
+// "loudnorm=print_format=summary:linear=true:I=-24:LRA=7:TP=-2.0:measured_I=-18.14:measured_LRA=5.20:measured_tp=-4.31:measured_thresh=-28.14:offset=0.56, volume=.7",
+// "-metadata:s:a:0",
+// "title=Stereo",
+// "-metadata:s:a:0",
+// "language=eng"
+// };
+//
+// var updated = new VaapiAdjustments().Run(Logger, null!, inputParameters);
+// for (int i = 0; i < updated.Count; i++)
+// Logger.ILog($"Updated[{i:00}] = {updated[i]}");
+//
+// Assert.AreEqual("-vf", updated[9]);
+// Assert.AreEqual("format=nv12,hwupload,scale_vaapi=1280:-2", updated[10]);
+// int index = updated.FindIndex(x => x.StartsWith("-filter:v"));
+// Assert.IsTrue(index > 0);
+// Assert.AreEqual("crop=1904:800:8:2", updated[index + 1]);
+// }
+//
+//
+// [TestMethod]
+// public void Vaapi_Scale()
+// {
+// var inputParameters = new List
+// {
+// "-fflags",
+// "+genpts",
+// "-probesize",
+// "5M",
+// "-i",
+// "/media/test.mkv",
+// "-y",
+// "-movflags",
+// "+faststart",
+// "-map_metadata",
+// "-1",
+// "-map",
+// "0:v:0",
+// "-c:v:0",
+// "h264_vaapi",
+// "-qp",
+// "23",
+// "-preset",
+// "slower",
+// "-spatial-aq",
+// "1",
+// "-filter:v:0",
+// "scale=1280:-2:flags=lanczos",
+// "-metadata:s:v:0",
+// "title=",
+// "-map",
+// "0:a:0",
+// "-c:a:0",
+// "aac",
+// "-ac:a:0",
+// "2",
+// "-b:a:0",
+// "160k",
+// "-metadata:s:a:0",
+// "BPS=160000",
+// "-ar:a:0",
+// "48000",
+// "-filter:a:0",
+// "loudnorm=print_format=summary:linear=true:I=-24:LRA=7:TP=-2.0:measured_I=-18.14:measured_LRA=5.20:measured_tp=-4.31:measured_thresh=-28.14:offset=0.56, volume=.7",
+// "-metadata:s:a:0",
+// "title=Stereo",
+// "-metadata:s:a:0",
+// "language=eng"
+// };
+//
+// var updated = new VaapiAdjustments().Run(Logger, null!, inputParameters);
+// for (int i = 0; i < updated.Count; i++)
+// Logger.ILog($"Updated[{i:00}] = {updated[i]}");
+//
+// Assert.AreEqual("-vf", updated[9]);
+// Assert.AreEqual("format=nv12,hwupload,scale_vaapi=1280:-2", updated[10]);
+// Assert.IsFalse(updated.Any(x => x.StartsWith("-filter:v")));
+// }
+// }
+// #endif
\ No newline at end of file
diff --git a/VideoNodes/Tests/VideoBitrateGreaterThanTests.cs b/VideoNodes/Tests/VideoBitrateGreaterThanTests.cs
index 4daf1f54..f6802e86 100644
--- a/VideoNodes/Tests/VideoBitrateGreaterThanTests.cs
+++ b/VideoNodes/Tests/VideoBitrateGreaterThanTests.cs
@@ -6,13 +6,12 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace VideoNodes.Tests;
[TestClass]
-public class VideoBitrateGreaterThanTests : TestBase
+public class VideoBitrateGreaterThanTests : VideoTestBase
{
[TestMethod]
public void IsGreaterThan_NoAudio_NoVideoBitrate()
{
- var logger = new TestLogger();
- var args = new NodeParameters(logger)
+ var args = new NodeParameters(Logger)
{
Parameters = new()
{
@@ -38,8 +37,7 @@ public class VideoBitrateGreaterThanTests : TestBase
[TestMethod]
public void IsNotGreaterThan_NoAudio_NoVideoBitrate()
{
- var logger = new TestLogger();
- var args = new NodeParameters(logger)
+ var args = new NodeParameters(Logger)
{
Parameters = new()
{
@@ -65,8 +63,7 @@ public class VideoBitrateGreaterThanTests : TestBase
[TestMethod]
public void IsNotGreaterThan_WithAudio_NoVideoBitrate()
{
- var logger = new TestLogger();
- var args = new NodeParameters(logger)
+ var args = new NodeParameters(Logger)
{
Parameters = new()
{
@@ -90,20 +87,18 @@ public class VideoBitrateGreaterThanTests : TestBase
}
};
var estimated = (5001 * 1000) - (2000) - (5001 * 0.05);
- logger.ILog($"Test Estimated Bitrate: {estimated} BPS / {estimated / 1000} KBps");
+ Logger.ILog($"Test Estimated Bitrate: {estimated} BPS / {estimated / 1000} KBps");
var element = new VideoBitrateGreaterThan();
element.Bitrate = (int)(estimated / 1000f) + 1;
var result = element.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(2, result);
}
[TestMethod]
public void IsGreaterThan_WithAudio_NoVideoBitrate()
{
- var logger = new TestLogger();
- var args = new NodeParameters(logger)
+ var args = new NodeParameters(Logger)
{
Parameters = new()
{
@@ -127,12 +122,11 @@ public class VideoBitrateGreaterThanTests : TestBase
}
};
var estimated = Math.Round((5001 * 1000) - (2000) - (5001 * 0.05));
- logger.ILog($"Test Estimated Bitrate: {estimated} BPS / {estimated / 1000} KBps");
+ Logger.ILog($"Test Estimated Bitrate: {estimated} BPS / {estimated / 1000} KBps");
var element = new VideoBitrateGreaterThan();
element.Bitrate = (int)Math.Round(estimated / 1000f) - 1;
var result = element.Execute(args);
- var log = logger.ToString();
Assert.AreEqual(1, result);
}
@@ -140,10 +134,7 @@ public class VideoBitrateGreaterThanTests : TestBase
[TestMethod]
public void LogTests()
{
- var logger = new TestLogger();
-
- var output = VideoBitrateGreaterThan.CheckBitrate(logger, 120144000, 15000);
- string log = logger.ToString();
+ var output = VideoBitrateGreaterThan.CheckBitrate(Logger, 120144000, 15000);
Assert.AreEqual(1, output);
}
diff --git a/VideoNodes/Tests/VideoHasErrorsTests.cs b/VideoNodes/Tests/VideoHasErrorsTests.cs
index a25c28fa..ead56e2d 100644
--- a/VideoNodes/Tests/VideoHasErrorsTests.cs
+++ b/VideoNodes/Tests/VideoHasErrorsTests.cs
@@ -6,20 +6,12 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace VideoNodes.Tests;
[TestClass]
-public class VideoHasErrorsTests : TestBase
+public class VideoHasErrorsTests : VideoTestBase
{
[TestMethod]
public void VideoHasErrors_Video()
{
- string file = TestFile_Corrupt;
- var args = new NodeParameters(file, Logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) =>
- {
- if(tool.ToLowerInvariant() == "ffmpeg") return FfmpegPath;
- if(tool.ToLowerInvariant() == "ffprobe") return FfprobePath;
- return null;
- };
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters(VideoCorrupt);
VideoFile vf = new();
vf.PreExecute(args);
diff --git a/VideoNodes/Tests/VideoHasStreamTests.cs b/VideoNodes/Tests/VideoHasStreamTests.cs
index 0664428a..2aa4389a 100644
--- a/VideoNodes/Tests/VideoHasStreamTests.cs
+++ b/VideoNodes/Tests/VideoHasStreamTests.cs
@@ -2,32 +2,28 @@
using FileFlows.VideoNodes;
using Microsoft.VisualStudio.TestTools.UnitTesting;
+using PluginTestLibrary;
namespace VideoNodes.Tests;
[TestClass]
-public class VideoHasStreamTests : TestBase
+public class VideoHasStreamTests : VideoTestBase
{
[TestMethod]
public void VideoHasStream_Video_H264()
{
- string file = TestFile_BasicMkv;
- var vi = new VideoInfoHelper(FfmpegPath, new TestLogger());
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Codec = "h264";
- node.Stream = "Video";
-
- var args = new NodeParameters(file, new TestLogger(), false, string.Empty, null);;
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters();
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
- int output = node.Execute(args);
+ VideoHasStream element = new();
+ element.Codec = "h264";
+ element.Stream = "Video";
+ element.PreExecute(args);
+
+ int output = element.Execute(args);
Assert.AreEqual(1, output);
}
@@ -35,23 +31,18 @@ public class VideoHasStreamTests : TestBase
[TestMethod]
public void VideoHasStream_Video_H265()
{
- string file = TestFile_120_mbps_4k_uhd_hevc_10bit;
- var vi = new VideoInfoHelper(FfmpegPath, new TestLogger());
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Codec = "h265";
- node.Stream = "Video";
-
- var args = new NodeParameters(file, new TestLogger(), false, string.Empty, null);;
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters(VideoMkvHevc);
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
- int output = node.Execute(args);
+ VideoHasStream element = new();
+ element.Codec = "h265";
+ element.Stream = "Video";
+ element.PreExecute(args);
+
+ int output = element.Execute(args);
Assert.AreEqual(1, output);
}
@@ -59,48 +50,38 @@ public class VideoHasStreamTests : TestBase
[TestMethod]
public void VideoHasStream_Video_Hevc()
{
- string file = TestFile_120_mbps_4k_uhd_hevc_10bit;
- var vi = new VideoInfoHelper(FfmpegPath, new TestLogger());
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Codec = "h265";
- node.Stream = "Video";
-
- var args = new NodeParameters(file, new TestLogger(), false, string.Empty, null);;
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters(VideoMkvHevc);
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
- int output = node.Execute(args);
+ VideoHasStream element = new();
+ element.Codec = "hevc";
+ element.Stream = "Video";
+ element.PreExecute(args);
+
+ int output = element.Execute(args);
Assert.AreEqual(1, output);
}
[TestMethod]
- public void VideoHasStream_Audio_Vorbis()
+ public void VideoHasStream_Audio_Aac()
{
- string file = TestFile_BasicMkv;
- var vi = new VideoInfoHelper(FfmpegPath, new TestLogger());
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Codec = "vorbis";
- node.Stream = "Audio";
-
- var args = new NodeParameters(file, new TestLogger(), false, string.Empty, null);;
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters();
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
- int output = node.Execute(args);
+ VideoHasStream element = new();
+ element.Codec = "aac";
+ element.Stream = "Audio";
+ element.PreExecute(args);
+
+ int output = element.Execute(args);
Assert.AreEqual(1, output);
}
@@ -110,23 +91,18 @@ public class VideoHasStreamTests : TestBase
[TestMethod]
public void VideoHasStream_Audio_Channels_Pass()
{
- string file = TestFile_5dot1;
- var vi = new VideoInfoHelper(FfmpegPath, Logger);
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Channels = "=5.1";
- node.Stream = "Audio";
-
- var args = new NodeParameters(file, Logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters();
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
- int output = node.Execute(args);
+ VideoHasStream element = new();
+ element.Channels = "=2.0";
+ element.Stream = "Audio";
+ element.PreExecute(args);
+
+ int output = element.Execute(args);
Assert.AreEqual(1, output);
}
@@ -135,74 +111,52 @@ public class VideoHasStreamTests : TestBase
[TestMethod]
public void VideoHasStream_Audio_Channels_GreaterOrEqual()
{
- string file = TestFile_5dot1;
- var vi = new VideoInfoHelper(FfmpegPath, Logger);
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Channels = ">=4.5";
- node.Stream = "Audio";
-
- var args = new NodeParameters(file, Logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters();
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
- int output = node.Execute(args);
-
- Assert.AreEqual(1, output);
+ VideoHasStream element = new();
+ element.Channels = ">=4.5";
+ element.Stream = "Audio";
+ element.PreExecute(args);
}
[TestMethod]
public void VideoHasStream_Audio_Channels_Between()
{
- string file = TestFile_5dot1;
- var vi = new VideoInfoHelper(FfmpegPath, Logger);
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Channels = "5<>5.1";
- node.Stream = "Audio";
-
- var args = new NodeParameters(file, Logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters();
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
- int output = node.Execute(args);
-
- Assert.AreEqual(1, output);
+ VideoHasStream element = new();
+ element.Channels = "5<>5.1";
+ element.Stream = "Audio";
+ element.PreExecute(args);
}
[TestMethod]
public void VideoHasStream_Audio_Channels_NotBetween()
{
- string file = TestFile_5dot1;
- var vi = new VideoInfoHelper(FfmpegPath, Logger);
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Channels = "2><3";
- node.Stream = "Audio";
-
- var args = new NodeParameters(file, Logger, false, string.Empty, new LocalFileService());
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters();
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
- int output = node.Execute(args);
+ VideoHasStream element = new();
+ element.Channels = "2><3";
+ element.Stream = "Audio";
+ element.PreExecute(args);
+
+ int output = element.Execute(args);
Assert.AreEqual(1, output);
}
+
[TestMethod]
public void VideoHasStream_Audio_Channels_Pass_61()
{
@@ -278,84 +232,49 @@ public class VideoHasStreamTests : TestBase
var args = new NodeParameters(null, Logger, false, string.Empty, new LocalFileService());
args.Parameters["VideoInfo"] = vi;
- args.GetToolPathActual = (string tool) => FfmpegPath;
+ args.GetToolPathActual = (string tool) => FFmpeg;
args.TempPath = TempPath;
int output = node.Execute(args);
Assert.AreEqual(1, output);
}
+
[TestMethod]
public void VideoHasStream_Audio_Channels_Fail()
{
- string file = TestFile_BasicMkv;
- var vi = new VideoInfoHelper(FfmpegPath, new TestLogger());
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Channels = "=2";
- node.Stream = "Audio";
-
- var args = new NodeParameters(file, new TestLogger(), false, string.Empty, null);;
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters();
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
- int output = node.Execute(args);
+ VideoHasStream element = new();
+ element.Channels = "=5.1";
+ element.Stream = "Audio";
+ element.PreExecute(args);
+
+ int output = element.Execute(args);
Assert.AreEqual(2, output);
}
- [TestMethod]
- public void VideoHasStream_Video_Tag()
- {
- string file = TestFile_Tag;
- var vi = new VideoInfoHelper(FfmpegPath, new TestLogger());
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Codec = "h264";
- node.Stream = "Video";
-
- var args = new NodeParameters(file, new TestLogger(), false, string.Empty, null);;
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
-
- var vf = new VideoFile();
- vf.PreExecute(args);
- Assert.AreEqual(1, vf.Execute(args));
-
- int output = node.Execute(args);
-
- Assert.AreEqual(1, output);
- }
-
[TestMethod]
public void VideoHasStream_Audio_Lang_Pass()
{
- string file = TestFile_MovText_Mp4;
- var vi = new VideoInfoHelper(FfmpegPath, new TestLogger());
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Language = "ita";
- node.Stream = "Audio";
-
- var args = new NodeParameters(file, new TestLogger(), false, string.Empty, null);;
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters();
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
- node.PreExecute(args);
- int output = node.Execute(args);
+ VideoHasStream element = new();
+ element.Language = "eng";
+ element.Stream = "Audio";
+ element.PreExecute(args);
+ int output = element.Execute(args);
Assert.AreEqual(1, output);
}
@@ -363,24 +282,17 @@ public class VideoHasStreamTests : TestBase
[TestMethod]
public void VideoHasStream_Audio_Lang_Fail()
{
- string file = TestFile_MovText_Mp4;
- var vi = new VideoInfoHelper(FfmpegPath, new TestLogger());
- var vii = vi.Read(file);
-
- VideoHasStream node = new();
- node.Language = "mao";
- node.Stream = "Audio";
-
- var args = new NodeParameters(file, new TestLogger(), false, string.Empty, null);;
- args.GetToolPathActual = (string tool) => FfmpegPath;
- args.TempPath = TempPath;
+ var args = GetVideoNodeParameters();
var vf = new VideoFile();
vf.PreExecute(args);
Assert.AreEqual(1, vf.Execute(args));
- node.PreExecute(args);
- int output = node.Execute(args);
+ VideoHasStream element = new();
+ element.Channels = "mao";
+ element.Stream = "Audio";
+ element.PreExecute(args);
+ int output = element.Execute(args);
Assert.AreEqual(2, output);
}
diff --git a/VideoNodes/Tests/VideoInfoHelperTests.cs b/VideoNodes/Tests/VideoInfoHelperTests.cs
index 95b72220..818c96ab 100644
--- a/VideoNodes/Tests/VideoInfoHelperTests.cs
+++ b/VideoNodes/Tests/VideoInfoHelperTests.cs
@@ -1,915 +1,883 @@
#if(DEBUG)
-namespace VideoNodes.Tests
+using FileFlows.VideoNodes;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace VideoNodes.Tests;
+
+[TestClass]
+public class VideoInfoHelperTests : VideoTestBase
{
- using FileFlows.VideoNodes;
- using Microsoft.VisualStudio.TestTools.UnitTesting;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
+
+ // [TestMethod]
+ // public void ComskipTest()
+ // {
+ //
+ // var vi = new VideoInfoHelper(@"C:\utils\ffmpeg\ffmpeg.exe", new TestLogger());
+ // var vii = vi.Read(file);
+ // args.SetParameter("VideoInfo", vii);
+ // //args.Process = new FileFlows.Plugin.ProcessHelper(args.Logger);
+ //
+ // var node = new ComskipRemoveAds();
+ // int output = node.Execute(args);
+ // Assert.AreEqual(1, output);
+ // }
- [TestClass]
- public class VideoInfoHelperTests
+
+
+
+ [TestMethod]
+ public void VideoInfoTest_Subtitle_Extractor()
+ {
+ var args = GetVideoNodeParameters();
+ var vf = new VideoFile();
+ vf.PreExecute(args);
+ vf.Execute(args);
+
+ SubtitleExtractor element = new();
+ element.PreExecute(args);
+ int output = element.Execute(args);
+
+ Assert.AreEqual(1, output);
+ }
+
+ [TestMethod]
+ public void VideoInfoTest_AC1()
+ {
+ string ffmpegOutput =
+ @"Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/media/Videos/Input3/input file.mp4':
+Metadata:
+major_brand : mp42
+minor_version : 512
+compatible_brands: mp42iso6
+creation_time : 2022-01-07T06:30:47.000000Z
+title : Episode title
+comment : Episode description
+Duration: 00:42:23.75, start: 0.000000, bitrate: 3174 kb/s
+Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 2528 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
+Metadata:
+ creation_time : 2022-01-07T06:30:47.000000Z
+ handler_name : VideoHandler
+Stream #0:1(deu): Audio: eac3 (ec-3 / 0x332D6365), 48000 Hz, 5.1(side), fltp, 640 kb/s (default)
+Metadata:
+ creation_time : 2022-01-07T06:30:47.000000Z
+ handler_name : SoundHandler
+Side data:
+ audio service type: main";
+ var vi = VideoInfoHelper.ParseOutput(null, ffmpegOutput);
+ Assert.AreEqual(1920, vi.VideoStreams[0].Width);
+ Assert.AreEqual(1080, vi.VideoStreams[0].Height);
+ Assert.AreEqual("nv12", vi.VideoStreams[0].PixelFormat);
+ }
+
+
+ [TestMethod]
+ public void VideoInfoTest_Chapters()
+ {
+ string ffmpegOutput =
+ @"[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 3 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
+Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
+[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 4 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
+Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
+Input #0, matroska,webm, from 'D:\downloads\sabnzbd\complete\movies\Cast.Away.2000.BluRay.1080p.REMUX.AVC.DTS-HD.MA.5.1-LEGi0N\b0e4afee2ced4ae3a3592b82ae335608.mkv':
+Metadata:
+encoder : libebml v1.4.2 + libmatroska v1.6.4
+creation_time : 2022-02-02T22:32:47.000000Z
+Duration: 02:23:46.66, start: 0.000000, bitrate: 38174 kb/s
+Chapters:
+Chapter #0:0: start 0.000000, end 110.819000
+ Metadata:
+ title : Chapter 01
+Chapter #0:1: start 110.819000, end 517.851000
+ Metadata:
+ title : Chapter 02
+Chapter #0:2: start 517.851000, end 743.326000
+ Metadata:
+ title : Chapter 03
+Chapter #0:3: start 743.326000, end 1061.269000
+ Metadata:
+ title : Chapter 04
+Chapter #0:4: start 1061.269000, end 1243.534000
+ Metadata:
+ title : Chapter 05
+Chapter #0:5: start 1243.534000, end 1360.234000
+ Metadata:
+ title : Chapter 06
+Chapter #0:6: start 1360.234000, end 1545.461000
+ Metadata:
+ title : Chapter 07
+Chapter #0:7: start 1545.461000, end 1871.620000
+ Metadata:
+ title : Chapter 08
+Chapter #0:8: start 1871.620000, end 2155.320000
+ Metadata:
+ title : Chapter 09
+Chapter #0:9: start 2155.320000, end 2375.623000
+ Metadata:
+ title : Chapter 10
+Chapter #0:10: start 2375.623000, end 2543.207000
+ Metadata:
+ title : Chapter 11
+Chapter #0:11: start 2543.207000, end 2794.208000
+ Metadata:
+ title : Chapter 12
+Chapter #0:12: start 2794.208000, end 3109.314000
+ Metadata:
+ title : Chapter 13
+Chapter #0:13: start 3109.314000, end 3389.052000
+ Metadata:
+ title : Chapter 14
+Chapter #0:14: start 3389.052000, end 3694.357000
+ Metadata:
+ title : Chapter 15
+Chapter #0:15: start 3694.357000, end 3873.119000
+ Metadata:
+ title : Chapter 16
+Chapter #0:16: start 3873.119000, end 4391.846000
+ Metadata:
+ title : Chapter 17
+Chapter #0:17: start 4391.846000, end 4657.736000
+ Metadata:
+ title : Chapter 18
+Chapter #0:18: start 4657.736000, end 4749.745000
+ Metadata:
+ title : Chapter 19
+Chapter #0:19: start 4749.745000, end 4842.045000
+ Metadata:
+ title : Chapter 20
+Chapter #0:20: start 4842.045000, end 5197.901000
+ Metadata:
+ title : Chapter 21
+Chapter #0:21: start 5197.901000, end 5640.176000
+ Metadata:
+ title : Chapter 22
+Chapter #0:22: start 5640.176000, end 6037.365000
+ Metadata:
+ title : Chapter 23
+Chapter #0:23: start 6037.365000, end 6321.398000
+ Metadata:
+ title : Chapter 24
+Chapter #0:24: start 6321.398000, end 6458.368000
+ Metadata:
+ title : Chapter 25
+Chapter #0:25: start 6458.368000, end 6810.470000
+ Metadata:
+ title : Chapter 26
+Chapter #0:26: start 6810.470000, end 6959.953000
+ Metadata:
+ title : Chapter 27
+Chapter #0:27: start 6959.953000, end 7499.575000
+ Metadata:
+ title : Chapter 28
+Chapter #0:28: start 7499.575000, end 7707.575000
+ Metadata:
+ title : Chapter 29
+Chapter #0:29: start 7707.575000, end 7941.725000
+ Metadata:
+ title : Chapter 30
+Chapter #0:30: start 7941.725000, end 8214.414000
+ Metadata:
+ title : Chapter 31
+Chapter #0:31: start 8214.414000, end 8626.656000
+ Metadata:
+ title : Chapter 32
+Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
+Metadata:
+ title : English
+ BPS : 33666894
+ DURATION : 02:23:46.618000000
+ NUMBER_OF_FRAMES: 206832
+ NUMBER_OF_BYTES : 36303929846
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), s32p (24 bit) (default)
+Metadata:
+ title : English
+ BPS : 4236399
+ DURATION : 02:23:46.624000000
+ NUMBER_OF_FRAMES: 808746
+ NUMBER_OF_BYTES : 4568228448
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:2(eng): Audio: ac3, 48000 Hz, stereo, fltp, 224 kb/s (comment)
+Metadata:
+ title : English commentary
+ BPS : 224000
+ DURATION : 02:23:46.656000000
+ NUMBER_OF_FRAMES: 269583
+ NUMBER_OF_BYTES : 241546368
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:3(eng): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ title : English (SDH)
+ BPS : 25275
+ DURATION : 02:14:32.439000000
+ NUMBER_OF_FRAMES: 1740
+ NUMBER_OF_BYTES : 25504616
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:4(spa): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ title : Spanish
+ BPS : 21585
+ DURATION : 02:12:54.884000000
+ NUMBER_OF_FRAMES: 1412
+ NUMBER_OF_BYTES : 21517695
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
+ var vi = VideoInfoHelper.ParseOutput(null, ffmpegOutput);
+ Assert.AreEqual(32, vi.Chapters?.Count ?? 0);
+ Assert.AreEqual("Chapter 32", vi.Chapters[31].Title);
+ Assert.AreEqual(TimeSpan.FromSeconds(8214.414000), vi.Chapters[31].Start);
+ Assert.AreEqual(TimeSpan.FromSeconds(8626.656000), vi.Chapters[31].End);
+ }
+
+
+
+ [TestMethod]
+ public void VideoInfoTest_Chapters_NoStart()
+ {
+ string ffmpegOutput =
+ @"[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 3 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
+Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
+[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 4 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
+Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
+Input #0, matroska,webm, from 'D:\downloads\sabnzbd\complete\movies\Cast.Away.2000.BluRay.1080p.REMUX.AVC.DTS-HD.MA.5.1-LEGi0N\b0e4afee2ced4ae3a3592b82ae335608.mkv':
+Metadata:
+encoder : libebml v1.4.2 + libmatroska v1.6.4
+creation_time : 2022-02-02T22:32:47.000000Z
+Duration: 02:23:46.66, start: 0.000000, bitrate: 38174 kb/s
+Chapters:
+Chapter #0:0: end 110.819000
+ Metadata:
+ title : Chapter 01
+Chapter #0:1: start 110.819000, end 517.851000
+ Metadata:
+ title : Chapter 02
+Chapter #0:2: start 517.851000, end 743.326000
+ Metadata:
+ title : Chapter 03
+Chapter #0:3: start 743.326000, end 1061.269000
+ Metadata:
+ title : Chapter 04
+Chapter #0:4: start 1061.269000, end 1243.534000
+ Metadata:
+ title : Chapter 05
+Chapter #0:5: start 1243.534000, end 1360.234000
+ Metadata:
+ title : Chapter 06
+Chapter #0:6: start 1360.234000, end 1545.461000
+ Metadata:
+ title : Chapter 07
+Chapter #0:7: start 1545.461000, end 1871.620000
+ Metadata:
+ title : Chapter 08
+Chapter #0:8: start 1871.620000, end 2155.320000
+ Metadata:
+ title : Chapter 09
+Chapter #0:9: start 2155.320000, end 2375.623000
+ Metadata:
+ title : Chapter 10
+Chapter #0:10: start 2375.623000, end 2543.207000
+ Metadata:
+ title : Chapter 11
+Chapter #0:11: start 2543.207000, end 2794.208000
+ Metadata:
+ title : Chapter 12
+Chapter #0:12: start 2794.208000, end 3109.314000
+ Metadata:
+ title : Chapter 13
+Chapter #0:13: start 3109.314000, end 3389.052000
+ Metadata:
+ title : Chapter 14
+Chapter #0:14: start 3389.052000, end 3694.357000
+ Metadata:
+ title : Chapter 15
+Chapter #0:15: start 3694.357000, end 3873.119000
+ Metadata:
+ title : Chapter 16
+Chapter #0:16: start 3873.119000, end 4391.846000
+ Metadata:
+ title : Chapter 17
+Chapter #0:17: start 4391.846000, end 4657.736000
+ Metadata:
+ title : Chapter 18
+Chapter #0:18: start 4657.736000, end 4749.745000
+ Metadata:
+ title : Chapter 19
+Chapter #0:19: start 4749.745000, end 4842.045000
+ Metadata:
+ title : Chapter 20
+Chapter #0:20: start 4842.045000, end 5197.901000
+ Metadata:
+ title : Chapter 21
+Chapter #0:21: start 5197.901000, end 5640.176000
+ Metadata:
+ title : Chapter 22
+Chapter #0:22: start 5640.176000, end 6037.365000
+ Metadata:
+ title : Chapter 23
+Chapter #0:23: start 6037.365000, end 6321.398000
+ Metadata:
+ title : Chapter 24
+Chapter #0:24: start 6321.398000, end 6458.368000
+ Metadata:
+ title : Chapter 25
+Chapter #0:25: start 6458.368000, end 6810.470000
+ Metadata:
+ title : Chapter 26
+Chapter #0:26: start 6810.470000, end 6959.953000
+ Metadata:
+ title : Chapter 27
+Chapter #0:27: start 6959.953000, end 7499.575000
+ Metadata:
+ title : Chapter 28
+Chapter #0:28: start 7499.575000, end 7707.575000
+ Metadata:
+ title : Chapter 29
+Chapter #0:29: start 7707.575000, end 7941.725000
+ Metadata:
+ title : Chapter 30
+Chapter #0:30: start 7941.725000, end 8214.414000
+ Metadata:
+ title : Chapter 31
+Chapter #0:31: start 8214.414000, end 8626.656000
+ Metadata:
+ title : Chapter 32
+Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
+Metadata:
+ title : English
+ BPS : 33666894
+ DURATION : 02:23:46.618000000
+ NUMBER_OF_FRAMES: 206832
+ NUMBER_OF_BYTES : 36303929846
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), s32p (24 bit) (default)
+Metadata:
+ title : English
+ BPS : 4236399
+ DURATION : 02:23:46.624000000
+ NUMBER_OF_FRAMES: 808746
+ NUMBER_OF_BYTES : 4568228448
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:2(eng): Audio: ac3, 48000 Hz, stereo, fltp, 224 kb/s (comment)
+Metadata:
+ title : English commentary
+ BPS : 224000
+ DURATION : 02:23:46.656000000
+ NUMBER_OF_FRAMES: 269583
+ NUMBER_OF_BYTES : 241546368
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:3(eng): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ title : English (SDH)
+ BPS : 25275
+ DURATION : 02:14:32.439000000
+ NUMBER_OF_FRAMES: 1740
+ NUMBER_OF_BYTES : 25504616
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:4(spa): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ title : Spanish
+ BPS : 21585
+ DURATION : 02:12:54.884000000
+ NUMBER_OF_FRAMES: 1412
+ NUMBER_OF_BYTES : 21517695
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
+ var vi = VideoInfoHelper.ParseOutput(null, ffmpegOutput);
+ Assert.AreEqual(32, vi.Chapters?.Count ?? 0);
+ Assert.AreEqual(TimeSpan.FromSeconds(0), vi.Chapters[0].Start);
+ Assert.AreEqual(TimeSpan.FromSeconds(110.819000), vi.Chapters[0].End);
+ }
+
+ [TestMethod]
+ public void VideoInfoTest_Chapters_Bad()
+ {
+ string ffmpegOutput =
+ @"[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 3 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
+Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
+[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 4 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
+Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
+Input #0, matroska,webm, from 'D:\downloads\sabnzbd\complete\movies\Cast.Away.2000.BluRay.1080p.REMUX.AVC.DTS-HD.MA.5.1-LEGi0N\b0e4afee2ced4ae3a3592b82ae335608.mkv':
+Metadata:
+encoder : libebml v1.4.2 + libmatroska v1.6.4
+creation_time : 2022-02-02T22:32:47.000000Z
+Duration: 02:23:46.66, start: 0.000000, bitrate: 38174 kb/s
+Chapters:
+Chapter #0:0: end 110.819000
+ Metadata:
+ title : Chapter 01
+Chapter #0:1: start 110.819000, end 517.851000
+ Metadata:
+ title : Chapter 0200, end 5640.176000
+ Metadata:
+ title : Chapter 2200, end 7499.575000
+ Metadata:
+ title : Chapter 28
+Chapter #0:28: start 7499.575000, end 7707.575000
+ Metadata:
+ title : Chapter 29
+Chapter #0:29: start 7707.575000, end 7941.725000
+ Metadata:
+ title : Chapter 30
+Chapter #0:30: start 7941.725000, end 8214.414000
+ Metadata:
+ title : Chapter 31
+Chapter #0:31: start 8214.414000, end 8626.656000
+ Metadata:
+ title : Chapter 32
+Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
+Metadata:
+ title : English
+ BPS : 33666894
+ DURATION : 02:23:46.618000000
+ NUMBER_OF_FRAMES: 206832
+ NUMBER_OF_BYTES : 36303929846
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), s32p (24 bit) (default)
+Metadata:
+ title : English
+ BPS : 4236399
+ DURATION : 02:23:46.624000000
+ NUMBER_OF_FRAMES: 808746
+ NUMBER_OF_BYTES : 4568228448
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:2(eng): Audio: ac3, 48000 Hz, stereo, fltp, 224 kb/s (comment)
+Metadata:
+ title : English commentary
+ BPS : 224000
+ DURATION : 02:23:46.656000000
+ NUMBER_OF_FRAMES: 269583
+ NUMBER_OF_BYTES : 241546368
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:3(eng): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ title : English (SDH)
+ BPS : 25275
+ DURATION : 02:14:32.439000000
+ NUMBER_OF_FRAMES: 1740
+ NUMBER_OF_BYTES : 25504616
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:4(spa): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ title : Spanish
+ BPS : 21585
+ DURATION : 02:12:54.884000000
+ NUMBER_OF_FRAMES: 1412
+ NUMBER_OF_BYTES : 21517695
+ _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
+ _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
+ var vi = VideoInfoHelper.ParseOutput(null, ffmpegOutput);
+ Assert.AreEqual(6, vi.Chapters?.Count ?? 0);
+ Assert.AreEqual("Chapter 29", vi.Chapters[2].Title);
+ }
+
+ [TestMethod]
+ public void AudioParsingTest()
+ {
+ string audioInfo =
+ @"Stream #0:1[0x2](fre): Audio: eac3 (ec-3 / 0x332D6365), 48000 Hz, 5.1(side), fltp, 640 kb/s (default)
+Metadata:
+ handler_name : SoundHandler
+ vendor_id : [0][0][0][0]
+Side data:
+ audio service type: main";
+ var audio = VideoInfoHelper.ParseAudioStream(Logger, audioInfo);
+ Assert.AreEqual("fre", audio.Language);
+
+ string audioInfo2 = @"Stream #0:1(eng): Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s (default)
+Metadata:
+ BPS : 192000
+ BPS-eng : 192000
+ DURATION : 00:43:19.456000000
+ DURATION-eng : 00:43:19.456000000
+ NUMBER_OF_FRAMES: 81233
+ NUMBER_OF_FRAMES-eng: 81233
+ NUMBER_OF_BYTES : 62386944
+ NUMBER_OF_BYTES-eng: 62386944
+ _STATISTICS_WRITING_APP: DVDFab 10.0.6.6
+ _STATISTICS_WRITING_APP-eng: DVDFab 10.0.6.6
+ _STATISTICS_WRITING_DATE_UTC: 2018-01-06 22:12:14
+ _STATISTICS_WRITING_DATE_UTC-eng: 2018-01-06 22:12:14
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
+ var audio2 = VideoInfoHelper.ParseAudioStream(Logger, audioInfo2);
+ Assert.AreEqual("eng", audio2.Language);
+
+ }
+
+
+ ///
+ /// A test that testes the audio parsing of a ffmpeg output
+ /// This is from a user who was getting 0 channels for all 3 audio streams
+ ///
+ [TestMethod]
+ public void AudioChannelsParsingTest()
+ {
+ string ffmpegOutput =
+ @"Input #0, matroska,webm, from 'W:\\tvshows\test\HEVC\Game of Thrones - S06E06 - Blood of My Blood Bluray-1080p Remux AVC.mkv':
+Metadata:
+title : Game of Thrones (S06E06) - Blood of My Blood - ZQ
+encoder : libebml v1.3.4 + libmatroska v1.4.5
+creation_time : 2016-11-03T04:12:51.000000Z
+Duration: 00:51:27.62, start: 0.000000, bitrate: 24656 kb/s
+Chapters:
+Chapter #0:0: start 0.000000, end 116.533000
+ Metadata:
+ title : Chapter 1
+Chapter #0:1: start 116.533000, end 850.767000
+ Metadata:
+ title : Chapter 2
+Chapter #0:2: start 850.767000, end 1425.090000
+ Metadata:
+ title : Chapter 3
+Chapter #0:3: start 1425.090000, end 1949.906000
+ Metadata:
+ title : Chapter 4
+Chapter #0:4: start 1949.906000, end 2291.164000
+ Metadata:
+ title : Chapter 5
+Chapter #0:5: start 2291.164000, end 2613.861000
+ Metadata:
+ title : Chapter 6
+Chapter #0:6: start 2613.861000, end 3007.004000
+ Metadata:
+ title : Chapter 7
+Chapter #0:7: start 3007.004000, end 3087.616000
+ Metadata:
+ title : Chapter 8
+Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn (default)
+Metadata:
+ title : MPEG-4 AVC Video / 19480 kbps / 1080p / 23.976 fps / 16:9 / High Profile 4.1
+ BPS : 19352137
+ BPS-eng : 19352137
+ DURATION : 00:51:27.585000000
+ DURATION-eng : 00:51:27.585000000
+ NUMBER_OF_FRAMES: 74028
+ NUMBER_OF_FRAMES-eng: 74028
+ NUMBER_OF_BYTES : 7468921033
+ NUMBER_OF_BYTES-eng: 7468921033
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:1(eng): Audio: truehd, 48000 Hz, 7.1, s32 (24 bit) (default)
+Metadata:
+ title : Dolby Atmos Audio / 7.1 / 48 kHz / 4049 kbps / 24-bit
+ BPS : 4049069
+ BPS-eng : 4049069
+ DURATION : 00:51:27.585000000
+ DURATION-eng : 00:51:27.585000000
+ NUMBER_OF_FRAMES: 3705102
+ NUMBER_OF_FRAMES-eng: 3705102
+ NUMBER_OF_BYTES : 1562730694
+ NUMBER_OF_BYTES-eng: 1562730694
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:2(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 640 kb/s
+Metadata:
+ title : Compatibility Track / 5.1-EX / 48 kHz / 640 kbps
+ BPS : 640000
+ BPS-eng : 640000
+ DURATION : 00:51:27.616000000
+ DURATION-eng : 00:51:27.616000000
+ NUMBER_OF_FRAMES: 96488
+ NUMBER_OF_FRAMES-eng: 96488
+ NUMBER_OF_BYTES : 247009280
+ NUMBER_OF_BYTES-eng: 247009280
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:3(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s
+Metadata:
+ title : Commentary with Director Jack Bender, Director of Photography Jonathan Freeman, John Bradley (Samwell Tarly), and Hannah Murray (Gilly) / Dolby Digital Audio / 5.1 / 48 kHz / 448 kbps
+ BPS : 448000
+ BPS-eng : 448000
+ DURATION : 00:51:27.616000000
+ DURATION-eng : 00:51:27.616000000
+ NUMBER_OF_FRAMES: 96488
+ NUMBER_OF_FRAMES-eng: 96488
+ NUMBER_OF_BYTES : 172906496
+ NUMBER_OF_BYTES-eng: 172906496
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:4(eng): Subtitle: hdmv_pgs_subtitle (default)
+Metadata:
+ title : Foreign Parts Only
+ BPS : 10463
+ BPS-eng : 10463
+ DURATION : 00:02:02.748000000
+ DURATION-eng : 00:02:02.748000000
+ NUMBER_OF_FRAMES: 36
+ NUMBER_OF_FRAMES-eng: 36
+ NUMBER_OF_BYTES : 160544
+ NUMBER_OF_BYTES-eng: 160544
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:5(eng): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ title : SDH
+ BPS : 10953
+ BPS-eng : 10953
+ DURATION : 00:48:01.837000000
+ DURATION-eng : 00:48:01.837000000
+ NUMBER_OF_FRAMES: 1292
+ NUMBER_OF_FRAMES-eng: 1292
+ NUMBER_OF_BYTES : 3945866
+ NUMBER_OF_BYTES-eng: 3945866
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:6(fre): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ BPS : 8899
+ BPS-eng : 8899
+ DURATION : 00:48:33.661000000
+ DURATION-eng : 00:48:33.661000000
+ NUMBER_OF_FRAMES: 1210
+ NUMBER_OF_FRAMES-eng: 1210
+ NUMBER_OF_BYTES : 3241221
+ NUMBER_OF_BYTES-eng: 3241221
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:7(spa): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ BPS : 9743
+ BPS-eng : 9743
+ DURATION : 00:47:02.569000000
+ DURATION-eng : 00:47:02.569000000
+ NUMBER_OF_FRAMES: 1152
+ NUMBER_OF_FRAMES-eng: 1152
+ NUMBER_OF_BYTES : 3437560
+ NUMBER_OF_BYTES-eng: 3437560
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:8(spa): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ title : Castillan
+ BPS : 9708
+ BPS-eng : 9708
+ DURATION : 00:47:02.444000000
+ DURATION-eng : 00:47:02.444000000
+ NUMBER_OF_FRAMES: 1088
+ NUMBER_OF_FRAMES-eng: 1088
+ NUMBER_OF_BYTES : 3425040
+ NUMBER_OF_BYTES-eng: 3425040
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:9(ger): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ BPS : 10110
+ BPS-eng : 10110
+ DURATION : 00:47:02.236000000
+ DURATION-eng : 00:47:02.236000000
+ NUMBER_OF_FRAMES: 1036
+ NUMBER_OF_FRAMES-eng: 1036
+ NUMBER_OF_BYTES : 3566891
+ NUMBER_OF_BYTES-eng: 3566891
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:10(por): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ title : Brazilian
+ BPS : 9851
+ BPS-eng : 9851
+ DURATION : 00:47:02.569000000
+ DURATION-eng : 00:47:02.569000000
+ NUMBER_OF_FRAMES: 1158
+ NUMBER_OF_FRAMES-eng: 1158
+ NUMBER_OF_BYTES : 3475674
+ NUMBER_OF_BYTES-eng: 3475674
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:11(dut): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ BPS : 9435
+ BPS-eng : 9435
+ DURATION : 00:47:02.569000000
+ DURATION-eng : 00:47:02.569000000
+ NUMBER_OF_FRAMES: 1154
+ NUMBER_OF_FRAMES-eng: 1154
+ NUMBER_OF_BYTES : 3329208
+ NUMBER_OF_BYTES-eng: 3329208
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:12(dan): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ BPS : 9498
+ BPS-eng : 9498
+ DURATION : 00:47:02.569000000
+ DURATION-eng : 00:47:02.569000000
+ NUMBER_OF_FRAMES: 1152
+ NUMBER_OF_FRAMES-eng: 1152
+ NUMBER_OF_BYTES : 3351239
+ NUMBER_OF_BYTES-eng: 3351239
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:13(fin): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ BPS : 8572
+ BPS-eng : 8572
+ DURATION : 00:47:02.569000000
+ DURATION-eng : 00:47:02.569000000
+ NUMBER_OF_FRAMES: 1154
+ NUMBER_OF_FRAMES-eng: 1154
+ NUMBER_OF_BYTES : 3024401
+ NUMBER_OF_BYTES-eng: 3024401
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:14(nor): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ BPS : 9183
+ BPS-eng : 9183
+ DURATION : 00:47:02.569000000
+ DURATION-eng : 00:47:02.569000000
+ NUMBER_OF_FRAMES: 1154
+ NUMBER_OF_FRAMES-eng: 1154
+ NUMBER_OF_BYTES : 3240071
+ NUMBER_OF_BYTES-eng: 3240071
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+Stream #0:15(swe): Subtitle: hdmv_pgs_subtitle
+Metadata:
+ BPS : 9333
+ BPS-eng : 9333
+ DURATION : 00:47:02.569000000
+ DURATION-eng : 00:47:02.569000000
+ NUMBER_OF_FRAMES: 1154
+ NUMBER_OF_FRAMES-eng: 1154
+ NUMBER_OF_BYTES : 3292894
+ NUMBER_OF_BYTES-eng: 3292894
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
+ var videoInfo = VideoInfoHelper.ParseOutput(Logger, ffmpegOutput);
+ Assert.AreEqual(3, videoInfo.AudioStreams.Count);
+
+
+ foreach (var vs in videoInfo.AudioStreams)
{
- [TestMethod]
- public void VideoInfoTest_JudgeDreed()
- {
- var vi = new VideoInfoHelper(@"C:\utils\ffmpeg\ffmpeg.exe", new TestLogger());
- var info = vi.Read(@"D:\videos\unprocessed\Injustice.mkv");
- Assert.IsNotNull(info);
-
- }
-
- [TestMethod]
- public void ComskipTest()
- {
- const string file = @"D:\videos\unprocessed\The IT Crowd - 2x04 - The Dinner Party - No English.mkv";
- const string ffmpeg = @"C:\utils\ffmpeg\ffmpeg.exe";
- var args = new FileFlows.Plugin.NodeParameters(file, new TestLogger(), false, string.Empty, null);;
-
- args.GetToolPathActual = (string tool) => @"C:\utils\ffmpeg\ffmpeg.exe";
- args.TempPath = @"D:\videos\temp";
-
-
- var vi = new VideoInfoHelper(@"C:\utils\ffmpeg\ffmpeg.exe", new TestLogger());
- var vii = vi.Read(file);
- args.SetParameter("VideoInfo", vii);
- //args.Process = new FileFlows.Plugin.ProcessHelper(args.Logger);
-
- var node = new ComskipRemoveAds();
- int output = node.Execute(args);
- Assert.AreEqual(1, output);
- }
-
-
-
-
- [TestMethod]
- public void VideoInfoTest_Subtitle_Extractor()
- {
- const string file = @"D:\videos\Injustice.mkv";
- var vi = new VideoInfoHelper(@"C:\utils\ffmpeg\ffmpeg.exe", new TestLogger());
- var vii = vi.Read(file);
-
- SubtitleExtractor node = new();
- //node.OutputFile = file + ".sup";
- var args = new FileFlows.Plugin.NodeParameters(file, new TestLogger(), false, string.Empty, null);;
- args.GetToolPathActual = (string tool) => @"C:\utils\ffmpeg\ffmpeg.exe";
- args.TempPath = @"D:\videos\temp";
-
- new VideoFile().Execute(args);
-
- int output = node.Execute(args);
-
- Assert.AreEqual(1, output);
- }
-
- [TestMethod]
- public void VideoInfoTest_AC1()
- {
- string ffmpegOutput =
- @"Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/media/Videos/Input3/input file.mp4':
- Metadata:
- major_brand : mp42
- minor_version : 512
- compatible_brands: mp42iso6
- creation_time : 2022-01-07T06:30:47.000000Z
- title : Episode title
- comment : Episode description
- Duration: 00:42:23.75, start: 0.000000, bitrate: 3174 kb/s
- Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 2528 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
- Metadata:
- creation_time : 2022-01-07T06:30:47.000000Z
- handler_name : VideoHandler
- Stream #0:1(deu): Audio: eac3 (ec-3 / 0x332D6365), 48000 Hz, 5.1(side), fltp, 640 kb/s (default)
- Metadata:
- creation_time : 2022-01-07T06:30:47.000000Z
- handler_name : SoundHandler
- Side data:
- audio service type: main";
- var vi = VideoInfoHelper.ParseOutput(null, ffmpegOutput);
- Assert.AreEqual(1920, vi.VideoStreams[0].Width);
- Assert.AreEqual(1080, vi.VideoStreams[0].Height);
- Assert.AreEqual("yuv420p", vi.VideoStreams[0].PixelFormat);
- }
-
-
- [TestMethod]
- public void VideoInfoTest_Chapters()
- {
- string ffmpegOutput =
- @"[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 3 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
-Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
-[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 4 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
-Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
-Input #0, matroska,webm, from 'D:\downloads\sabnzbd\complete\movies\Cast.Away.2000.BluRay.1080p.REMUX.AVC.DTS-HD.MA.5.1-LEGi0N\b0e4afee2ced4ae3a3592b82ae335608.mkv':
- Metadata:
- encoder : libebml v1.4.2 + libmatroska v1.6.4
- creation_time : 2022-02-02T22:32:47.000000Z
- Duration: 02:23:46.66, start: 0.000000, bitrate: 38174 kb/s
- Chapters:
- Chapter #0:0: start 0.000000, end 110.819000
- Metadata:
- title : Chapter 01
- Chapter #0:1: start 110.819000, end 517.851000
- Metadata:
- title : Chapter 02
- Chapter #0:2: start 517.851000, end 743.326000
- Metadata:
- title : Chapter 03
- Chapter #0:3: start 743.326000, end 1061.269000
- Metadata:
- title : Chapter 04
- Chapter #0:4: start 1061.269000, end 1243.534000
- Metadata:
- title : Chapter 05
- Chapter #0:5: start 1243.534000, end 1360.234000
- Metadata:
- title : Chapter 06
- Chapter #0:6: start 1360.234000, end 1545.461000
- Metadata:
- title : Chapter 07
- Chapter #0:7: start 1545.461000, end 1871.620000
- Metadata:
- title : Chapter 08
- Chapter #0:8: start 1871.620000, end 2155.320000
- Metadata:
- title : Chapter 09
- Chapter #0:9: start 2155.320000, end 2375.623000
- Metadata:
- title : Chapter 10
- Chapter #0:10: start 2375.623000, end 2543.207000
- Metadata:
- title : Chapter 11
- Chapter #0:11: start 2543.207000, end 2794.208000
- Metadata:
- title : Chapter 12
- Chapter #0:12: start 2794.208000, end 3109.314000
- Metadata:
- title : Chapter 13
- Chapter #0:13: start 3109.314000, end 3389.052000
- Metadata:
- title : Chapter 14
- Chapter #0:14: start 3389.052000, end 3694.357000
- Metadata:
- title : Chapter 15
- Chapter #0:15: start 3694.357000, end 3873.119000
- Metadata:
- title : Chapter 16
- Chapter #0:16: start 3873.119000, end 4391.846000
- Metadata:
- title : Chapter 17
- Chapter #0:17: start 4391.846000, end 4657.736000
- Metadata:
- title : Chapter 18
- Chapter #0:18: start 4657.736000, end 4749.745000
- Metadata:
- title : Chapter 19
- Chapter #0:19: start 4749.745000, end 4842.045000
- Metadata:
- title : Chapter 20
- Chapter #0:20: start 4842.045000, end 5197.901000
- Metadata:
- title : Chapter 21
- Chapter #0:21: start 5197.901000, end 5640.176000
- Metadata:
- title : Chapter 22
- Chapter #0:22: start 5640.176000, end 6037.365000
- Metadata:
- title : Chapter 23
- Chapter #0:23: start 6037.365000, end 6321.398000
- Metadata:
- title : Chapter 24
- Chapter #0:24: start 6321.398000, end 6458.368000
- Metadata:
- title : Chapter 25
- Chapter #0:25: start 6458.368000, end 6810.470000
- Metadata:
- title : Chapter 26
- Chapter #0:26: start 6810.470000, end 6959.953000
- Metadata:
- title : Chapter 27
- Chapter #0:27: start 6959.953000, end 7499.575000
- Metadata:
- title : Chapter 28
- Chapter #0:28: start 7499.575000, end 7707.575000
- Metadata:
- title : Chapter 29
- Chapter #0:29: start 7707.575000, end 7941.725000
- Metadata:
- title : Chapter 30
- Chapter #0:30: start 7941.725000, end 8214.414000
- Metadata:
- title : Chapter 31
- Chapter #0:31: start 8214.414000, end 8626.656000
- Metadata:
- title : Chapter 32
- Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
- Metadata:
- title : English
- BPS : 33666894
- DURATION : 02:23:46.618000000
- NUMBER_OF_FRAMES: 206832
- NUMBER_OF_BYTES : 36303929846
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), s32p (24 bit) (default)
- Metadata:
- title : English
- BPS : 4236399
- DURATION : 02:23:46.624000000
- NUMBER_OF_FRAMES: 808746
- NUMBER_OF_BYTES : 4568228448
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:2(eng): Audio: ac3, 48000 Hz, stereo, fltp, 224 kb/s (comment)
- Metadata:
- title : English commentary
- BPS : 224000
- DURATION : 02:23:46.656000000
- NUMBER_OF_FRAMES: 269583
- NUMBER_OF_BYTES : 241546368
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:3(eng): Subtitle: hdmv_pgs_subtitle
- Metadata:
- title : English (SDH)
- BPS : 25275
- DURATION : 02:14:32.439000000
- NUMBER_OF_FRAMES: 1740
- NUMBER_OF_BYTES : 25504616
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:4(spa): Subtitle: hdmv_pgs_subtitle
- Metadata:
- title : Spanish
- BPS : 21585
- DURATION : 02:12:54.884000000
- NUMBER_OF_FRAMES: 1412
- NUMBER_OF_BYTES : 21517695
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
- var vi = VideoInfoHelper.ParseOutput(null, ffmpegOutput);
- Assert.AreEqual(32, vi.Chapters?.Count ?? 0);
- Assert.AreEqual("Chapter 32", vi.Chapters[31].Title);
- Assert.AreEqual(TimeSpan.FromSeconds(8214.414000), vi.Chapters[31].Start);
- Assert.AreEqual(TimeSpan.FromSeconds(8626.656000), vi.Chapters[31].End);
- }
-
-
-
- [TestMethod]
- public void VideoInfoTest_Chapters_NoStart()
- {
- string ffmpegOutput =
- @"[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 3 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
-Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
-[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 4 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
-Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
-Input #0, matroska,webm, from 'D:\downloads\sabnzbd\complete\movies\Cast.Away.2000.BluRay.1080p.REMUX.AVC.DTS-HD.MA.5.1-LEGi0N\b0e4afee2ced4ae3a3592b82ae335608.mkv':
- Metadata:
- encoder : libebml v1.4.2 + libmatroska v1.6.4
- creation_time : 2022-02-02T22:32:47.000000Z
- Duration: 02:23:46.66, start: 0.000000, bitrate: 38174 kb/s
- Chapters:
- Chapter #0:0: end 110.819000
- Metadata:
- title : Chapter 01
- Chapter #0:1: start 110.819000, end 517.851000
- Metadata:
- title : Chapter 02
- Chapter #0:2: start 517.851000, end 743.326000
- Metadata:
- title : Chapter 03
- Chapter #0:3: start 743.326000, end 1061.269000
- Metadata:
- title : Chapter 04
- Chapter #0:4: start 1061.269000, end 1243.534000
- Metadata:
- title : Chapter 05
- Chapter #0:5: start 1243.534000, end 1360.234000
- Metadata:
- title : Chapter 06
- Chapter #0:6: start 1360.234000, end 1545.461000
- Metadata:
- title : Chapter 07
- Chapter #0:7: start 1545.461000, end 1871.620000
- Metadata:
- title : Chapter 08
- Chapter #0:8: start 1871.620000, end 2155.320000
- Metadata:
- title : Chapter 09
- Chapter #0:9: start 2155.320000, end 2375.623000
- Metadata:
- title : Chapter 10
- Chapter #0:10: start 2375.623000, end 2543.207000
- Metadata:
- title : Chapter 11
- Chapter #0:11: start 2543.207000, end 2794.208000
- Metadata:
- title : Chapter 12
- Chapter #0:12: start 2794.208000, end 3109.314000
- Metadata:
- title : Chapter 13
- Chapter #0:13: start 3109.314000, end 3389.052000
- Metadata:
- title : Chapter 14
- Chapter #0:14: start 3389.052000, end 3694.357000
- Metadata:
- title : Chapter 15
- Chapter #0:15: start 3694.357000, end 3873.119000
- Metadata:
- title : Chapter 16
- Chapter #0:16: start 3873.119000, end 4391.846000
- Metadata:
- title : Chapter 17
- Chapter #0:17: start 4391.846000, end 4657.736000
- Metadata:
- title : Chapter 18
- Chapter #0:18: start 4657.736000, end 4749.745000
- Metadata:
- title : Chapter 19
- Chapter #0:19: start 4749.745000, end 4842.045000
- Metadata:
- title : Chapter 20
- Chapter #0:20: start 4842.045000, end 5197.901000
- Metadata:
- title : Chapter 21
- Chapter #0:21: start 5197.901000, end 5640.176000
- Metadata:
- title : Chapter 22
- Chapter #0:22: start 5640.176000, end 6037.365000
- Metadata:
- title : Chapter 23
- Chapter #0:23: start 6037.365000, end 6321.398000
- Metadata:
- title : Chapter 24
- Chapter #0:24: start 6321.398000, end 6458.368000
- Metadata:
- title : Chapter 25
- Chapter #0:25: start 6458.368000, end 6810.470000
- Metadata:
- title : Chapter 26
- Chapter #0:26: start 6810.470000, end 6959.953000
- Metadata:
- title : Chapter 27
- Chapter #0:27: start 6959.953000, end 7499.575000
- Metadata:
- title : Chapter 28
- Chapter #0:28: start 7499.575000, end 7707.575000
- Metadata:
- title : Chapter 29
- Chapter #0:29: start 7707.575000, end 7941.725000
- Metadata:
- title : Chapter 30
- Chapter #0:30: start 7941.725000, end 8214.414000
- Metadata:
- title : Chapter 31
- Chapter #0:31: start 8214.414000, end 8626.656000
- Metadata:
- title : Chapter 32
- Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
- Metadata:
- title : English
- BPS : 33666894
- DURATION : 02:23:46.618000000
- NUMBER_OF_FRAMES: 206832
- NUMBER_OF_BYTES : 36303929846
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), s32p (24 bit) (default)
- Metadata:
- title : English
- BPS : 4236399
- DURATION : 02:23:46.624000000
- NUMBER_OF_FRAMES: 808746
- NUMBER_OF_BYTES : 4568228448
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:2(eng): Audio: ac3, 48000 Hz, stereo, fltp, 224 kb/s (comment)
- Metadata:
- title : English commentary
- BPS : 224000
- DURATION : 02:23:46.656000000
- NUMBER_OF_FRAMES: 269583
- NUMBER_OF_BYTES : 241546368
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:3(eng): Subtitle: hdmv_pgs_subtitle
- Metadata:
- title : English (SDH)
- BPS : 25275
- DURATION : 02:14:32.439000000
- NUMBER_OF_FRAMES: 1740
- NUMBER_OF_BYTES : 25504616
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:4(spa): Subtitle: hdmv_pgs_subtitle
- Metadata:
- title : Spanish
- BPS : 21585
- DURATION : 02:12:54.884000000
- NUMBER_OF_FRAMES: 1412
- NUMBER_OF_BYTES : 21517695
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
- var vi = VideoInfoHelper.ParseOutput(null, ffmpegOutput);
- Assert.AreEqual(32, vi.Chapters?.Count ?? 0);
- Assert.AreEqual(TimeSpan.FromSeconds(0), vi.Chapters[0].Start);
- Assert.AreEqual(TimeSpan.FromSeconds(110.819000), vi.Chapters[0].End);
- }
-
- [TestMethod]
- public void VideoInfoTest_Chapters_Bad()
- {
- string ffmpegOutput =
- @"[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 3 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
-Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
-[matroska,webm @ 00000263322abdc0] Could not find codec parameters for stream 4 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size
-Consider increasing the value for the 'analyzeduration' (0) and 'probesize' (5000000) options
-Input #0, matroska,webm, from 'D:\downloads\sabnzbd\complete\movies\Cast.Away.2000.BluRay.1080p.REMUX.AVC.DTS-HD.MA.5.1-LEGi0N\b0e4afee2ced4ae3a3592b82ae335608.mkv':
- Metadata:
- encoder : libebml v1.4.2 + libmatroska v1.6.4
- creation_time : 2022-02-02T22:32:47.000000Z
- Duration: 02:23:46.66, start: 0.000000, bitrate: 38174 kb/s
- Chapters:
- Chapter #0:0: end 110.819000
- Metadata:
- title : Chapter 01
- Chapter #0:1: start 110.819000, end 517.851000
- Metadata:
- title : Chapter 0200, end 5640.176000
- Metadata:
- title : Chapter 2200, end 7499.575000
- Metadata:
- title : Chapter 28
- Chapter #0:28: start 7499.575000, end 7707.575000
- Metadata:
- title : Chapter 29
- Chapter #0:29: start 7707.575000, end 7941.725000
- Metadata:
- title : Chapter 30
- Chapter #0:30: start 7941.725000, end 8214.414000
- Metadata:
- title : Chapter 31
- Chapter #0:31: start 8214.414000, end 8626.656000
- Metadata:
- title : Chapter 32
- Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
- Metadata:
- title : English
- BPS : 33666894
- DURATION : 02:23:46.618000000
- NUMBER_OF_FRAMES: 206832
- NUMBER_OF_BYTES : 36303929846
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:1(eng): Audio: dts (DTS-HD MA), 48000 Hz, 5.1(side), s32p (24 bit) (default)
- Metadata:
- title : English
- BPS : 4236399
- DURATION : 02:23:46.624000000
- NUMBER_OF_FRAMES: 808746
- NUMBER_OF_BYTES : 4568228448
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:2(eng): Audio: ac3, 48000 Hz, stereo, fltp, 224 kb/s (comment)
- Metadata:
- title : English commentary
- BPS : 224000
- DURATION : 02:23:46.656000000
- NUMBER_OF_FRAMES: 269583
- NUMBER_OF_BYTES : 241546368
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:3(eng): Subtitle: hdmv_pgs_subtitle
- Metadata:
- title : English (SDH)
- BPS : 25275
- DURATION : 02:14:32.439000000
- NUMBER_OF_FRAMES: 1740
- NUMBER_OF_BYTES : 25504616
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:4(spa): Subtitle: hdmv_pgs_subtitle
- Metadata:
- title : Spanish
- BPS : 21585
- DURATION : 02:12:54.884000000
- NUMBER_OF_FRAMES: 1412
- NUMBER_OF_BYTES : 21517695
- _STATISTICS_WRITING_APP: mkvmerge v64.0.0 ('Willows') 64-bit
- _STATISTICS_WRITING_DATE_UTC: 2022-02-02 22:32:47
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
- var vi = VideoInfoHelper.ParseOutput(null, ffmpegOutput);
- Assert.AreEqual(6, vi.Chapters?.Count ?? 0);
- Assert.AreEqual("Chapter 29", vi.Chapters[2].Title);
- }
-
- [TestMethod]
- public void AudioParsingTest()
- {
- var logger = new TestLogger();
- string audioInfo =
- @"Stream #0:1[0x2](fre): Audio: eac3 (ec-3 / 0x332D6365), 48000 Hz, 5.1(side), fltp, 640 kb/s (default)
- Metadata:
- handler_name : SoundHandler
- vendor_id : [0][0][0][0]
- Side data:
- audio service type: main";
- var audio = VideoInfoHelper.ParseAudioStream(logger, audioInfo);
- Assert.AreEqual("fre", audio.Language);
-
- string audioInfo2 = @"Stream #0:1(eng): Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s (default)
- Metadata:
- BPS : 192000
- BPS-eng : 192000
- DURATION : 00:43:19.456000000
- DURATION-eng : 00:43:19.456000000
- NUMBER_OF_FRAMES: 81233
- NUMBER_OF_FRAMES-eng: 81233
- NUMBER_OF_BYTES : 62386944
- NUMBER_OF_BYTES-eng: 62386944
- _STATISTICS_WRITING_APP: DVDFab 10.0.6.6
- _STATISTICS_WRITING_APP-eng: DVDFab 10.0.6.6
- _STATISTICS_WRITING_DATE_UTC: 2018-01-06 22:12:14
- _STATISTICS_WRITING_DATE_UTC-eng: 2018-01-06 22:12:14
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
- var audio2 = VideoInfoHelper.ParseAudioStream(logger, audioInfo2);
- Assert.AreEqual("eng", audio2.Language);
-
- }
-
-
- ///
- /// A test that testes the audio parsing of a ffmpeg output
- /// This is from a user who was getting 0 channels for all 3 audio streams
- ///
- [TestMethod]
- public void AudioChannelsParsingTest()
- {
- string ffmpegOutput =
- @"Input #0, matroska,webm, from 'W:\\tvshows\test\HEVC\Game of Thrones - S06E06 - Blood of My Blood Bluray-1080p Remux AVC.mkv':
- Metadata:
- title : Game of Thrones (S06E06) - Blood of My Blood - ZQ
- encoder : libebml v1.3.4 + libmatroska v1.4.5
- creation_time : 2016-11-03T04:12:51.000000Z
- Duration: 00:51:27.62, start: 0.000000, bitrate: 24656 kb/s
- Chapters:
- Chapter #0:0: start 0.000000, end 116.533000
- Metadata:
- title : Chapter 1
- Chapter #0:1: start 116.533000, end 850.767000
- Metadata:
- title : Chapter 2
- Chapter #0:2: start 850.767000, end 1425.090000
- Metadata:
- title : Chapter 3
- Chapter #0:3: start 1425.090000, end 1949.906000
- Metadata:
- title : Chapter 4
- Chapter #0:4: start 1949.906000, end 2291.164000
- Metadata:
- title : Chapter 5
- Chapter #0:5: start 2291.164000, end 2613.861000
- Metadata:
- title : Chapter 6
- Chapter #0:6: start 2613.861000, end 3007.004000
- Metadata:
- title : Chapter 7
- Chapter #0:7: start 3007.004000, end 3087.616000
- Metadata:
- title : Chapter 8
- Stream #0:0: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn (default)
- Metadata:
- title : MPEG-4 AVC Video / 19480 kbps / 1080p / 23.976 fps / 16:9 / High Profile 4.1
- BPS : 19352137
- BPS-eng : 19352137
- DURATION : 00:51:27.585000000
- DURATION-eng : 00:51:27.585000000
- NUMBER_OF_FRAMES: 74028
- NUMBER_OF_FRAMES-eng: 74028
- NUMBER_OF_BYTES : 7468921033
- NUMBER_OF_BYTES-eng: 7468921033
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:1(eng): Audio: truehd, 48000 Hz, 7.1, s32 (24 bit) (default)
- Metadata:
- title : Dolby Atmos Audio / 7.1 / 48 kHz / 4049 kbps / 24-bit
- BPS : 4049069
- BPS-eng : 4049069
- DURATION : 00:51:27.585000000
- DURATION-eng : 00:51:27.585000000
- NUMBER_OF_FRAMES: 3705102
- NUMBER_OF_FRAMES-eng: 3705102
- NUMBER_OF_BYTES : 1562730694
- NUMBER_OF_BYTES-eng: 1562730694
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:2(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 640 kb/s
- Metadata:
- title : Compatibility Track / 5.1-EX / 48 kHz / 640 kbps
- BPS : 640000
- BPS-eng : 640000
- DURATION : 00:51:27.616000000
- DURATION-eng : 00:51:27.616000000
- NUMBER_OF_FRAMES: 96488
- NUMBER_OF_FRAMES-eng: 96488
- NUMBER_OF_BYTES : 247009280
- NUMBER_OF_BYTES-eng: 247009280
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:3(eng): Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s
- Metadata:
- title : Commentary with Director Jack Bender, Director of Photography Jonathan Freeman, John Bradley (Samwell Tarly), and Hannah Murray (Gilly) / Dolby Digital Audio / 5.1 / 48 kHz / 448 kbps
- BPS : 448000
- BPS-eng : 448000
- DURATION : 00:51:27.616000000
- DURATION-eng : 00:51:27.616000000
- NUMBER_OF_FRAMES: 96488
- NUMBER_OF_FRAMES-eng: 96488
- NUMBER_OF_BYTES : 172906496
- NUMBER_OF_BYTES-eng: 172906496
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:4(eng): Subtitle: hdmv_pgs_subtitle (default)
- Metadata:
- title : Foreign Parts Only
- BPS : 10463
- BPS-eng : 10463
- DURATION : 00:02:02.748000000
- DURATION-eng : 00:02:02.748000000
- NUMBER_OF_FRAMES: 36
- NUMBER_OF_FRAMES-eng: 36
- NUMBER_OF_BYTES : 160544
- NUMBER_OF_BYTES-eng: 160544
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:5(eng): Subtitle: hdmv_pgs_subtitle
- Metadata:
- title : SDH
- BPS : 10953
- BPS-eng : 10953
- DURATION : 00:48:01.837000000
- DURATION-eng : 00:48:01.837000000
- NUMBER_OF_FRAMES: 1292
- NUMBER_OF_FRAMES-eng: 1292
- NUMBER_OF_BYTES : 3945866
- NUMBER_OF_BYTES-eng: 3945866
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:6(fre): Subtitle: hdmv_pgs_subtitle
- Metadata:
- BPS : 8899
- BPS-eng : 8899
- DURATION : 00:48:33.661000000
- DURATION-eng : 00:48:33.661000000
- NUMBER_OF_FRAMES: 1210
- NUMBER_OF_FRAMES-eng: 1210
- NUMBER_OF_BYTES : 3241221
- NUMBER_OF_BYTES-eng: 3241221
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:7(spa): Subtitle: hdmv_pgs_subtitle
- Metadata:
- BPS : 9743
- BPS-eng : 9743
- DURATION : 00:47:02.569000000
- DURATION-eng : 00:47:02.569000000
- NUMBER_OF_FRAMES: 1152
- NUMBER_OF_FRAMES-eng: 1152
- NUMBER_OF_BYTES : 3437560
- NUMBER_OF_BYTES-eng: 3437560
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:8(spa): Subtitle: hdmv_pgs_subtitle
- Metadata:
- title : Castillan
- BPS : 9708
- BPS-eng : 9708
- DURATION : 00:47:02.444000000
- DURATION-eng : 00:47:02.444000000
- NUMBER_OF_FRAMES: 1088
- NUMBER_OF_FRAMES-eng: 1088
- NUMBER_OF_BYTES : 3425040
- NUMBER_OF_BYTES-eng: 3425040
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:9(ger): Subtitle: hdmv_pgs_subtitle
- Metadata:
- BPS : 10110
- BPS-eng : 10110
- DURATION : 00:47:02.236000000
- DURATION-eng : 00:47:02.236000000
- NUMBER_OF_FRAMES: 1036
- NUMBER_OF_FRAMES-eng: 1036
- NUMBER_OF_BYTES : 3566891
- NUMBER_OF_BYTES-eng: 3566891
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:10(por): Subtitle: hdmv_pgs_subtitle
- Metadata:
- title : Brazilian
- BPS : 9851
- BPS-eng : 9851
- DURATION : 00:47:02.569000000
- DURATION-eng : 00:47:02.569000000
- NUMBER_OF_FRAMES: 1158
- NUMBER_OF_FRAMES-eng: 1158
- NUMBER_OF_BYTES : 3475674
- NUMBER_OF_BYTES-eng: 3475674
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:11(dut): Subtitle: hdmv_pgs_subtitle
- Metadata:
- BPS : 9435
- BPS-eng : 9435
- DURATION : 00:47:02.569000000
- DURATION-eng : 00:47:02.569000000
- NUMBER_OF_FRAMES: 1154
- NUMBER_OF_FRAMES-eng: 1154
- NUMBER_OF_BYTES : 3329208
- NUMBER_OF_BYTES-eng: 3329208
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:12(dan): Subtitle: hdmv_pgs_subtitle
- Metadata:
- BPS : 9498
- BPS-eng : 9498
- DURATION : 00:47:02.569000000
- DURATION-eng : 00:47:02.569000000
- NUMBER_OF_FRAMES: 1152
- NUMBER_OF_FRAMES-eng: 1152
- NUMBER_OF_BYTES : 3351239
- NUMBER_OF_BYTES-eng: 3351239
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:13(fin): Subtitle: hdmv_pgs_subtitle
- Metadata:
- BPS : 8572
- BPS-eng : 8572
- DURATION : 00:47:02.569000000
- DURATION-eng : 00:47:02.569000000
- NUMBER_OF_FRAMES: 1154
- NUMBER_OF_FRAMES-eng: 1154
- NUMBER_OF_BYTES : 3024401
- NUMBER_OF_BYTES-eng: 3024401
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:14(nor): Subtitle: hdmv_pgs_subtitle
- Metadata:
- BPS : 9183
- BPS-eng : 9183
- DURATION : 00:47:02.569000000
- DURATION-eng : 00:47:02.569000000
- NUMBER_OF_FRAMES: 1154
- NUMBER_OF_FRAMES-eng: 1154
- NUMBER_OF_BYTES : 3240071
- NUMBER_OF_BYTES-eng: 3240071
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- Stream #0:15(swe): Subtitle: hdmv_pgs_subtitle
- Metadata:
- BPS : 9333
- BPS-eng : 9333
- DURATION : 00:47:02.569000000
- DURATION-eng : 00:47:02.569000000
- NUMBER_OF_FRAMES: 1154
- NUMBER_OF_FRAMES-eng: 1154
- NUMBER_OF_BYTES : 3292894
- NUMBER_OF_BYTES-eng: 3292894
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
- var logger = new TestLogger();
- var videoInfo = VideoInfoHelper.ParseOutput(logger, ffmpegOutput);
- Assert.AreEqual(3, videoInfo.AudioStreams.Count);
-
-
- foreach (var vs in videoInfo.AudioStreams)
- {
- logger.ILog($"Audio stream '{vs.Codec}' '{vs.Index}' 'Language: {vs.Language}' 'Channels: {vs.Channels}'");
- }
-
- var log = logger.ToString();
-
- Assert.AreEqual(7.1f, videoInfo.AudioStreams[0].Channels);
- Assert.AreEqual(5.1f, videoInfo.AudioStreams[1].Channels);
- Assert.AreEqual(5.1f, videoInfo.AudioStreams[2].Channels);
-
- }
-
-
- [TestMethod]
- public void AudioParsingTest2()
- {
- var logger = new TestLogger();
- string audioInfo =
- @"Stream #0:1(eng): Audio: truehd, 48000 Hz, 7.1, s32 (24 bit) (default)
- Metadata:
- title : Dolby Atmos Audio / 7.1 / 48 kHz / 4049 kbps / 24-bit
- BPS : 4049069
- BPS-eng : 4049069
- DURATION : 00:51:27.585000000
- DURATION-eng : 00:51:27.585000000
- NUMBER_OF_FRAMES: 3705102
- NUMBER_OF_FRAMES-eng: 3705102
- NUMBER_OF_BYTES : 1562730694
- NUMBER_OF_BYTES-eng: 1562730694
- _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
- _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
- _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
- _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
- _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
- var audio = VideoInfoHelper.ParseAudioStream(logger, audioInfo);
- Assert.AreEqual("eng", audio.Language);
- Assert.AreEqual(4049069, audio.Bitrate);
- Assert.AreEqual(7.1f, audio.Channels);
- }
+ Logger.ILog($"Audio stream '{vs.Codec}' '{vs.Index}' 'Language: {vs.Language}' 'Channels: {vs.Channels}'");
}
-
-
+
+
+ Assert.AreEqual(7.1f, videoInfo.AudioStreams[0].Channels);
+ Assert.AreEqual(5.1f, videoInfo.AudioStreams[1].Channels);
+ Assert.AreEqual(5.1f, videoInfo.AudioStreams[2].Channels);
+
+ }
+
+
+ [TestMethod]
+ public void AudioParsingTest2()
+ {
+ string audioInfo =
+ @"Stream #0:1(eng): Audio: truehd, 48000 Hz, 7.1, s32 (24 bit) (default)
+Metadata:
+ title : Dolby Atmos Audio / 7.1 / 48 kHz / 4049 kbps / 24-bit
+ BPS : 4049069
+ BPS-eng : 4049069
+ DURATION : 00:51:27.585000000
+ DURATION-eng : 00:51:27.585000000
+ NUMBER_OF_FRAMES: 3705102
+ NUMBER_OF_FRAMES-eng: 3705102
+ NUMBER_OF_BYTES : 1562730694
+ NUMBER_OF_BYTES-eng: 1562730694
+ _STATISTICS_WRITING_APP: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_APP-eng: mkvmerge v9.4.2 ('So High') 64bit
+ _STATISTICS_WRITING_DATE_UTC: 2016-11-03 04:12:51
+ _STATISTICS_WRITING_DATE_UTC-eng: 2016-11-03 04:12:51
+ _STATISTICS_TAGS: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
+ _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES";
+ var audio = VideoInfoHelper.ParseAudioStream(Logger, audioInfo);
+ Assert.AreEqual("eng", audio.Language);
+ Assert.AreEqual(4049069, audio.Bitrate);
+ Assert.AreEqual(7.1f, audio.Channels);
+ }
}
#endif
\ No newline at end of file
diff --git a/VideoNodes/Tests/VideoIsInterlacedTests.cs b/VideoNodes/Tests/VideoIsInterlacedTests.cs
index 6ff93906..82c980a4 100644
--- a/VideoNodes/Tests/VideoIsInterlacedTests.cs
+++ b/VideoNodes/Tests/VideoIsInterlacedTests.cs
@@ -5,13 +5,11 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace VideoNodes.Tests;
[TestClass]
-public class VideoIsInterlacedTests
+public class VideoIsInterlacedTests : VideoTestBase
{
[TestMethod]
public void NotInterlaced()
{
- var logger = new TestLogger();
-
string ffmpegOutput = @"
NUMBER_OF_BYTES : 3632640
_STATISTICS_WRITING_APP: mkvmerge v60.0.0 ('Are We Copies?') 64-bit
@@ -30,19 +28,16 @@ video:510kB audio:25542kB subtitle:0kB other streams:0kB global headers:0kB muxi
[Parsed_idet_0 @ 0x5618bf1fba40] Single frame detection: TFF: 0 BFF: 0 Progressive: 374 Undetermined: 715
[Parsed_idet_0 @ 0x5618bf1fba40] Multi frame detection: TFF: 0 BFF: 0 Progressive: 1089 Undetermined: 0";
- bool interlaced = VideoIsInterlaced.IsVideoInterlaced(logger, ffmpegOutput, 10);
- var log = logger.ToString();
+ bool interlaced = VideoIsInterlaced.IsVideoInterlaced(Logger, ffmpegOutput, 10);
Assert.IsFalse(interlaced);
- Assert.IsTrue(log.Contains("Total Progressive Frames: " + (374 + 1089)));
+ Assert.IsTrue(Logger.ToString().Contains("Total Progressive Frames: " + (374 + 1089)));
}
[TestMethod]
public void IsInterlaced()
{
- var logger = new TestLogger();
-
string ffmpegOutput = @"
NUMBER_OF_BYTES : 3632640
_STATISTICS_WRITING_APP: mkvmerge v60.0.0 ('Are We Copies?') 64-bit
@@ -61,10 +56,10 @@ video:510kB audio:25542kB subtitle:0kB other streams:0kB global headers:0kB muxi
[Parsed_idet_0 @ 0x5618bf1fba40] Single frame detection: TFF: 420 BFF: 0 Progressive: 374 Undetermined: 715
[Parsed_idet_0 @ 0x5618bf1fba40] Multi frame detection: TFF: 65 BFF: 0 Progressive: 1089 Undetermined: 0";
- bool interlaced = VideoIsInterlaced.IsVideoInterlaced(logger, ffmpegOutput, 10);
- var log = logger.ToString();
+ bool interlaced = VideoIsInterlaced.IsVideoInterlaced(Logger, ffmpegOutput, 10);
Assert.IsTrue(interlaced);
+ string log = Logger.ToString();
Assert.IsTrue(log.Contains("Total Progressive Frames: " + (374 + 1089)));
Assert.IsTrue(log.Contains("Total Interlaced Frames: " + (420 + 65)));
}
diff --git a/VideoNodes/Tests/_LocalFileService.cs b/VideoNodes/Tests/_LocalFileService.cs
deleted file mode 100644
index cc33cc82..00000000
--- a/VideoNodes/Tests/_LocalFileService.cs
+++ /dev/null
@@ -1,517 +0,0 @@
-#if(DEBUG)
-using FileFlows.Plugin;
-using FileFlows.Plugin.Models;
-using FileFlows.Plugin.Services;
-using System.IO;
-using FileHelper = FileFlows.Plugin.Helpers.FileHelper;
-
-namespace VideoNodes.Tests;
-
-public class LocalFileService : IFileService
-{
- ///
- /// Gets or sets the path separator for the file system
- ///
- public char PathSeparator { get; init; } = Path.DirectorySeparatorChar;
-
- ///
- /// Gets or sets the allowed paths the file service can access
- ///
- public string[] AllowedPaths { get; init; }
-
- ///
- /// Gets or sets a function for replacing variables in a string.
- ///
- ///
- /// The function takes a string input, a boolean indicating whether to strip missing variables,
- /// and a boolean indicating whether to clean special characters.
- ///
- public ReplaceVariablesDelegate ReplaceVariables { get; set; }
-
- ///
- /// Gets or sets the permissions to use for files
- ///
- public int? Permissions { get; set; }
-
- ///
- /// Gets or sets the owner:group to use for files
- ///
- public string OwnerGroup { get; set; }
-
- ///
- /// Gets or sets the logger used for logging
- ///
- public ILogger? Logger { get; set; }
-
- public Result GetFiles(string path, string searchPattern = "", bool recursive = false)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- return Directory.GetFiles(path, searchPattern ?? string.Empty,
- recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
- }
- catch (Exception)
- {
- return new string[] { };
- }
- }
-
- public Result GetDirectories(string path)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- return Directory.GetDirectories(path);
- }
- catch (Exception)
- {
- return new string[] { };
- }
- }
-
- public Result DirectoryExists(string path)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- return Directory.Exists(path);
- }
- catch (Exception)
- {
- return false;
- }
- }
-
- public Result DirectoryDelete(string path, bool recursive = false)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- Directory.Delete(path, recursive);
- return true;
- }
- catch (Exception ex)
- {
- return Result.Fail(ex.Message);
- }
- }
-
- public Result DirectoryMove(string path, string destination)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- if (IsProtectedPath(ref destination))
- return Result.Fail("Cannot access protected path: " + destination);
- try
- {
- Directory.Move(path, destination);
- SetPermissions(destination);
- return true;
- }
- catch (Exception ex)
- {
- return Result.Fail(ex.Message);
- }
- }
-
- public Result DirectoryCreate(string path)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- var dirInfo = new DirectoryInfo(path);
- if (dirInfo.Exists == false)
- dirInfo.Create();
- SetPermissions(path);
- return true;
- }
- catch (Exception ex)
- {
- return Result.Fail(ex.Message);
- }
- }
-
- public Result DirectoryCreationTimeUtc(string path)
- {
- throw new NotImplementedException();
- }
-
- public Result DirectoryLastWriteTimeUtc(string path)
- {
- throw new NotImplementedException();
- }
-
- public Result FileExists(string path)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- return File.Exists(path);
- }
- catch (Exception)
- {
- return false;
- }
- }
-
- public Result FileInfo(string path)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- FileInfo fileInfo = new FileInfo(path);
-
- return new FileInformation
- {
- CreationTime = fileInfo.CreationTime,
- CreationTimeUtc = fileInfo.CreationTimeUtc,
- LastWriteTime = fileInfo.LastWriteTime,
- LastWriteTimeUtc = fileInfo.LastWriteTimeUtc,
- Extension = fileInfo.Extension.TrimStart('.'),
- Name = fileInfo.Name,
- FullName = fileInfo.FullName,
- Length = fileInfo.Length,
- Directory = fileInfo.DirectoryName
- };
- }
- catch (Exception ex)
- {
- return Result.Fail(ex.Message);
- }
- }
-
- public Result FileDelete(string path)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- var fileInfo = new FileInfo(path);
- if(fileInfo.Exists)
- fileInfo.Delete();
- return true;
- }
- catch (Exception)
- {
- return false;
- }
- }
-
- public Result FileSize(string path)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- var fileInfo = new FileInfo(path);
- if (fileInfo.Exists == false)
- return Result.Fail("File does not exist");
- return fileInfo.Length;
- }
- catch (Exception ex)
- {
- return Result.Fail(ex.Message);
- }
- }
-
- public Result FileCreationTimeUtc(string path)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- var fileInfo = new FileInfo(path);
- if (fileInfo.Exists == false)
- return Result.Fail("File does not exist");
- return fileInfo.CreationTimeUtc;
- }
- catch (Exception ex)
- {
- return Result.Fail(ex.Message);
- }
- }
-
- public Result FileLastWriteTimeUtc(string path)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- var fileInfo = new FileInfo(path);
- if (fileInfo.Exists == false)
- return Result.Fail("File does not exist");
- return fileInfo.LastWriteTimeUtc;
- }
- catch (Exception ex)
- {
- return Result.Fail(ex.Message);
- }
- }
-
- public Result FileMove(string path, string destination, bool overwrite = true)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- if (IsProtectedPath(ref destination))
- return Result.Fail("Cannot access protected path: " + destination);
- try
- {
- var fileInfo = new FileInfo(path);
- if (fileInfo.Exists == false)
- return Result.Fail("File does not exist");
- var destDir = new FileInfo(destination).Directory;
- if (destDir.Exists == false)
- {
- destDir.Create();
- SetPermissions(destDir.FullName);
- }
-
- fileInfo.MoveTo(destination, overwrite);
- SetPermissions(destination);
- return true;
- }
- catch (Exception ex)
- {
- return Result.Fail(ex.Message);
- }
- }
-
- public Result FileCopy(string path, string destination, bool overwrite = true)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- if (IsProtectedPath(ref destination))
- return Result.Fail("Cannot access protected path: " + destination);
- try
- {
- var fileInfo = new FileInfo(path);
- if (fileInfo.Exists == false)
- return Result.Fail("File does not exist");
-
- var destDir = new FileInfo(destination).Directory;
- if (destDir.Exists == false)
- {
- destDir.Create();
- SetPermissions(destDir.FullName);
- }
-
- fileInfo.CopyTo(destination, overwrite);
- SetPermissions(destination);
- return true;
- }
- catch (Exception ex)
- {
- return Result.Fail(ex.Message);
- }
- }
-
- public Result FileAppendAllText(string path, string text)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- File.AppendAllText(path, text);
- SetPermissions(path);
- return true;
- }
- catch (Exception ex)
- {
- return Result.Fail(ex.Message);
- }
- }
-
- public bool FileIsLocal(string path) => true;
-
- ///
- /// Gets the local path
- ///
- /// the path
- /// the local path to the file
- public Result GetLocalPath(string path)
- => Result.Success(path);
-
- public Result Touch(string path)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
-
- if (DirectoryExists(path).Is(true))
- {
- try
- {
- Directory.SetLastWriteTimeUtc(path, DateTime.UtcNow);
- return true;
- }
- catch (Exception ex)
- {
- return Result.Fail("Failed to touch directory: " + ex.Message);
- }
- }
-
- try
- {
- if (File.Exists(path))
- File.SetLastWriteTimeUtc(path, DateTime.UtcNow);
- else
- {
- File.Create(path);
- SetPermissions(path);
- }
-
- return true;
- }
- catch (Exception ex)
- {
- return Result.Fail($"Failed to touch file: '{path}' => {ex.Message}");
- }
- }
-
- public Result DirectorySize(string path)
- {
- if (string.IsNullOrWhiteSpace(path))
- return 0;
-
- if (File.Exists(path))
- path = new FileInfo(path).Directory?.FullName ?? string.Empty;
-
- if (string.IsNullOrWhiteSpace(path))
- return 0;
-
- if (Directory.Exists(path) == false)
- return 0;
-
- try
- {
- DirectoryInfo dir = new DirectoryInfo(path);
- return dir.EnumerateFiles("*.*", SearchOption.AllDirectories).Sum(x => x.Length);
- }
- catch (Exception)
- {
- return 0;
- }
- }
-
- public Result SetCreationTimeUtc(string path, DateTime date)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- if (!File.Exists(path))
- return Result.Fail("File not found.");
-
- File.SetCreationTimeUtc(path, date);
- return Result.Success(true);
- }
- catch (Exception ex)
- {
- return Result.Fail($"Error setting creation time: {ex.Message}");
- }
- }
-
- public Result SetLastWriteTimeUtc(string path, DateTime date)
- {
- if (IsProtectedPath(ref path))
- return Result.Fail("Cannot access protected path: " + path);
- try
- {
- if (!File.Exists(path))
- return Result.Fail("File not found.");
-
- File.SetLastWriteTimeUtc(path, date);
- return Result.Success(true);
- }
- catch (Exception ex)
- {
- return Result.Fail($"Error setting last write time: {ex.Message}");
- }
- }
-
- ///
- /// Checks if a path is accessible by the file server
- ///
- /// the path to check
- /// true if accessible, otherwise false
- private bool IsProtectedPath(ref string path)
- {
- if (OperatingSystem.IsWindows())
- path = path.Replace("/", "\\");
- else
- path = path.Replace("\\", "/");
-
- if(ReplaceVariables != null)
- path = ReplaceVariables(path, true);
-
- if (FileHelper.IsSystemDirectory(path))
- return true; // a system directory, no access
-
- if (AllowedPaths?.Any() != true)
- return false; // no allowed paths configured, allow all
-
- if (OperatingSystem.IsWindows())
- path = path.ToLowerInvariant();
-
- for(int i=0;i logMethod = null)
- {
- logMethod ??= (string message) => Logger?.ILog(message);
-
- permissions = permissions != null && permissions > 0 ? permissions : Permissions;
- if (permissions == null || permissions < 1)
- permissions = 777;
-
-
- if ((File.Exists(path) == false && Directory.Exists(path) == false))
- {
- logMethod("SetPermissions: File doesnt existing, skipping");
- return;
- }
-
- //StringLogger stringLogger = new StringLogger();
- var logger = new TestLogger();
-
- bool isFile = new FileInfo(path).Exists;
-
- FileHelper.SetPermissions(logger, path, file: isFile, permissions: permissions);
-
- FileHelper.ChangeOwner(logger, path, file: isFile, ownerGroup: OwnerGroup);
-
- logMethod(logger.ToString());
-
- return;
-
-
- if (OperatingSystem.IsLinux())
- {
- var filePermissions = FileHelper.ConvertLinuxPermissionsToUnixFileMode(permissions.Value);
- if (filePermissions == UnixFileMode.None)
- {
- logMethod("SetPermissions: Invalid file permissions: " + permissions.Value);
- return;
- }
-
- File.SetUnixFileMode(path, filePermissions);
- logMethod($"SetPermissions: Permission [{filePermissions}] set on file: " + path);
- }
-
- }
-}
-#endif
\ No newline at end of file
diff --git a/VideoNodes/Tests/_TestBase.cs b/VideoNodes/Tests/_TestBase.cs
deleted file mode 100644
index 50d439ae..00000000
--- a/VideoNodes/Tests/_TestBase.cs
+++ /dev/null
@@ -1,121 +0,0 @@
-#if(DEBUG)
-
-using System.Runtime.InteropServices;
-using FileFlows.VideoNodes;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using System.Text.Json;
-using System.IO;
-
-namespace VideoNodes.Tests;
-
-[TestClass]
-public abstract class TestBase
-{
- ///
- /// The test context instance
- ///
- private TestContext testContextInstance;
-
- internal TestLogger Logger = new();
-
- ///
- /// Gets or sets the test context
- ///
- public TestContext TestContext
- {
- get => testContextInstance;
- set => testContextInstance = value;
- }
-
- public string TestPath { get; private set; }
- public string TempPath { get; private set; }
- public string FfmpegPath { get; private set; }
- public string FfprobePath { get; private set; }
-
- public readonly bool IsWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
- public readonly bool IsLinux = RuntimeInformation.IsOSPlatform(OSPlatform.Linux);
-
- [TestInitialize]
- public void TestInitialize()
- {
- Logger.Writer = (msg) => TestContext.WriteLine(msg);
-
- if (System.IO.File.Exists("../../../test.settings.dev.json"))
- {
- LoadSettings("../../../test.settings.dev.json");
- }
- else if (System.IO.File.Exists("../../../test.settings.json"))
- {
- LoadSettings("../../../test.settings.json");
- }
- this.TestPath = this.TestPath?.EmptyAsNull() ?? (IsLinux ? "~/src/ff-files/test-files/videos" : @"d:\videos\testfiles");
- this.TempPath = this.TempPath?.EmptyAsNull() ?? (IsLinux ? "~/src/ff-files/temp" : @"d:\videos\temp");
- this.FfmpegPath = this.FfmpegPath?.EmptyAsNull() ?? (IsLinux ? "/usr/local/bin/ffmpeg" : @"C:\utils\ffmpeg\ffmpeg.exe");
- this.FfprobePath = this.FfmpegPath?.EmptyAsNull() ?? (IsLinux ? "/usr/local/bin/ffprobe" : @"C:\utils\ffprobe\ffprobe.exe");
-
- this.TestPath = this.TestPath.Replace("~/", Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "/");
- this.TempPath = this.TempPath.Replace("~/", Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "/");
- this.FfmpegPath = this.FfmpegPath.Replace("~/", Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "/");
- this.FfprobePath = this.FfprobePath.Replace("~/", Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "/");
-
- if (Directory.Exists(this.TempPath) == false)
- Directory.CreateDirectory(this.TempPath);
- }
-
- [TestCleanup]
- public void CleanUp()
- {
- TestContext.WriteLine(Logger.ToString());
- }
-
- private void LoadSettings(string filename)
- {
- try
- {
- if (File.Exists(filename) == false)
- return;
-
- string json = File.ReadAllText(filename);
- var settings = JsonSerializer.Deserialize(json);
- this.TestPath = settings.TestPath;
- this.TempPath = settings.TempPath;
- this.FfmpegPath = settings.FfmpegPath;
- }
- catch (Exception) { }
- }
-
- protected virtual void TestStarting()
- {
-
- }
-
- protected string TestFile_MovText_Mp4 => Path.Combine(TestPath, "movtext.mp4");
- protected string TestFile_BasicMkv => Path.Combine(TestPath, "basic.mkv");
- protected string TestFile_Corrupt => Path.Combine(TestPath, "corrupt.mkv");
- protected string TestFile_Webvtt => Path.Combine(TestPath, "webvtt4.mkv");
- protected string TestFile_Tag => Path.Combine(TestPath, "tag.mp4");
- protected string TestFile_Sitcom => Path.Combine(TestPath, "sitcom.mkv");
- protected string TestFile_Pgs => Path.Combine(TestPath, "pgs.mkv");
- protected string TestFile_Subtitle => Path.Combine(TestPath, "subtitle.mkv");
- protected string TestFile_Error => Path.Combine(TestPath, "error.mkv");
- protected string TestFile_Font => Path.Combine(TestPath, "font.mkv");
- protected string TestFile_DefaultSub => Path.Combine(TestPath, "default-sub.mkv");
- protected string TestFile_ForcedDefaultSub => Path.Combine(TestPath, "sub-forced-default.mkv");
- protected string TestFile_DefaultIsForcedSub => Path.Combine(TestPath, "sub-default-is-forced.mkv");
- protected string TestFile_5dot1 => Path.Combine(TestPath, "5.1.mkv");
- protected string TestFile_TwoPassNegInifinity => Path.Combine(TestPath, "audio_normal_neg_infinity.mkv");
- protected string TestFile_4k_h264mov => Path.Combine(TestPath, "4k_h264.mov");
- protected string TestFile_4k_h264mkv => Path.Combine(TestPath, "4k_h264.mkv");
-
- protected string TestFile_50_mbps_hd_h264 => Path.Combine(TestPath, "50-mbps-hd-h264.mkv");
- protected string TestFile_120_mbps_4k_uhd_hevc_10bit => Path.Combine(TestPath, "120-mbps-4k-uhd-hevc-10bit.mkv");
-
- private class TestSettings
- {
- public string TestPath { get; set; }
- public string TempPath { get; set; }
- public string FfmpegPath { get; set; }
- }
-}
-
-#endif
\ No newline at end of file
diff --git a/VideoNodes/Tests/_VideoTestBase.cs b/VideoNodes/Tests/_VideoTestBase.cs
new file mode 100644
index 00000000..162861db
--- /dev/null
+++ b/VideoNodes/Tests/_VideoTestBase.cs
@@ -0,0 +1,84 @@
+#if(DEBUG)
+
+using PluginTestLibrary;
+using File = System.IO.File;
+
+namespace VideoNodes.Tests;
+
+///
+/// Test base dor the video tests
+///
+public abstract class VideoTestBase : TestBase
+{
+
+ ///
+ /// The resources test file directory
+ ///
+ protected static readonly string ResourcesTestFilesDir = "Tests/Resources";
+
+ ///
+ /// Video MKV file
+ ///
+ protected static readonly string VideoMkv = ResourcesTestFilesDir + "/video.mkv";
+
+ ///
+ /// Video MP4 file
+ ///
+ protected static readonly string VideoMp4 = ResourcesTestFilesDir + "/video.mp4";
+
+ ///
+ /// Video HEVC MKV file
+ ///
+ protected static readonly string VideoMkvHevc = ResourcesTestFilesDir + "/hevc.mkv";
+
+ ///
+ /// Video Corrutp file
+ ///
+ protected static readonly string VideoCorrupt = ResourcesTestFilesDir + "/corrupt.mkv";
+
+ ///
+ /// Audio MP3 file
+ ///
+ protected static readonly string AudioMp3 = ResourcesTestFilesDir + "/audio.mp3";
+
+
+ ///
+ /// Gets the FFmpeg location
+ ///
+ protected static string FFmpeg { get; private set; }
+
+ ///
+ /// Gets the FFprobe location
+ ///
+ protected static string FFprobe { get; private set; }
+
+ ///
+ /// Gets the Node Parameters
+ ///
+ /// the file to initialise, will use VideoMkv if not set
+ /// if the file is directory
+ /// the node parameters
+ public NodeParameters GetVideoNodeParameters(string? filename = null, bool isDirectory = false)
+ {
+ filename ??= VideoMkv;
+ var args = new NodeParameters(filename, Logger, isDirectory, string.Empty, new LocalFileService())
+ {
+ LibraryFileName = filename
+ };
+ args.InitFile(filename);
+
+ FFmpeg = File.Exists("/usr/local/bin/ffmpeg") ? "/usr/local/bin/ffmpeg" : "ffmpeg";
+ FFprobe = File.Exists("/usr/local/bin/ffprobe") ? "/usr/local/bin/ffprobe" : "ffprobe";
+
+ args.GetToolPathActual = (tool) =>
+ {
+ if(tool.ToLowerInvariant().Contains("ffmpeg")) return FFmpeg;
+ if(tool.ToLowerInvariant().Contains("ffprobe")) return FFprobe;
+ return tool;
+ };
+ args.TempPath = TempPath;
+ return args;
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/VideoNodes/VideoNodes.csproj b/VideoNodes/VideoNodes.csproj
index 2ab1422e..671f9979 100644
--- a/VideoNodes/VideoNodes.csproj
+++ b/VideoNodes/VideoNodes.csproj
@@ -27,6 +27,9 @@
+
+ Always
+
diff --git a/VideoNodes/VideoNodes/SubtitleExtractor.cs b/VideoNodes/VideoNodes/SubtitleExtractor.cs
index c1f98382..d1467608 100644
--- a/VideoNodes/VideoNodes/SubtitleExtractor.cs
+++ b/VideoNodes/VideoNodes/SubtitleExtractor.cs
@@ -244,20 +244,21 @@ public class SubtitleExtractor : EncodingNode
var result = args.Process.ExecuteShellCommand(new ExecuteArgs
{
Command = ffmpegExe,
- ArgumentList = textSubtitles ?
- new[] {
+ ArgumentList = textSubtitles ?
+ [
"-i", localFile,
"-map", subtitleStream,
tempOutput
- } :
- new[] {
+ ]
+ :
+ [
"-i", localFile,
"-map", subtitleStream,
"-c:s", "copy",
tempOutput
- }
+ ]
}).Result;
var of = new System.IO.FileInfo(tempOutput);