public static async Task ImportImages(string inPath, string outPath, bool alpha, Size size, bool showLog, string format) { if (showLog) { Logger.Log($"Importing images from {new DirectoryInfo(inPath).Name}..."); } Logger.Log($"ImportImages() - Alpha: {alpha} - Size: {size} - Format: {format}", true, false, "ffmpeg"); IoUtils.CreateDir(outPath); string concatFile = Path.Combine(Paths.GetDataPath(), "import-concat-temp.ini"); FfmpegUtils.CreateConcatFile(inPath, concatFile, Filetypes.imagesInterpCompat); string inArg = $"-f concat -safe 0 -i {concatFile.Wrap()}"; string linksDir = Path.Combine(concatFile + Paths.symlinksSuffix); if (Config.GetBool(Config.Key.allowSymlinkEncoding, true) && Symlinks.SymlinksAllowed()) { if (await Symlinks.MakeSymlinksForEncode(concatFile, linksDir, Padding.interpFrames)) { inArg = $"-i \"{linksDir}/%{Padding.interpFrames}d{FfmpegEncode.GetConcatFileExt(concatFile)}\""; } } string sizeStr = (size.Width > 1 && size.Height > 1) ? $"-s {size.Width}x{size.Height}" : ""; string vf = $"-vf {GetPadFilter()}"; string args = $"-r 25 {inArg} {GetImgArgs(format, true, alpha)} {sizeStr} -vsync 0 -start_number 0 {vf} \"{outPath}/%{Padding.inputFrames}d{format}\""; LogMode logMode = IoUtils.GetAmountOfFiles(inPath, false) > 50 ? LogMode.OnlyLastLine : LogMode.Hidden; await RunFfmpeg(args, logMode, "panic"); }
public static async Task ExtractSceneChanges(string inPath, string outDir, Fraction rate, bool inputIsFrames, string format) { Logger.Log("Extracting scene changes..."); Directory.CreateDirectory(outDir); string inArg = $"-i {inPath.Wrap()}"; if (inputIsFrames) { string concatFile = Path.Combine(Paths.GetDataPath(), "png-scndetect-concat-temp.ini"); FfmpegUtils.CreateConcatFile(inPath, concatFile, Filetypes.imagesInterpCompat); inArg = $"-f concat -safe 0 -i {concatFile.Wrap()}"; } string scnDetect = $"-vf \"select='gt(scene,{Config.GetFloatString(Config.Key.scnDetectValue)})'\""; string rateArg = (rate.GetFloat() > 0) ? $"-r {rate}" : ""; string args = $"-vsync 0 {GetTrimArg(true)} {inArg} {GetImgArgs(format)} {rateArg} {scnDetect} -frame_pts 1 -s 256x144 {GetTrimArg(false)} \"{outDir}/%{Padding.inputFrames}d{format}\""; LogMode logMode = await Interpolate.GetCurrentInputFrameCount() > 50 ? LogMode.OnlyLastLine : LogMode.Hidden; await RunFfmpeg(args, logMode, inputIsFrames? "panic" : "warning", true); bool hiddenLog = await Interpolate.GetCurrentInputFrameCount() <= 50; int amount = IoUtils.GetAmountOfFiles(outDir, false); Logger.Log($"Detected {amount} scene {(amount == 1 ? "change" : "changes")}.".Replace(" 0 ", " no "), false, !hiddenLog); }