From 01850f465af98a5e56f80a3e24ba9ba858a6da98 Mon Sep 17 00:00:00 2001 From: N00MKRAD <61149547+n00mkrad@users.noreply.github.com> Date: Thu, 28 Dec 2023 04:47:58 +0100 Subject: [PATCH] Improved mpdecimate parameters and added more options for it --- Code/Forms/Main/Form1.Designer.cs | 4 +++- Code/Media/FfmpegCommands.cs | 18 ++++++++++++++++-- Code/Media/FfmpegExtract.cs | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Code/Forms/Main/Form1.Designer.cs b/Code/Forms/Main/Form1.Designer.cs index 65e51b6..726a509 100644 --- a/Code/Forms/Main/Form1.Designer.cs +++ b/Code/Forms/Main/Form1.Designer.cs @@ -1280,7 +1280,9 @@ this.mpdecimateMode.FormattingEnabled = true; this.mpdecimateMode.Items.AddRange(new object[] { "Normal", - "Aggressive"}); + "High", + "Very High", + "Extreme"}); this.mpdecimateMode.Location = new System.Drawing.Point(0, 0); this.mpdecimateMode.Margin = new System.Windows.Forms.Padding(3, 3, 8, 3); this.mpdecimateMode.Name = "mpdecimateMode"; diff --git a/Code/Media/FfmpegCommands.cs b/Code/Media/FfmpegCommands.cs index 312a276..19f90ad 100644 --- a/Code/Media/FfmpegCommands.cs +++ b/Code/Media/FfmpegCommands.cs @@ -19,8 +19,22 @@ namespace Flowframes //public static string padFilter = "pad=width=ceil(iw/2)*2:height=ceil(ih/2)*2:color=black@0"; public static string hdrFilter = @"-vf zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p"; public static string pngCompr = "-compression_level 3"; - public static string mpDecDef = "\"mpdecimate\""; - public static string mpDecAggr = "\"mpdecimate=hi=64*32:lo=64*32:frac=0.1\""; + + public enum MpDecSensitivity { Normal = 4, High = 20, VeryHigh = 32, Extreme = 40 } + + public static string GetMpdecimate (int sensitivity = 4, bool wrap = true) + { + string mpd = $"mpdecimate=hi=64*1024:lo=64*{sensitivity}:frac=1.0"; + return wrap ? mpd.Wrap() : mpd; + } + + public static string GetMpdecimate(bool wrap = true) + { + int mpdValIndex = Config.GetInt(Config.Key.mpdecimateMode); + var mpdVal = ((MpDecSensitivity[])Enum.GetValues(typeof(MpDecSensitivity)))[mpdValIndex]; + string mpd = $"mpdecimate=hi=64*1024:lo=64*{(int)mpdVal}:frac=1.0"; + return wrap ? mpd.Wrap() : mpd; + } public static int GetModulo () { diff --git a/Code/Media/FfmpegExtract.cs b/Code/Media/FfmpegExtract.cs index 848103b..6ab67f5 100644 --- a/Code/Media/FfmpegExtract.cs +++ b/Code/Media/FfmpegExtract.cs @@ -112,7 +112,7 @@ namespace Flowframes.Media Logger.Log($"VideoToFrames() - Alpha: {alpha} - Rate: {rate} - Size: {size} - Format: {format}", true, false, "ffmpeg"); string sizeStr = (size.Width > 1 && size.Height > 1) ? $"-s {size.Width}x{size.Height}" : ""; IoUtils.CreateDir(framesDir); - string mpStr = deDupe ? ((Config.GetInt(Config.Key.mpdecimateMode) == 0) ? mpDecDef : mpDecAggr) : ""; + string mpStr = deDupe ? GetMpdecimate(true) : ""; string filters = FormatUtils.ConcatStrings(new[] { GetPadFilter(), mpStr }); string vf = filters.Length > 2 ? $"-vf {filters}" : ""; string rateArg = (rate.GetFloat() > 0 && !deDupe) ? $" -fps_mode cfr -r {rate}" : "-fps_mode passthrough";