public static async Task InterpolateStep() { if (!InterpolateUtils.CheckAiAvailable(current.ai, current.model)) { return; } current.framesFolder = Path.Combine(current.tempFolder, Paths.framesDir); if (IoUtils.GetAmountOfFiles(current.framesFolder, false, "*") < 2) { if (Config.GetBool(Config.Key.sbsRunPreviousStepIfNeeded)) { Logger.Log($"There are no extracted frames to interpolate - Running extract step first..."); await ExtractFramesStep(); } if (IoUtils.GetAmountOfFiles(current.framesFolder, false, "*") < 2) { UiUtils.ShowMessageBox("There are no extracted frames that can be interpolated!\nDid you run the extraction step?", UiUtils.MessageType.Error); return; } } if (!(await IoUtils.TryDeleteIfExistsAsync(current.interpFolder))) { UiUtils.ShowMessageBox("Failed to delete existing frames folder - Make sure no file is opened in another program!", UiUtils.MessageType.Error); return; } currentInputFrameCount = await GetFrameCountCached.GetFrameCountAsync(current.inPath); if (Config.GetBool(Config.Key.sbsAllowAutoEnc) && !(await InterpolateUtils.CheckEncoderValid())) { return; } if (canceled) { return; } Program.mainForm.SetStatus("Running AI..."); await RunAi(current.interpFolder, current.ai, true); await Task.Run(async() => { await FrameRename.Unrename(); }); // Get timestamps back Program.mainForm.SetProgress(0); }
public static async Task Start() { if (!BatchProcessing.busy && Program.busy) { return; } canceled = false; Program.initialRun = false; Program.mainForm.SetWorking(true); if (!Utils.InputIsValid(current.inPath, current.outPath, current.inFps, current.interpFactor, current.outMode)) { return; // General input checks } if (!Utils.CheckAiAvailable(current.ai, current.model)) { return; // Check if selected AI pkg is installed } if (!AutoEncodeResume.resumeNextRun && !Utils.CheckDeleteOldTempFolder()) { return; // Try to delete temp folder if an old one exists } if (!Utils.CheckPathValid(current.inPath)) { return; // Check if input path/file is valid } if (!(await Utils.CheckEncoderValid())) { return; // Check NVENC compat } Utils.ShowWarnings(current.interpFactor, current.ai); currentInputFrameCount = await GetFrameCountCached.GetFrameCountAsync(current.inPath); current.stepByStep = false; Program.mainForm.SetStatus("Starting..."); sw.Restart(); if (!AutoEncodeResume.resumeNextRun) { await GetFrames(); if (canceled) { return; } await PostProcessFrames(false); } if (canceled) { return; } bool skip = await AutoEncodeResume.PrepareResumedRun(); if (skip || canceled) { return; } //Task.Run(() => Utils.DeleteInterpolatedInputFrames()); await RunAi(current.interpFolder, current.ai); if (canceled) { return; } Program.mainForm.SetProgress(100); if (!currentlyUsingAutoEnc) { await Export.ExportFrames(current.interpFolder, current.outPath, current.outMode, false); } if (!AutoEncodeResume.resumeNextRun && Config.GetBool(Config.Key.keepTempFolder)) { await Task.Run(async() => { await FrameRename.Unrename(); }); } await Done(); }
public static async Task RunAi(string outpath, AI ai, bool stepByStep = false) { if (canceled) { return; } await Task.Run(async() => { await Dedupe.CreateDupesFile(current.framesFolder, currentInputFrameCount, current.framesExt); }); await Task.Run(async() => { await FrameRename.Rename(); }); await Task.Run(async() => { await FrameOrder.CreateFrameOrderFile(current.framesFolder, Config.GetBool(Config.Key.enableLoop), current.interpFactor); }); Program.mainForm.SetStatus("Downloading models..."); await ModelDownloader.DownloadModelFiles(ai, current.model.dir); if (canceled) { return; } currentlyUsingAutoEnc = Utils.CanUseAutoEnc(stepByStep, current); IoUtils.CreateDir(outpath); List <Task> tasks = new List <Task>(); if (ai.aiName == Implementations.rifeCuda.aiName) { tasks.Add(AiProcess.RunRifeCuda(current.framesFolder, current.interpFactor, current.model.dir)); } if (ai.aiName == Implementations.rifeNcnn.aiName) { tasks.Add(AiProcess.RunRifeNcnn(current.framesFolder, outpath, current.interpFactor, current.model.dir)); } if (ai.aiName == Implementations.flavrCuda.aiName) { tasks.Add(AiProcess.RunFlavrCuda(current.framesFolder, current.interpFactor, current.model.dir)); } if (ai.aiName == Implementations.dainNcnn.aiName) { tasks.Add(AiProcess.RunDainNcnn(current.framesFolder, outpath, current.interpFactor, current.model.dir, Config.GetInt(Config.Key.dainNcnnTilesize, 512))); } if (ai.aiName == Implementations.xvfiCuda.aiName) { tasks.Add(AiProcess.RunXvfiCuda(current.framesFolder, current.interpFactor, current.model.dir)); } if (currentlyUsingAutoEnc) { Logger.Log($"{Logger.GetLastLine()} (Using Auto-Encode)", true); tasks.Add(AutoEncode.MainLoop(outpath)); } Program.mainForm.SetStatus("Running AI..."); await Task.WhenAll(tasks); }