Files
FileFlowsPlugins/VideoNodes/Tests/FfmpegBuilderTests/FfmpegBuilder_BasicTests.cs
T
2024-04-15 08:58:05 +12:00

1582 lines
54 KiB
C#

#if(DEBUG)
using FileFlows.VideoNodes.FfmpegBuilderNodes;
using FileFlows.VideoNodes.FfmpegBuilderNodes.Models;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using VideoNodes.Tests;
namespace FileFlows.VideoNodes.Tests.FfmpegBuilderTests;
[TestClass]
public class FfmpegBuilder_BasicTests : TestBase
{
[TestMethod]
public void FfmpegBuilder_Basic_h265()
{
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 = "h265 10BIT";
ffEncode.Quality = 28;
//ffEncode.HardwareEncoding = true;
ffEncode.PreExecute(args);
ffEncode.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_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;
//ffEncode.HardwareEncoding = false;
ffEncode.PreExecute(args);
ffEncode.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_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);
ffEncode.Execute(args);
FfmpegBuilderAudioAddTrack ffAddAudio = new ();
ffAddAudio.Codec = "ac3";
ffAddAudio.NewTitle = "new ac3";
ffAddAudio.Channels = 2;
ffAddAudio.Index = 0;
ffAddAudio.PreExecute(args);
ffAddAudio.Execute(args);
FfmpegBuilderAudioAddTrack ffAddAudio2 = new();
ffAddAudio2.Codec = "aac";
ffAddAudio2.RemoveTitle = true;
ffAddAudio2.Index = 1;
ffAddAudio.Channels = 2;
ffAddAudio2.PreExecute(args);
ffAddAudio2.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_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";
ffRemover.PreExecute(args);
ffRemover.Execute(args);
FfmpegBuilderAudioAddTrack ffAddAudio = new();
ffAddAudio.Codec = "aac";
ffAddAudio.Bitrate = 640;
ffAddAudio.Channels = 0;
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_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 = @"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();
ffStart.PreExecute(args);
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);
FfmpegBuilderAudioNormalization ffAudioNormalize = new();
ffAudioNormalize.TwoPass = false;
ffAudioNormalize.AllAudio = true;
ffAudioNormalize.PreExecute(args);
ffAudioNormalize.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_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.Execute(args);
FfmpegBuilderAudioTrackRemover ffAudioRemover = new();
ffAudioRemover.RemoveAll = true;
ffAudioRemover.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);
FfmpegBuilderAudioAdjustVolume ffAudioAdjust= new();
ffAudioAdjust.VolumePercent = 1000;
ffAudioAdjust.Pattern = ">1";
ffAudioAdjust.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
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.Execute(args);
FfmpegBuilderRemuxToMP4 ffMp4 = new();
ffMp4.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()
{
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);
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_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.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_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_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<string> { "1.0", "5.1", "2.0" };
ffAudioReorder.Languages = new List<string> { "fre", "deu" };
ffAudioReorder.PreExecute(args);
ffAudioReorder.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
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<string> { "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.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
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.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.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
ffExecutor.HardwareDecoding = true;
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.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
ffExecutor.HardwareDecoding = true;
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.Execute(args);
FfmpegBuilderVideoBitrate ffBitrate = new();
ffBitrate.Bitrate = 50;
ffBitrate.Percent = true;
ffBitrate.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
ffExecutor.HardwareDecoding = true;
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);
}
[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.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.Execute(args);
FfmpegBuilderSubtitleFormatRemover ffSubtitle= new();
ffSubtitle.RemoveAll = true;
ffSubtitle.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
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<string> { "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);
ffTag.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_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;
ffCustom.PreExecute(args);
ffCustom.Execute(args);
FfmpegBuilderExecutor ffExecutor = new();
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
string log = logger.ToString();
Assert.IsTrue(log.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<string> { "srt" };
ffSubMerge.MatchFilename = true;
ffSubMerge.PreExecute(args);
Assert.AreEqual(1, ffSubMerge.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_SubtitleTrackMerge_FileMatchesTests()
{
FfmpegBuilderSubtitleTrackMerge ffSubMerge = new();
foreach (var item in new[] {
(File: "The Big Bang Theory_S01E01_Pilot.en.closedcaptions.srt", Language: "English (CC)", IsMatch: true, Forced: false),
(File: "The Big Bang Theory_S01E01_Pilot.it.closedcaptions.srt", Language: "Italian (CC)", IsMatch: true, Forced: false),
(File: "The Big Bang Theory_S01E01_Pilot.it.forced.srt", Language: "Italian", IsMatch: true, Forced: true),
})
{
bool isMatch = ffSubMerge.FilenameMatches("The Big Bang Theory_S01E01_Pilot.mp4", item.File, out string lang, out bool forced);
Assert.AreEqual(item.IsMatch, isMatch, "Not match: " + item.File);
Assert.AreEqual(item.Forced, forced);
Assert.AreEqual(item.Language, lang, "Language not matching in: " + item.Language);
}
foreach (var item in new[] {
("test.en.cc.srt", "English (CC)", true),
("test.srt", "", true),
("test.en.srt", "English", true),
("test(en).srt", "English", true),
("test (en).srt", "English", true),
("test.en.hi.srt", "English (HI)", true),
("test.en.sdh.srt", "English (SDH)", true),
("test.de.srt", "German", true),
("test(de).srt", "German", true),
("test (de).srt", "German", true),
("nomatch.srt", "", false),
("nomatch.en.srt", "English", false),
("nomatch(en).srt", "English", false),
("nomatch (en).srt", "English", false)
})
{
TestContext.WriteLine("File: " + item.Item1);
bool isMatch = ffSubMerge.FilenameMatches("Test.mkv", item.Item1, out string lang, out bool forced);
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";
ffCodec.PreExecute(args);
ffCodec.Execute(args);
FfmpegBuilderScaler ffScaler = new();
ffScaler.Resolution = "640:-2";
ffScaler.Force = true;
ffScaler.PreExecute(args);
ffScaler.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_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<string> { "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<string> { "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);
int result1 = ffClearDefault.Execute(args);
Assert.AreEqual(1, result1);
FfmpegBuilderExecutor ffExecutor = new();
ffExecutor.PreExecute(args);
int result = ffExecutor.Execute(args);
string log = logger.ToString();
Assert.AreEqual(1, result1);
Assert.AreEqual(1, result);
}
}
#endif