Imports StaxRip.CommandLine Imports StaxRip.UI Public Class NVEnc Inherits BasicVideoEncoder Property ParamsStore As New PrimitiveStore Public Overrides ReadOnly Property DefaultName As String Get Return "Nvidia | " + Params.Codec.OptionText.Replace("Nvidia ", "") End Get End Property Private ParamsValue As EncoderParams Property Params As EncoderParams Get If ParamsValue Is Nothing Then ParamsValue = New EncoderParams ParamsValue.Init(ParamsStore) End If Return ParamsValue End Get Set(value As EncoderParams) ParamsValue = value End Set End Property Overrides Sub ShowConfigDialog() Dim newParams As New EncoderParams Dim store = DirectCast(ObjectHelp.GetCopy(ParamsStore), PrimitiveStore) newParams.Init(store) Using form As New CommandLineForm(newParams) form.HTMLHelpFunc = Function() "

NVEnc Help

" + "

Right-clicking an option shows the local console help for the option.

" + $"

NVEnc Online Help

NVEnc Online Help

" + $"

NVEnc Console Help

{HelpDocument.ConvertChars(Package.NVEnc.CreateHelpfile())}
" Dim saveProfileAction = Sub() Dim enc = ObjectHelp.GetCopy(Of NVEnc)(Me) Dim params2 As New EncoderParams Dim store2 = DirectCast(ObjectHelp.GetCopy(store), PrimitiveStore) params2.Init(store2) enc.Params = params2 enc.ParamsStore = store2 SaveProfile(enc) End Sub form.cms.Items.Add(New MenuItemEx("Check Hardware", Sub() MsgInfo(ProcessHelp.GetConsoleOutput(Package.NVEnc.Path, "--check-hw")))) form.cms.Items.Add(New MenuItemEx("Check Features", Sub() g.ShowCode("Check Features", ProcessHelp.GetConsoleOutput(Package.NVEnc.Path, "--check-features")))) form.cms.Items.Add(New MenuItemEx("Check Environment", Sub() g.ShowCode("Check Environment", ProcessHelp.GetConsoleOutput(Package.NVEnc.Path, "--check-environment")))) MenuItemEx.Add(form.cms.Items, "Save Profile...", saveProfileAction).SetImage(Symbol.Save) If form.ShowDialog() = DialogResult.OK Then Params = newParams ParamsStore = store OnStateChange() End If End Using End Sub Overrides ReadOnly Property OutputExt() As String Get Return Params.Codec.ValueText End Get End Property Overrides Property Bitrate As Integer Get Return CInt(Params.Bitrate.Value) End Get Set(value As Integer) Params.Bitrate.Value = value End Set End Property Overrides Sub Encode() If OutputExt = "h265" Then Dim codecs = ProcessHelp.GetConsoleOutput(Package.NVEnc.Path, "--check-hw").Right("Codec(s)") If Not codecs.ToLowerInvariant.Contains("hevc") Then Throw New ErrorAbortException("NVEnc Error", "H.265/HEVC isn't supported by the graphics card.") End If End If p.Script.Synchronize() Using proc As New Proc proc.Header = "Video encoding" proc.Package = Package.NVEnc proc.SkipStrings = {"%]", " frames: "} proc.File = "cmd.exe" proc.Arguments = "/S /C """ + Params.GetCommandLine(True, True) + """" proc.Start() End Using AfterEncoding() End Sub Overrides Function GetMenu() As MenuList Dim ret As New MenuList ret.Add("Encoder Options", AddressOf ShowConfigDialog) ret.Add("Container Configuration", AddressOf OpenMuxerConfigDialog) Return ret End Function Overrides Property QualityMode() As Boolean Get Return Params.Mode.Value = 0 OrElse ((Params.Mode.Value = 3 OrElse Params.Mode.Value = 4) AndAlso Params.ConstantQualityMode.Value) End Get Set(Value As Boolean) End Set End Property Public Overrides ReadOnly Property CommandLineParams As CommandLineParams Get Return Params End Get End Property Shared Function Test() As String Dim tester As New ConsolAppTester tester.IgnoredSwitches = "help version check-device input-analyze input-format output-format video-streamid video-track vpp-delogo vpp-delogo-cb vpp-delogo-cr vpp-delogo-depth output vpp-delogo-pos vpp-delogo-select vpp-delogo-y check-avversion check-codecs caption2ass log check-encoders check-decoders check-formats check-protocols log-framelist fps audio-delay check-filters input raw avs vpy vpy-mt key-on-chapter video-tag audio-ignore-decode-error avcuvid-analyze audio-source audio-file seek format audio-copy audio-ignore-notrack-error audio-copy audio-codec vpp-perf-monitor avi audio-profile check-profiles avsync mux-option audio-bitrate audio-ignore audio-ignore audio-samplerate audio-resampler audio-stream dar audio-stream audio-stream audio-stream audio-filter chapter-copy chapter sub-copy input-res audio-disposition audio-metadata option-list sub-disposition sub-metadata process-codepage metadata attachment-copy chapter-no-trim video-metadata input-csp sub-source" tester.UndocumentedSwitches = "cbrhq vbrhq" tester.Package = Package.NVEnc tester.CodeFile = Folder.Startup.Parent + "Encoding\nvenc.vb" Return tester.Test End Function Public Class EncoderParams Inherits CommandLineParams Sub New() Title = "NVEnc Options" End Sub Property Decoder As New OptionParam With { .Text = "Decoder", .Options = {"AviSynth/VapourSynth", "NVEnc Hardware", "NVEnc Software", "QSVEnc (Intel)", "ffmpeg (Intel)", "ffmpeg (DXVA2)"}, .Values = {"avs", "nvhw", "nvsw", "qs", "ffqsv", "ffdxva"}} Property Mode As New OptionParam With { .Text = "Mode", .Switches = {"--cqp", "--cbr", "--cbrhq", "--vbr", "--vbrhq"}, .Options = {"CQP: Constant QP", "CBR: Constant Bitrate", "CBRHQ: Const. Bitrate HQ", "VBR: Variable Bitrate", "VBRHQ: Var. Bitrate HQ"}, .VisibleFunc = Function() Not Lossless.Value, .ArgsFunc = AddressOf GetModeArgs, .ImportAction = Sub(param, arg) If Mode.Switches.Contains(param) Then Mode.Value = Array.IndexOf(Mode.Switches.ToArray, param) End If If param = "--vbrhq" AndAlso arg = "0" Then ConstantQualityMode.Value = True End If End Sub} Property Codec As New OptionParam With { .Switch = "--codec", .HelpSwitch = "-c", .Text = "Codec", .Options = {"H.264", "H.265"}, .Values = {"h264", "h265"}, .ImportAction = Sub(param, arg) Codec.Value = If(arg.EqualsAny("h264", "avc"), 0, 1)} Property Profile As New OptionParam With { .Switch = "--profile", .Text = "Profile", .Name = "ProfileH264", .VisibleFunc = Function() Codec.ValueText = "h264", .Options = {"Baseline", "Main", "High", "High 444"}, .Init = 2} Property ProfileH265 As New OptionParam With { .Switch = "--profile", .Text = "Profile", .Name = "ProfileH265", .VisibleFunc = Function() Codec.ValueText = "h265", .Options = {"Main", "Main 10", "Main 444"}} Property ConstantQualityMode As New BoolParam With { .Switches = {"--vbr-quality"}, .Text = "Constant Quality Mode", .VisibleFunc = Function() Mode.Value = 3 OrElse Mode.Value = 4} Property QPAdvanced As New BoolParam With { .Text = "Show advanced QP settings", .VisibleFunc = Function() Mode.Value = 0} Property Bitrate As New NumParam With { .Switches = {"--cbr", "--cbrhq", "--vbr", "--vbrhq"}, .Text = "Bitrate", .Init = 5000, .VisibleFunc = Function() Mode.Value > 0, .Config = {0, 1000000, 100}} Property QP As New NumParam With { .Switches = {"--cqp"}, .Text = "QP", .Init = 18, .VisibleFunc = Function() Mode.Value = 0 AndAlso Not QPAdvanced.Value, .Config = {0, 51}} Property QPI As New NumParam With { .Switches = {"--cqp"}, .Text = "QP I", .Init = 18, .VisibleFunc = Function() Mode.Value = 0 AndAlso QPAdvanced.Value, .Config = {0, 51}} Property QPP As New NumParam With { .Switches = {"--cqp"}, .Text = "QP P", .Init = 20, .VisibleFunc = Function() Mode.Value = 0 AndAlso QPAdvanced.Value, .Config = {0, 51}} Property QPB As New NumParam With { .Switches = {"--cqp"}, .Text = "QP B", .Init = 22, .VisibleFunc = Function() Mode.Value = 0 AndAlso QPAdvanced.Value, .Config = {0, 51}} Property VbrQuality As New NumParam With { .Switch = "--vbr-quality", .Text = "VBR Quality", .Config = {0, 51, 1, 1}, .VisibleFunc = Function() Mode.Value = 3 OrElse Mode.Value = 4, .ArgsFunc = Function() If ConstantQualityMode.Value OrElse VbrQuality.Value <> VbrQuality.DefaultValue Then Return "--vbr-quality " & VbrQuality.Value End If End Function} Property AQ As New BoolParam With { .Switch = "--aq", .Text = "Adaptive Quantization (Spatial)"} Property Lossless As New BoolParam With { .Switch = "--lossless", .Text = "Lossless", .VisibleFunc = Function() Codec.ValueText = "h264" AndAlso Profile.Visible} Property MaxCLL As New NumParam With { .Switch = "--max-cll", .Text = "Maximum CLL", .VisibleFunc = Function() Codec.ValueText = "h265", .Config = {0, Integer.MaxValue, 50}, .ArgsFunc = Function() If(MaxCLL.Value <> 0 OrElse MaxFALL.Value <> 0, "--max-cll """ & MaxCLL.Value & "," & MaxFALL.Value & """", ""), .ImportAction = Sub(param, arg) If arg = "" Then Exit Sub End If Dim a = arg.Trim(""""c).Split(","c) MaxCLL.Value = a(0).ToInt MaxFALL.Value = a(1).ToInt End Sub} Property MaxFALL As New NumParam With { .Switches = {"--max-cll"}, .Text = "Maximum FALL", .Config = {0, Integer.MaxValue, 50}, .VisibleFunc = Function() Codec.ValueText = "h265"} Property Interlace As New OptionParam With { .Text = "Interlace", .Switch = "--interlace", .Options = {"Disabled", "Top Field First", "Bottom Field First"}, .Values = {"", "tff", "bff"}} Property Custom As New StringParam With { .Text = "Custom", .Quotes = QuotesMode.Never, .AlwaysOn = True} Property Tweak As New BoolParam With {.Switch = "--vpp-tweak", .Text = "Tweaking", .ArgsFunc = AddressOf GetTweakArgs} Property TweakContrast As New NumParam With {.Text = " Contrast", .HelpSwitch = "--vpp-tweak", .Init = 1.0, .Config = {-2.0, 2.0, 0.1, 1}} Property TweakGamma As New NumParam With {.Text = " Gamma", .HelpSwitch = "--vpp-tweak", .Init = 1.0, .Config = {0.1, 10.0, 0.1, 1}} Property TweakSaturation As New NumParam With {.Text = " Saturation", .HelpSwitch = "--vpp-tweak", .Init = 1.0, .Config = {0.0, 3.0, 0.1, 1}} Property TweakHue As New NumParam With {.Text = " Hue", .HelpSwitch = "--vpp-tweak", .Config = {-180.0, 180.0, 0.1, 1}} Property TweakBrightness As New NumParam With {.Text = " Brightness", .HelpSwitch = "--vpp-tweak", .Config = {-1.0, 1.0, 0.1, 1}} Property Pmd As New BoolParam With {.Switch = "--vpp-pmd", .Text = "Denoise using PMD", .ArgsFunc = AddressOf GetPmdArgs} Property PmdApplyCount As New NumParam With {.Text = " Apply Count", .Init = 2} Property PmdStrength As New NumParam With {.Text = " Strength", .Name = "PmdStrength", .Init = 100.0, .Config = {0, 100, 1, 1}} Property PmdThreshold As New NumParam With {.Text = " Threshold", .Init = 100.0, .Config = {0, 255, 1, 1}} Property Knn As New BoolParam With {.Switch = "--vpp-knn", .Text = "Denoise using K-nearest neighbor", .ArgsFunc = AddressOf GetKnnArgs} Property KnnRadius As New NumParam With {.Text = " Radius", .Init = 3} Property KnnStrength As New NumParam With {.Text = " Strength", .Init = 0.08, .Config = {0, 1, 0.02, 2}} Property KnnLerp As New NumParam With {.Text = " Lerp", .Init = 0.2, .Config = {0, Integer.MaxValue, 0.1, 1}} Property KnnThLerp As New NumParam With {.Text = " TH Lerp", .Init = 0.8, .Config = {0, 1, 0.1, 1}} Property Pad As New BoolParam With {.Switch = "--vpp-pad", .Text = "Padding", .ArgsFunc = AddressOf GetPaddingArgs} Property PadLeft As New NumParam With {.Text = " Left"} Property PadTop As New NumParam With {.Text = " Top"} Property PadRight As New NumParam With {.Text = " Right"} Property PadBottom As New NumParam With {.Text = " Bottom"} Property Deband As New BoolParam With {.Text = "Deband", .Switch = "--vpp-deband", .ArgsFunc = AddressOf GetDebandArgs} Property DebandRange As New NumParam With {.Text = " Range", .HelpSwitch = "--vpp-deband", .Init = 15, .Config = {0, 127}} Property DebandSample As New NumParam With {.Text = " Sample", .HelpSwitch = "--vpp-deband", .Init = 1, .Config = {0, 2}} Property DebandThre As New NumParam With {.Text = " Threshold", .HelpSwitch = "--vpp-deband", .Init = 15, .Config = {0, 31}} Property DebandThreY As New NumParam With {.Text = " Y", .HelpSwitch = "--vpp-deband", .Init = 15, .Config = {0, 31}} Property DebandThreCB As New NumParam With {.Text = " CB", .HelpSwitch = "--vpp-deband", .Init = 15, .Config = {0, 31}} Property DebandThreCR As New NumParam With {.Text = " CR", .HelpSwitch = "--vpp-deband", .Init = 15, .Config = {0, 31}} Property DebandDither As New NumParam With {.Text = " Dither", .HelpSwitch = "--vpp-deband", .Init = 15, .Config = {0, 31}} Property DebandDitherY As New NumParam With {.Text = " Y", .HelpSwitch = "--vpp-deband", .Name = "vpp-deband_dither_y", .Init = 15, .Config = {0, 31}} Property DebandDitherC As New NumParam With {.Text = " C", .HelpSwitch = "--vpp-deband", .Init = 15, .Config = {0, 31}} Property DebandSeed As New NumParam With {.Text = " Seed", .HelpSwitch = "--vpp-deband", .Init = 1234} Property DebandBlurfirst As New BoolParam With {.Text = "Blurfirst", .HelpSwitch = "--vpp-deband", .LeftMargin = g.MainForm.FontHeight * 1.3} Property DebandRandEachFrame As New BoolParam With {.Text = "Rand Each Frame", .HelpSwitch = "--vpp-deband", .LeftMargin = g.MainForm.FontHeight * 1.3} Property AfsPreset As New OptionParam With {.Text = "Preset", .HelpSwitch = "--vpp-afs", .Options = {"Default", "Triple", "Double", "Anime", "Cinema", "Min_afterimg", "24fps", "24fps_sd", "30fps"}, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsINI As New StringParam With {.Text = "INI", .HelpSwitch = "--vpp-afs", .BrowseFile = True, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsLeft As New NumParam With {.Text = "Left", .HelpSwitch = "--vpp-afs", .Init = 32, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsRight As New NumParam With {.Text = "Right", .HelpSwitch = "--vpp-afs", .Init = 32, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsTop As New NumParam With {.Text = "Top", .HelpSwitch = "--vpp-afs", .Init = 16, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsBottom As New NumParam With {.Text = "Bottom", .HelpSwitch = "--vpp-afs", .Init = 16, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsMethodSwitch As New NumParam With {.Text = "Method Switch", .HelpSwitch = "--vpp-afs", .Config = {0, 256}, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsCoeffShift As New NumParam With {.Text = "Coeff Shift", .HelpSwitch = "--vpp-afs", .Init = 192, .Config = {0, 256}, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsThreShift As New NumParam With {.Text = "Threshold Shift", .HelpSwitch = "--vpp-afs", .Init = 128, .Config = {0, 1024}, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsThreDeint As New NumParam With {.Text = "Threshold Deint", .HelpSwitch = "--vpp-afs", .Init = 48, .Config = {0, 1024}, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsThreMotionY As New NumParam With {.Text = "Threshold Motion Y", .HelpSwitch = "--vpp-afs", .Init = 112, .Config = {0, 1024}, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsThreMotionC As New NumParam With {.Text = "Threshold Motion C", .HelpSwitch = "--vpp-afs", .Init = 224, .Config = {0, 1024}, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsLevel As New NumParam With {.Text = "Level", .HelpSwitch = "--vpp-afs", .Init = 3, .Config = {0, 4}, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsShift As New BoolParam With {.Text = "Shift", .HelpSwitch = "--vpp-afs", .LeftMargin = g.MainForm.FontHeight * 1.3, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsDrop As New BoolParam With {.Text = "Drop", .HelpSwitch = "--vpp-afs", .LeftMargin = g.MainForm.FontHeight * 1.3, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsSmooth As New BoolParam With {.Text = "Smooth", .HelpSwitch = "--vpp-afs", .LeftMargin = g.MainForm.FontHeight * 1.3, .VisibleFunc = Function() Deinterlacer.Value = 2} Property Afs24fps As New BoolParam With {.Text = "24 FPS", .HelpSwitch = "--vpp-afs", .LeftMargin = g.MainForm.FontHeight * 1.3, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsTune As New BoolParam With {.Text = "Tune", .HelpSwitch = "--vpp-afs", .LeftMargin = g.MainForm.FontHeight * 1.3, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsRFF As New BoolParam With {.Text = "RFF", .HelpSwitch = "--vpp-afs", .LeftMargin = g.MainForm.FontHeight * 1.3, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsTimecode As New BoolParam With {.Text = "Timecode", .HelpSwitch = "--vpp-afs", .LeftMargin = g.MainForm.FontHeight * 1.3, .VisibleFunc = Function() Deinterlacer.Value = 2} Property AfsLog As New BoolParam With {.Text = "Log", .HelpSwitch = "--vpp-afs", .LeftMargin = g.MainForm.FontHeight * 1.3, .VisibleFunc = Function() Deinterlacer.Value = 2} Property Edgelevel As New BoolParam With {.Text = "Edgelevel filter to enhance edge", .Switches = {"--vpp-edgelevel"}, .ArgsFunc = AddressOf GetEdge} Property EdgelevelStrength As New NumParam With {.Text = " Strength", .HelpSwitch = "--vpp-edgelevel", .Config = {0, 31, 1, 1}} Property EdgelevelThreshold As New NumParam With {.Text = " Threshold", .HelpSwitch = "--vpp-edgelevel", .Init = 20, .Config = {0, 255, 1, 1}} Property EdgelevelBlack As New NumParam With {.Text = " Black", .HelpSwitch = "--vpp-edgelevel", .Config = {0, 31, 1, 1}} Property EdgelevelWhite As New NumParam With {.Text = " White", .HelpSwitch = "--vpp-edgelevel", .Config = {0, 31, 1, 1}} Property Unsharp As New BoolParam With {.Text = "Unsharp Filter", .Switches = {"--vpp-unsharp"}, .ArgsFunc = AddressOf GetUnsharp} Property UnsharpRadius As New NumParam With {.Text = " Radius", .HelpSwitch = "--vpp-unsharp", .Init = 3, .Config = {1, 9}} Property UnsharpWeight As New NumParam With {.Text = " Weight", .HelpSwitch = "--vpp-unsharp", .Init = 0.5, .Config = {0, 10, 0.5, 1}} Property UnsharpThreshold As New NumParam With {.Text = " Threshold", .HelpSwitch = "--vpp-unsharp", .Init = 10, .Config = {0, 255, 1, 1}} Property Warpsharp As New BoolParam With {.Text = "Warpsharp filter", .Switches = {"--vpp-warpsharp"}, .ArgsFunc = AddressOf GetWarpsharpArgs} Property WarpsharpThreshold As New NumParam With {.Text = " Threshold", .HelpSwitch = "--vpp-warpsharp", .Init = 128, .Config = {0, 255, 1, 1}} Property WarpsharpBlur As New NumParam With {.Text = " Blur", .HelpSwitch = "--vpp-warpsharp", .Init = 2, .Config = {0, 30, 1, 0}} Property WarpsharpType As New NumParam With {.Text = " Type", .HelpSwitch = "--vpp-warpsharp", .Init = 0, .Config = {0, 1, 1, 0}} Property WarpsharpDepth As New NumParam With {.Text = " Depth", .HelpSwitch = "--vpp-warpsharp", .Init = 16, .Config = {-128, 128, 1, 1}} Property WarpsharpChroma As New NumParam With {.Text = " Chroma", .HelpSwitch = "--vpp-warpsharp", .Init = 0, .Config = {0, 1, 1, 0}} Property NnediField As New OptionParam With {.Text = "Field", .HelpSwitch = "--vpp-nnedi", .Options = {"auto", "top", "bottom"}, .VisibleFunc = Function() Deinterlacer.Value = 3} Property NnediNns As New OptionParam With {.Text = "NNS", .HelpSwitch = "--vpp-nnedi", .Init = 1, .Options = {"16", "32", "64", "128", "256"}, .VisibleFunc = Function() Deinterlacer.Value = 3} Property NnediNsize As New OptionParam With {.Text = "N Size", .HelpSwitch = "--vpp-nnedi", .Init = 6, .Options = {"8x6", "16x6", "32x6", "48x6", "8x4", "16x4", "32x4"}, .VisibleFunc = Function() Deinterlacer.Value = 3} Property NnediQuality As New OptionParam With {.Text = "Quality", .HelpSwitch = "--vpp-nnedi", .Options = {"fast", "slow"}, .VisibleFunc = Function() Deinterlacer.Value = 3} Property NnediPrescreen As New OptionParam With {.Text = "Pre Screen", .HelpSwitch = "--vpp-nnedi", .Init = 4, .Options = {"none", "original", "new", "original_block", "new_block"}, .VisibleFunc = Function() Deinterlacer.Value = 3} Property NnediErrortype As New OptionParam With {.Text = "Error Type", .HelpSwitch = "--vpp-nnedi", .Options = {"abs", "square"}, .VisibleFunc = Function() Deinterlacer.Value = 3} Property NnediPrec As New OptionParam With {.Text = "Prec", .HelpSwitch = "--vpp-nnedi", .Options = {"auto", "fp16", "fp32"}, .VisibleFunc = Function() Deinterlacer.Value = 3} Property NnediWeightfile As New StringParam With {.Text = "Weight File", .HelpSwitch = "--vpp-nnedi", .BrowseFile = True, .VisibleFunc = Function() Deinterlacer.Value = 3} Property SelectEvery As New BoolParam With {.Text = "Select Every", .Switches = {"--vpp-select-every"}, .ArgsFunc = AddressOf GetSelectEvery} Property SelectEveryValue As New NumParam With {.Text = " Value", .HelpSwitch = "--vpp-select-every", .Init = 2} Property SelectEveryOffsets As New StringParam With {.Text = " Offsets", .HelpSwitch = "--vpp-select-every", .Expand = False} Property TransformFlipX As New BoolParam With {.Switch = "--vpp-transform", .Text = "Flip X", .Label = "Transform", .LeftMargin = g.MainForm.FontHeight * 1.5, .ArgsFunc = AddressOf GetTransform} Property TransformFlipY As New BoolParam With {.Text = "Flip Y", .LeftMargin = g.MainForm.FontHeight * 1.5, .HelpSwitch = "--vpp-transform"} Property TransformTranspose As New BoolParam With {.Text = "Transpose", .LeftMargin = g.MainForm.FontHeight * 1.5, .HelpSwitch = "--vpp-transform"} Property Smooth As New BoolParam With {.Text = "Smooth", .Switch = "--vpp-smooth", .ArgsFunc = AddressOf GetSmoothArgs} Property SmoothQuality As New NumParam With {.Text = " Quality", .HelpSwitch = "--vpp-smooth", .Init = 3, .Config = {1, 6}} Property SmoothQP As New NumParam With {.Text = " QP", .HelpSwitch = "--vpp-smooth", .Config = {0, 100, 10, 1}} Property SmoothPrec As New OptionParam With {.Text = " Precision", .HelpSwitch = "--vpp-smooth", .Options = {"Auto", "FP16", "FP32"}} Property Colorspace As New BoolParam With {.Text = "Colorspace", .Switch = "--vpp-colorspace", .ArgsFunc = AddressOf GetColorspaceArgs} Property ColorspaceMatrixFrom As New OptionParam With {.Text = New String(" "c, 6) + "Matrix From", .HelpSwitch = "--vpp-colorspace", .Init = 0, .Options = {"Undefined", "auto", "bt709", "smpte170m", "bt470bg", "smpte240m", "YCgCo", "fcc", "GBR", "bt2020nc", "bt2020c"}} Property ColorspaceMatrixTo As New OptionParam With {.Text = New String(" "c, 12) + "Matrix To", .HelpSwitch = "--vpp-colorspace", .Init = 0, .Options = {"auto", "bt709", "smpte170m", "bt470bg", "smpte240m", "YCgCo", "fcc", "GBR", "bt2020nc", "bt2020c"}, .VisibleFunc = Function() ColorspaceMatrixFrom.Value > 0} Property ColorspaceColorprimFrom As New OptionParam With {.Text = New String(" "c, 6) + "Colorprim From", .HelpSwitch = "--vpp-colorspace", .Init = 0, .Options = {"Undefined", "auto", "bt709", "smpte170m", "bt470m", "bt470bg", "smpte240m", "film", "bt2020"}} Property ColorspaceColorprimTo As New OptionParam With {.Text = New String(" "c, 12) + "Colorprim To", .HelpSwitch = "--vpp-colorspace", .Init = 0, .Options = {"auto", "bt709", "smpte170m", "bt470m", "bt470bg", "smpte240m", "film", "bt2020"}, .VisibleFunc = Function() ColorspaceColorprimFrom.Value > 0} Property ColorspaceTransferFrom As New OptionParam With {.Text = New String(" "c, 6) + "Transfer From", .HelpSwitch = "--vpp-colorspace", .Init = 0, .Options = {"Undefined", "auto", "bt709", "smpte170m", "bt470m", "bt470bg", "smpte240m", "linear", "log100", "log316", "iec61966-2-4", "iec61966-2-1", "bt2020-10", "bt2020-12", "smpte2084", "arib-std-b67"}} Property ColorspaceTransferTo As New OptionParam With {.Text = New String(" "c, 12) + "Transfer To", .HelpSwitch = "--vpp-colorspace", .Init = 0, .Options = {"auto", "bt709", "smpte170m", "bt470m", "bt470bg", "smpte240m", "linear", "log100", "log316", "iec61966-2-4", "iec61966-2-1", "bt2020-10", "bt2020-12", "smpte2084", "arib-std-b67"}, .VisibleFunc = Function() ColorspaceTransferFrom.Value > 0} Property ColorspaceRangeFrom As New OptionParam With {.Text = New String(" "c, 6) + "Range From", .HelpSwitch = "--vpp-colorspace", .Init = 0, .Options = {"Undefined", "auto", "limited", "full"}} Property ColorspaceRangeTo As New OptionParam With {.Text = New String(" "c, 12) + "Range To", .HelpSwitch = "--vpp-colorspace", .Init = 0, .Options = {"auto", "limited", "full"}, .VisibleFunc = Function() ColorspaceRangeFrom.Value > 0} Property ColorspaceHdr2sdr As New OptionParam With {.Text = New String(" "c, 0) + "HDR10 to SDR using this tonemapping:", .HelpSwitch = "--vpp-colorspace", .Init = 0, .Options = {"none", "hable", "mobius", "reinhard", "bt2390"}} Property ColorspaceHdr2sdrSourcepeak As New NumParam With {.Text = New String(" "c, 6) + "Source Peak", .HelpSwitch = "--vpp-colorspace", .Init = 1000, .Config = {0, 10000, 1, 1}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value > 0} Property ColorspaceHdr2sdrLdrnits As New NumParam With {.Text = New String(" "c, 6) + "Target brightness", .HelpSwitch = "--vpp-colorspace", .Init = 100.0, .Config = {0, 1000, 1, 1}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value > 0} Property ColorspaceHdr2sdrDesatbase As New NumParam With {.Text = New String(" "c, 6) + "Offset for desaturation curve", .HelpSwitch = "--vpp-colorspace", .Init = 0.18, .Config = {0, 10, 0.01, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value > 0} Property ColorspaceHdr2sdrDesatstrength As New NumParam With {.Text = New String(" "c, 6) + "Strength of desaturation curve", .HelpSwitch = "--vpp-colorspace", .Init = 0.75, .Config = {0, 10, 0.01, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value > 0} Property ColorspaceHdr2sdrDesatexp As New NumParam With {.Text = New String(" "c, 6) + "Exponent of the desaturation curve", .HelpSwitch = "--vpp-colorspace", .Init = 1.5, .Config = {0, 100, 0.01, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value > 0} Property ColorspaceHdr2sdrHableA As New NumParam With {.Text = New String(" "c, 6) + "a", .HelpSwitch = "--vpp-colorspace", .Init = 0.22, .Config = {0, 1, 0.01, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value = 1} Property ColorspaceHdr2sdrHableB As New NumParam With {.Text = New String(" "c, 6) + "b", .HelpSwitch = "--vpp-colorspace", .Init = 0.3, .Config = {0, 1, 0.01, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value = 1} Property ColorspaceHdr2sdrHableC As New NumParam With {.Text = New String(" "c, 6) + "c", .HelpSwitch = "--vpp-colorspace", .Init = 0.1, .Config = {0, 1, 0.01, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value = 1} Property ColorspaceHdr2sdrHableD As New NumParam With {.Text = New String(" "c, 6) + "d", .HelpSwitch = "--vpp-colorspace", .Init = 0.2, .Config = {0, 1, 0.01, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value = 1} Property ColorspaceHdr2sdrHableE As New NumParam With {.Text = New String(" "c, 6) + "e", .HelpSwitch = "--vpp-colorspace", .Init = 0.01, .Config = {0, 1, 0.01, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value = 1} Property ColorspaceHdr2sdrHableF As New NumParam With {.Text = New String(" "c, 6) + "f", .HelpSwitch = "--vpp-colorspace", .Init = 0.3, .Config = {0, 1, 0.01, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value = 1} Property ColorspaceHdr2sdrMobiusTransition As New NumParam With {.Text = New String(" "c, 6) + "Transition", .HelpSwitch = "--vpp-colorspace", .Init = 0.3, .Config = {0, 10, 0.01, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value = 2} Property ColorspaceHdr2sdrMobiusPeak As New NumParam With {.Text = New String(" "c, 6) + "Peak", .HelpSwitch = "--vpp-colorspace", .Init = 1.0, .Config = {0, 100, 0.05, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value = 2, .Name = "MobiusPeak"} Property ColorspaceHdr2sdrReinhardContrast As New NumParam With {.Text = New String(" "c, 6) + "Contrast", .HelpSwitch = "--vpp-colorspace", .Init = 0.5, .Config = {0, 1, 0.01, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value = 3} Property ColorspaceHdr2sdrReinhardPeak As New NumParam With {.Text = New String(" "c, 6) + "Peak", .HelpSwitch = "--vpp-colorspace", .Init = 1.0, .Config = {0, 100, 0.05, 2}, .VisibleFunc = Function() ColorspaceHdr2sdr.Value = 3, .Name = "ReinhardPeak"} Property Deinterlacer As New OptionParam With {.Text = "Deinterlacing Method", .HelpSwitch = "", .Init = 0, .Options = {"None", "Hardware (HW Decoder must be set to work!)", "AFS (Activate Auto Field Shift)", "Nnedi", "Yadif"}, .ArgsFunc = AddressOf GetDeinterlacerArgs} Overrides ReadOnly Property Items As List(Of CommandLineParam) Get If ItemsValue Is Nothing Then ItemsValue = New List(Of CommandLineParam) Add("Basic", Mode, Codec, New OptionParam With {.Switch = "--preset", .HelpSwitch = "-u", .Text = "Preset", .Init = 6, .Options = {"Default", "Quality", "Performance", "P1 (Performance)", "P2", "P3", "P4 (Default)", "P5", "P6", "P7 (Quality)"}, .Values = {"default", "quality", "performance", "P1", "P2", "P3", "P4", "P5", "P6", "P7"}}, New OptionParam With {.Switch = "--output-depth", .Text = "Depth", .Options = {"8-Bit", "10-Bit"}, .Values = {"8", "10"}}, Profile, ProfileH265, New OptionParam With {.Switch = "--tier", .Text = "Tier", .VisibleFunc = Function() Codec.ValueText = "h265", .Options = {"Main", "High"}, .Values = {"main", "high"}}, New OptionParam With {.Name = "LevelH264", .Switch = "--level", .Text = "Level", .VisibleFunc = Function() Codec.ValueText = "h264", .Options = {"Unrestricted", "1", "1.1", "1.2", "1.3", "2", "2.1", "2.2", "3", "3.1", "3.2", "4", "4.1", "4.2", "5", "5.1", "5.2"}}, New OptionParam With {.Name = "LevelH265", .Switch = "--level", .Text = "Level", .VisibleFunc = Function() Codec.ValueText = "h265", .Options = {"Unrestricted", "1", "2", "2.1", "3", "3.1", "4", "4.1", "5", "5.1", "5.2", "6", "6.1", "6.2"}}, QPAdvanced, Bitrate, QP, QPI, QPP, QPB) Add("Rate Control", New StringParam With {.Switch = "--dynamic-rc", .Text = "Dynamic RC"}, New OptionParam With {.Switch = "--multipass", .Text = "Multipass", .Options = {"None", "2Pass-Quarter", "2Pass-Full"}, .VisibleFunc = Function() Mode.Value = 1 OrElse Mode.Value = 3}, New NumParam With {.Switch = "--qp-init", .Text = "Initial QP", .Config = {0, Integer.MaxValue, 1}}, New NumParam With {.Switch = "--qp-max", .Text = "Maximum QP", .Config = {0, Integer.MaxValue, 1}}, New NumParam With {.Switch = "--qp-min", .Text = "Minimum QP", .Config = {0, Integer.MaxValue, 1}}, New NumParam With {.Switch = "--max-bitrate", .Text = "Max Bitrate", .Init = 17500, .Config = {0, Integer.MaxValue, 1}}, New NumParam With {.Switch = "--vbv-bufsize", .Text = "VBV Bufsize", .Config = {0, Integer.MaxValue, 1}}, New NumParam With {.Switch = "--aq-strength", .Text = "AQ Strength", .Config = {0, 15}, .VisibleFunc = Function() AQ.Value}, VbrQuality, ConstantQualityMode, AQ, New BoolParam With {.Switch = "--aq-temporal", .Text = "Adaptive Quantization (Temporal)"}, Lossless) Add("Slice Decision", New OptionParam With {.Switch = "--direct", .Text = "B-Direct Mode", .Options = {"Automatic", "None", "Spatial", "Temporal"}, .VisibleFunc = Function() Codec.ValueText = "h264"}, New OptionParam With {.Switch = "--bref-mode", .Text = "B-Frame Ref. Mode", .Options = {"Disabled", "Each", "Middle"}}, New NumParam With {.Switch = "--bframes", .HelpSwitch = "-b", .Text = "B-Frames", .Init = 3, .Config = {0, 16}}, New NumParam With {.Switch = "--ref", .Text = "Ref Frames", .Init = 3, .Config = {0, 16}}, New NumParam With {.Switch = "--gop-len", .Text = "GOP Length", .Config = {0, Integer.MaxValue, 1}}, New NumParam With {.Switch = "--lookahead", .Text = "Lookahead", .Config = {0, 32}}, New NumParam With {.Switch = "--slices", .Text = "Slices", .Config = {0, Integer.MaxValue, 1}}, New NumParam With {.Switch = "--multiref-l0", .Text = "Multi Ref L0", .Config = {0, 7}}, New NumParam With {.Switch = "--multiref-l1", .Text = "Multi Ref L1", .Config = {0, 7}}, New BoolParam With {.Switch = "--strict-gop", .Text = "Strict GOP"}, New BoolParam With {.NoSwitch = "--no-b-adapt", .Text = "B-Adapt", .Init = True}, New BoolParam With {.NoSwitch = "--no-i-adapt", .Text = "I-Adapt", .Init = True}, New BoolParam With {.Switch = "--nonrefp", .Text = "Enable adapt. non-reference P frame insertion"}) Add("Analysis", New OptionParam With {.Switch = "--adapt-transform", .Text = "Adaptive Transform", .Options = {"Automatic", "Enabled", "Disabled"}, .Values = {"", "--adapt-transform", "--no-adapt-transform"}, .VisibleFunc = Function() Codec.ValueText = "h264"}, New NumParam With {.Switch = "--cu-min", .Text = "Minimum CU Size", .Config = {0, 32, 16}}, New NumParam With {.Switch = "--cu-max", .Text = "Maximum CU Size", .Config = {0, 64, 16}}, New BoolParam With {.Switch = "--weightp", .Text = "Enable weighted prediction in P slices"}) Add("VPP | Misc", New StringParam With {.Switch = "--vpp-subburn", .Text = "Subburn"}, New OptionParam With {.Switch = "--vpp-resize", .Text = "Resize", .Options = {"Disabled", "Default", "Bilinear", "Cubic", "Cubic_B05C03", "Cubic_bSpline", "Cubic_Catmull", "Lanczos", "NN", "NPP_Linear", "Spline 36", "Super"}}, New OptionParam With {.Switch = "--vpp-rotate", .Text = "Rotate", .Options = {"Disabled", "90", "180", "270"}}, New BoolParam With {.Switch = "--vpp-rff", .Text = "Enable repeat field flag", .VisibleFunc = Function() Decoder.ValueText.EqualsAny("nvhw", "nvsw")}, SelectEvery, SelectEveryValue, SelectEveryOffsets) Add("VPP | Misc 2", Tweak, TweakBrightness, TweakContrast, TweakSaturation, TweakGamma, TweakHue, Pad, PadLeft, PadTop, PadRight, PadBottom, Smooth, SmoothQuality, SmoothQP, SmoothPrec) Add("VPP | Misc 3", TransformFlipX, TransformFlipY, TransformTranspose, New StringParam With {.Switch = "--vpp-decimate", .Text = "Decimate"}, New StringParam With {.Switch = "--vpp-mpdecimate", .Text = "MP Decimate"}) Add("VPP | Colorspace", Colorspace, ColorspaceMatrixFrom, ColorspaceMatrixTo, ColorspaceColorprimFrom, ColorspaceColorprimTo, ColorspaceTransferFrom, ColorspaceTransferTo, ColorspaceRangeFrom, ColorspaceRangeTo) Add("VPP | Colorspace | HDR2SDR", ColorspaceHdr2sdr, ColorspaceHdr2sdrSourcepeak, ColorspaceHdr2sdrLdrnits, ColorspaceHdr2sdrDesatbase, ColorspaceHdr2sdrDesatstrength, ColorspaceHdr2sdrDesatexp, ColorspaceHdr2sdrHableA, ColorspaceHdr2sdrHableB, ColorspaceHdr2sdrHableC, ColorspaceHdr2sdrHableD, ColorspaceHdr2sdrHableE, ColorspaceHdr2sdrHableF, ColorspaceHdr2sdrMobiusTransition, ColorspaceHdr2sdrMobiusPeak, ColorspaceHdr2sdrReinhardContrast, ColorspaceHdr2sdrReinhardPeak) Add("VPP | Deband", Deband, DebandRange, DebandSample, DebandThre, DebandThreY, DebandThreCB, DebandThreCR, DebandDither, DebandDitherY, DebandDitherC, DebandSeed, DebandBlurfirst, DebandRandEachFrame) Add("VPP | Deinterlace", Deinterlacer, New OptionParam With {.Switch = "--vpp-deinterlace", .Text = "Deinterlace Mode", .VisibleFunc = Function() Deinterlacer.Value = 1 AndAlso Decoder.ValueText.EqualsAny("nvhw"), .AlwaysOn = True, .Options = {"Normal", "Adaptive", "Bob"}}, New OptionParam With {.Switch = "--vpp-yadif", .Text = "Yadif Mode", .VisibleFunc = Function() Deinterlacer.Value = 4, .AlwaysOn = True, .Options = {"Auto", "TFF", "BFF", "Bob", "Bob TFF", "Bob BFF"}, .Values = {"", "mode=tff", "mode=bff", "mode=bob", "mode=bob_tff", "mode=bob_bff"}}, NnediField, NnediNns, NnediNsize, NnediQuality, NnediPrescreen, NnediErrortype, NnediPrec, NnediWeightfile, AfsINI, AfsPreset, AfsLeft, AfsRight, AfsTop, AfsBottom, AfsMethodSwitch, AfsCoeffShift, AfsThreShift, AfsThreDeint, AfsThreMotionY, AfsThreMotionC, AfsLevel) Add("VPP | Deinterlace | AFS 2", AfsShift, AfsDrop, AfsSmooth, Afs24fps, AfsTune, AfsRFF, AfsTimecode, AfsLog) Add("VPP | Denoise", Knn, KnnRadius, KnnStrength, KnnLerp, KnnThLerp, Pmd, PmdApplyCount, PmdStrength, PmdThreshold) Add("VPP | Sharpness", New OptionParam With {.Switch = "--vpp-gauss", .Text = "Gauss", .Options = {"Disabled", "3", "5", "7"}}, Edgelevel, EdgelevelStrength, EdgelevelThreshold, EdgelevelBlack, EdgelevelWhite, Unsharp, UnsharpRadius, UnsharpWeight, UnsharpThreshold, Warpsharp, WarpsharpThreshold, WarpsharpBlur, WarpsharpType, WarpsharpDepth, WarpsharpChroma) Add("VUI", New StringParam With {.Switch = "--master-display", .Text = "Master Display", .VisibleFunc = Function() Codec.ValueText = "h265"}, New StringParam With {.Switch = "--sar", .Text = "Sample Aspect Ratio", .Init = "auto", .Menu = s.ParMenu, .ArgsFunc = AddressOf GetSAR}, New StringParam With {.Switch = "--dhdr10-info", .Text = "HDR10 Info File", .BrowseFile = True}, New OptionParam With {.Switch = "--videoformat", .Text = "Videoformat", .Options = {"Undefined", "NTSC", "Component", "PAL", "SECAM", "MAC"}}, New OptionParam With {.Switch = "--colormatrix", .Text = "Colormatrix", .Options = {"Undefined", "BT 2020 C", "BT 2020 NC", "BT 470 BG", "BT 709", "FCC", "GBR", "SMPTE 170 M", "SMPTE 240 M", "YCgCo"}}, New OptionParam With {.Switch = "--colorprim", .Text = "Colorprim", .Options = {"Undefined", "BT 2020", "BT 470 BG", "BT 470 M", "BT 709", "Film", "SMPTE 170 M", "SMPTE 240 M"}}, New OptionParam With {.Switch = "--transfer", .Text = "Transfer", .Options = {"Undefined", "ARIB-STD-B67", "Auto", "BT 1361 E", "BT 2020-10", "BT 2020-12", "BT 470 BG", "BT 470 M", "BT 709", "IEC 61966-2-1", "IEC 61966-2-4", "Linear", "Log 100", "Log 316", "SMPTE 170 M", "SMPTE 240 M", "SMPTE 2084", "SMPTE 428"}}, New OptionParam With {.Switch = "--atc-sei", .Text = "ATC SEI", .Init = 1, .Options = {"Undef", "Unknown", "Auto", "Auto_Res", "BT 709", "SMPTE 170 M", "BT 470 M", "BT 470 BG", "SMPTE 240 M", "Linear", "Log 100", "Log 316", "IEC 61966-2-4", "BT 1361 E", "IEC 61966-2-1", "BT 2020-10", "BT 2020-12", "SMPTE 2084", "SMPTE 428", "ARIB-STD-B67"}}, New OptionParam With {.Switch = "--colorrange", .Text = "Colorrange", .Options = {"Undefined", "Auto", "Limited", "TV", "Full", "PC"}}, MaxCLL, MaxFALL, New NumParam With {.Switch = "--chromaloc", .Text = "Chromaloc", .Config = {0, 5}}, New BoolParam With {.Switch = "--pic-struct", .Text = "Set the picture structure and emits it in the picture timing SEI message"}, New BoolParam With {.Switch = "--aud", .Text = "Insert Access Unit Delimiter NAL"}, New BoolParam With {.Switch = "--repeat-headers", .Text = "Output VPS, SPS and PPS for every IDR frame"}) Add("Performance", New StringParam With {.Switch = "--perf-monitor", .Text = "Perf. Monitor"}, New OptionParam With {.Switch = "--cuda-schedule", .Text = "Cuda Schedule", .Init = 3, .Options = {"Let cuda driver to decide", "CPU will spin when waiting GPU tasks", "CPU will yield when waiting GPU tasks", "CPU will sleep when waiting GPU tasks"}, .Values = {"auto", "spin", "yield", "sync"}}, New OptionParam With {.Switch = "--output-buf", .Text = "Output Buffer", .Options = {"8", "16", "32", "64", "128"}}, New OptionParam With {.Switch = "--output-thread", .Text = "Output Thread", .Options = {"Automatic", "Disabled", "One Thread"}, .Values = {"-1", "0", "1"}}, New NumParam With {.Switch = "--perf-monitor-interval", .Init = 500, .Config = {50, Integer.MaxValue}, .Text = "Perf. Mon. Interval"}, New BoolParam With {.Switch = "--max-procfps", .Text = "Limit performance to lower resource usage"}, New BoolParam With {.Switch = "--lowlatency", .Text = "Low Latency"}) Add("Statistic", New StringParam With {.Switch = "--vmaf", .Text = "VMAF"}, New OptionParam With {.Switch = "--log-level", .Text = "Log Level", .Options = {"Info", "Debug", "Warn", "Error"}}, New BoolParam With {.Switch = "--ssim", .Text = "SSIM"}, New BoolParam With {.Switch = "--psnr", .Text = "PSNR"}) Add("Input/Output", New StringParam With {.Switch = "--input-option", .Text = "Input Option", .VisibleFunc = Function() Decoder.ValueText.EqualsAny("nvhw", "nvsw")}, Decoder, Interlace) Add("Other", Custom, New StringParam With {.Switch = "--keyfile", .Text = "Keyframes File", .BrowseFile = True}, New StringParam With {.Switch = "--timecode", .Text = "Timecode File"}, New StringParam With {.Switch = "--data-copy", .Text = "Data Copy"}, New OptionParam With {.Switch = "--mv-precision", .Text = "MV Precision", .Options = {"Automatic", "Q-pel", "Half-pel", "Full-pel"}}, New OptionParam With {.Switches = {"--cabac", "--cavlc"}, .Text = "Cabac/Cavlc", .Options = {"Disabled", "Cabac", "Cavlc"}, .Values = {"", "--cabac", "--cavlc"}}, New NumParam With {.Switch = "--device", .HelpSwitch = "-d", .Text = "Device", .Config = {0, 4}}, New BoolParam With {.Switch = "--deblock", .NoSwitch = "--no-deblock", .Text = "Deblock", .Init = True}, New BoolParam With {.Switch = "--bluray", .Text = "Blu-ray"}) End If Return ItemsValue End Get End Property Public Overrides Sub ShowHelp(id As String) g.ShowCommandLineHelp(Package.NVEnc, id) End Sub Protected Overrides Sub OnValueChanged(item As CommandLineParam) If Not Decoder.MenuButton Is Nothing AndAlso (item Is Decoder OrElse item Is Nothing) Then Dim isIntelPresent = OS.VideoControllers.Where(Function(val) val.Contains("Intel")).Count > 0 For x = 0 To Decoder.Options.Length - 1 If Decoder.Options(x).Contains("Intel") Then Decoder.ShowOption(x, isIntelPresent) End If Next End If If Not QPI.NumEdit Is Nothing Then NnediField.MenuButton.Enabled = Deinterlacer.Value = 3 NnediNns.MenuButton.Enabled = Deinterlacer.Value = 3 NnediNsize.MenuButton.Enabled = Deinterlacer.Value = 3 NnediQuality.MenuButton.Enabled = Deinterlacer.Value = 3 NnediPrescreen.MenuButton.Enabled = Deinterlacer.Value = 3 NnediErrortype.MenuButton.Enabled = Deinterlacer.Value = 3 NnediPrec.MenuButton.Enabled = Deinterlacer.Value = 3 NnediWeightfile.TextEdit.Enabled = Deinterlacer.Value = 3 ColorspaceMatrixFrom.MenuButton.Enabled = Colorspace.Value ColorspaceMatrixTo.MenuButton.Enabled = Colorspace.Value ColorspaceColorprimFrom.MenuButton.Enabled = Colorspace.Value ColorspaceColorprimTo.MenuButton.Enabled = Colorspace.Value ColorspaceTransferFrom.MenuButton.Enabled = Colorspace.Value ColorspaceTransferTo.MenuButton.Enabled = Colorspace.Value ColorspaceRangeFrom.MenuButton.Enabled = Colorspace.Value ColorspaceRangeTo.MenuButton.Enabled = Colorspace.Value ColorspaceHdr2sdr.MenuButton.Enabled = Colorspace.Value ColorspaceHdr2sdrSourcepeak.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrLdrnits.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrDesatbase.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrDesatstrength.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrDesatexp.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrHableA.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrHableB.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrHableC.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrHableD.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrHableE.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrHableF.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrMobiusTransition.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrMobiusPeak.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrReinhardContrast.NumEdit.Enabled = Colorspace.Value ColorspaceHdr2sdrReinhardPeak.NumEdit.Enabled = Colorspace.Value EdgelevelStrength.NumEdit.Enabled = Edgelevel.Value EdgelevelThreshold.NumEdit.Enabled = Edgelevel.Value EdgelevelBlack.NumEdit.Enabled = Edgelevel.Value EdgelevelWhite.NumEdit.Enabled = Edgelevel.Value UnsharpRadius.NumEdit.Enabled = Unsharp.Value UnsharpWeight.NumEdit.Enabled = Unsharp.Value UnsharpThreshold.NumEdit.Enabled = Unsharp.Value WarpsharpBlur.NumEdit.Enabled = Warpsharp.Value WarpsharpChroma.NumEdit.Enabled = Warpsharp.Value WarpsharpDepth.NumEdit.Enabled = Warpsharp.Value WarpsharpThreshold.NumEdit.Enabled = Warpsharp.Value WarpsharpType.NumEdit.Enabled = Warpsharp.Value SelectEveryValue.NumEdit.Enabled = SelectEvery.Value SelectEveryOffsets.TextEdit.Enabled = SelectEvery.Value KnnRadius.NumEdit.Enabled = Knn.Value KnnStrength.NumEdit.Enabled = Knn.Value KnnLerp.NumEdit.Enabled = Knn.Value KnnThLerp.NumEdit.Enabled = Knn.Value PadLeft.NumEdit.Enabled = Pad.Value PadTop.NumEdit.Enabled = Pad.Value PadRight.NumEdit.Enabled = Pad.Value PadBottom.NumEdit.Enabled = Pad.Value SmoothQuality.NumEdit.Enabled = Smooth.Value SmoothQP.NumEdit.Enabled = Smooth.Value SmoothPrec.MenuButton.Enabled = Smooth.Value TweakContrast.NumEdit.Enabled = Tweak.Value TweakGamma.NumEdit.Enabled = Tweak.Value TweakSaturation.NumEdit.Enabled = Tweak.Value TweakHue.NumEdit.Enabled = Tweak.Value TweakBrightness.NumEdit.Enabled = Tweak.Value PmdApplyCount.NumEdit.Enabled = Pmd.Value PmdStrength.NumEdit.Enabled = Pmd.Value PmdThreshold.NumEdit.Enabled = Pmd.Value For Each i In {DebandRange, DebandSample, DebandThre, DebandThreY, DebandThreCB, DebandThreCR, DebandDither, DebandDitherY, DebandDitherC, DebandSeed} i.NumEdit.Enabled = Deband.Value Next DebandRandEachFrame.CheckBox.Enabled = Deband.Value DebandBlurfirst.CheckBox.Enabled = Deband.Value AfsPreset.MenuButton.Enabled = Deinterlacer.Value = 2 AfsINI.TextEdit.Enabled = Deinterlacer.Value = 2 For Each i In {AfsLeft, AfsRight, AfsTop, AfsBottom, AfsMethodSwitch, AfsCoeffShift, AfsThreShift, AfsThreDeint, AfsThreMotionY, AfsThreMotionC, AfsLevel} i.NumEdit.Enabled = Deinterlacer.Value = 2 Next For Each i In {AfsShift, AfsDrop, AfsSmooth, Afs24fps, AfsTune, AfsRFF, AfsTimecode, AfsLog} i.CheckBox.Enabled = Deinterlacer.Value = 2 Next End If MyBase.OnValueChanged(item) End Sub Function GetSmoothArgs() As String If Smooth.Value Then Dim ret = "" If SmoothQuality.Value <> SmoothQuality.DefaultValue Then ret += ",quality=" & SmoothQuality.Value If SmoothQP.Value <> SmoothQP.DefaultValue Then ret += ",qp=" & SmoothQP.Value.ToInvariantString If SmoothPrec.Value <> SmoothPrec.DefaultValue Then ret += ",prec=" & SmoothPrec.ValueText Return "--vpp-smooth " + ret.TrimStart(","c) End If End Function Function GetColorspaceArgs() As String If Colorspace.Value Then Dim ret = "" If ColorspaceMatrixFrom.Value <> ColorspaceMatrixFrom.DefaultValue Then ret += $",matrix={ColorspaceMatrixFrom.ValueText}:{ColorspaceMatrixTo.ValueText}" If ColorspaceColorprimFrom.Value <> ColorspaceColorprimFrom.DefaultValue Then ret += $",colorprim={ColorspaceColorprimFrom.ValueText}:{ColorspaceColorprimTo.ValueText}" If ColorspaceTransferFrom.Value <> ColorspaceTransferFrom.DefaultValue Then ret += $",transfer={ColorspaceTransferFrom.ValueText}:{ColorspaceTransferTo.ValueText}" If ColorspaceRangeFrom.Value <> ColorspaceRangeFrom.DefaultValue Then ret += $",range={ColorspaceRangeFrom.ValueText}:{ColorspaceRangeTo.ValueText}" If ColorspaceHdr2sdr.Value <> ColorspaceHdr2sdr.DefaultValue Then ret += $",hdr2sdr={ColorspaceHdr2sdr.ValueText}" If ColorspaceHdr2sdrSourcepeak.Value <> ColorspaceHdr2sdrSourcepeak.DefaultValue Then ret += $",source_peak={ColorspaceHdr2sdrSourcepeak.Value.ToInvariantString("0.0")}" If ColorspaceHdr2sdrLdrnits.Value <> ColorspaceHdr2sdrLdrnits.DefaultValue Then ret += $",ldr_nits={ColorspaceHdr2sdrLdrnits.Value.ToInvariantString("0.0")}" If ColorspaceHdr2sdrDesatbase.Value <> ColorspaceHdr2sdrDesatbase.DefaultValue Then ret += $",desat_base={ColorspaceHdr2sdrDesatbase.Value.ToInvariantString("0.00")}" If ColorspaceHdr2sdrDesatstrength.Value <> ColorspaceHdr2sdrDesatstrength.DefaultValue Then ret += $",desat_strength={ColorspaceHdr2sdrDesatstrength.Value.ToInvariantString("0.00")}" If ColorspaceHdr2sdrDesatexp.Value <> ColorspaceHdr2sdrDesatexp.DefaultValue Then ret += $",desat_exp={ColorspaceHdr2sdrDesatexp.Value.ToInvariantString("0.00")}" If ColorspaceHdr2sdr.Value = 1 Then If ColorspaceHdr2sdrHableA.Value <> ColorspaceHdr2sdrHableA.DefaultValue Then ret += $",a={ColorspaceHdr2sdrHableA.Value.ToInvariantString("0.00")}" If ColorspaceHdr2sdrHableB.Value <> ColorspaceHdr2sdrHableB.DefaultValue Then ret += $",b={ColorspaceHdr2sdrHableB.Value.ToInvariantString("0.00")}" If ColorspaceHdr2sdrHableC.Value <> ColorspaceHdr2sdrHableC.DefaultValue Then ret += $",c={ColorspaceHdr2sdrHableC.Value.ToInvariantString("0.00")}" If ColorspaceHdr2sdrHableD.Value <> ColorspaceHdr2sdrHableD.DefaultValue Then ret += $",d={ColorspaceHdr2sdrHableD.Value.ToInvariantString("0.00")}" If ColorspaceHdr2sdrHableE.Value <> ColorspaceHdr2sdrHableE.DefaultValue Then ret += $",e={ColorspaceHdr2sdrHableE.Value.ToInvariantString("0.00")}" If ColorspaceHdr2sdrHableF.Value <> ColorspaceHdr2sdrHableF.DefaultValue Then ret += $",f={ColorspaceHdr2sdrHableF.Value.ToInvariantString("0.00")}" End If If ColorspaceHdr2sdr.Value = 2 Then If ColorspaceHdr2sdrMobiusTransition.Value <> ColorspaceHdr2sdrMobiusTransition.DefaultValue Then ret += $",transition={ColorspaceHdr2sdrMobiusTransition.Value.ToInvariantString("0.00")}" If ColorspaceHdr2sdrMobiusPeak.Value <> ColorspaceHdr2sdrMobiusPeak.DefaultValue Then ret += $",peak={ColorspaceHdr2sdrMobiusPeak.Value.ToInvariantString("0.00")}" End If If ColorspaceHdr2sdr.Value = 3 Then If ColorspaceHdr2sdrReinhardContrast.Value <> ColorspaceHdr2sdrReinhardContrast.DefaultValue Then ret += $",contrast={ColorspaceHdr2sdrReinhardContrast.Value.ToInvariantString("0.00")}" If ColorspaceHdr2sdrReinhardPeak.Value <> ColorspaceHdr2sdrReinhardPeak.DefaultValue Then ret += $",peak={ColorspaceHdr2sdrReinhardPeak.Value.ToInvariantString("0.00")}" End If End If If ret <> "" Then Return "--vpp-colorspace " + ret.TrimStart(","c) End If End Function Function GetPmdArgs() As String If Pmd.Value Then Dim ret = "" If PmdApplyCount.Value <> PmdApplyCount.DefaultValue Then ret += ",apply_count=" & PmdApplyCount.Value If PmdStrength.Value <> PmdStrength.DefaultValue Then ret += ",strength=" & PmdStrength.Value If PmdThreshold.Value <> PmdThreshold.DefaultValue Then ret += ",threshold=" & PmdThreshold.Value Return "--vpp-pmd " + ret.TrimStart(","c) End If End Function Function GetTweakArgs() As String If Tweak.Value Then Dim ret = "" If TweakBrightness.Value <> TweakBrightness.DefaultValue Then ret += ",brightness=" & TweakBrightness.Value.ToInvariantString If TweakContrast.Value <> TweakContrast.DefaultValue Then ret += ",contrast=" & TweakContrast.Value.ToInvariantString If TweakSaturation.Value <> TweakSaturation.DefaultValue Then ret += ",saturation=" & TweakSaturation.Value.ToInvariantString If TweakGamma.Value <> TweakGamma.DefaultValue Then ret += ",gamma=" & TweakGamma.Value.ToInvariantString If TweakHue.Value <> TweakHue.DefaultValue Then ret += ",hue=" & TweakHue.Value.ToInvariantString Return "--vpp-tweak " + ret.TrimStart(","c) End If End Function Function GetPaddingArgs() As String If Pad.Value Then Dim ret = "" If PadLeft.Value <> PadLeft.DefaultValue Then ret += "," & PadLeft.Value If PadTop.Value <> PadTop.DefaultValue Then ret += "," & PadTop.Value If PadRight.Value <> PadRight.DefaultValue Then ret += "," & PadRight.Value If PadBottom.Value <> PadBottom.DefaultValue Then ret += "," & PadBottom.Value If ret <> "" Then Return "--vpp-pad " + ret.TrimStart(","c) End If End Function Function GetKnnArgs() As String If Knn.Value Then Dim ret = "" If KnnRadius.Value <> KnnRadius.DefaultValue Then ret += ",radius=" & KnnRadius.Value If KnnStrength.Value <> KnnStrength.DefaultValue Then ret += ",strength=" & KnnStrength.Value.ToInvariantString If KnnLerp.Value <> KnnLerp.DefaultValue Then ret += ",lerp=" & KnnLerp.Value.ToInvariantString If KnnThLerp.Value <> KnnThLerp.DefaultValue Then ret += ",th_lerp=" & KnnThLerp.Value.ToInvariantString Return "--vpp-knn " + ret.TrimStart(","c) End If End Function Function GetDebandArgs() As String If Deband.Value Then Dim ret = "" If DebandRange.Value <> DebandRange.DefaultValue Then ret += ",range=" & DebandRange.Value If DebandSample.Value <> DebandSample.DefaultValue Then ret += ",sample=" & DebandSample.Value If DebandThre.Value <> DebandThre.DefaultValue Then ret += ",thre=" & DebandThre.Value If DebandThreY.Value <> DebandThreY.DefaultValue Then ret += ",thre_y=" & DebandThreY.Value If DebandThreCB.Value <> DebandThreCB.DefaultValue Then ret += ",thre_cb=" & DebandThreCB.Value If DebandThreCR.Value <> DebandThreCR.DefaultValue Then ret += ",thre_cr=" & DebandThreCR.Value If DebandDither.Value <> DebandDither.DefaultValue Then ret += ",dither=" & DebandDither.Value If DebandDitherY.Value <> DebandDitherY.DefaultValue Then ret += ",dither_y=" & DebandDitherY.Value If DebandDitherC.Value <> DebandDitherC.DefaultValue Then ret += ",dither_c=" & DebandDitherC.Value If DebandSeed.Value <> DebandSeed.DefaultValue Then ret += ",seed=" & DebandSeed.Value If DebandBlurfirst.Value Then ret += ",blurfirst" If DebandRandEachFrame.Value Then ret += ",rand_each_frame" Return "--vpp-deband " + ret.TrimStart(","c) End If End Function Function GetEdge() As String If Edgelevel.Value Then Dim ret = "" If EdgelevelStrength.Value <> EdgelevelStrength.DefaultValue Then ret += ",strength=" & EdgelevelStrength.Value.ToInvariantString If EdgelevelThreshold.Value <> EdgelevelThreshold.DefaultValue Then ret += ",threshold=" & EdgelevelThreshold.Value.ToInvariantString If EdgelevelBlack.Value <> EdgelevelBlack.DefaultValue Then ret += ",black=" & EdgelevelBlack.Value.ToInvariantString If EdgelevelWhite.Value <> EdgelevelWhite.DefaultValue Then ret += ",white=" & EdgelevelWhite.Value.ToInvariantString Return "--vpp-edgelevel " + ret.TrimStart(","c) End If End Function Function GetUnsharp() As String If Unsharp.Value Then Dim ret = "" If UnsharpRadius.Value <> UnsharpRadius.DefaultValue Then ret += ",radius=" & UnsharpRadius.Value.ToInvariantString If UnsharpWeight.Value <> UnsharpWeight.DefaultValue Then ret += ",weight=" & UnsharpWeight.Value.ToInvariantString If UnsharpThreshold.Value <> UnsharpThreshold.DefaultValue Then ret += ",threshold=" & UnsharpThreshold.Value.ToInvariantString Return "--vpp-unsharp " + ret.TrimStart(","c) End If End Function Function GetWarpsharpArgs() As String If Warpsharp.Value Then Dim ret = "" If WarpsharpThreshold.Value <> WarpsharpThreshold.DefaultValue Then ret += ",threshold=" & WarpsharpThreshold.Value.ToInvariantString If WarpsharpBlur.Value <> WarpsharpBlur.DefaultValue Then ret += ",blur=" & WarpsharpBlur.Value.ToInvariantString If WarpsharpType.Value <> WarpsharpType.DefaultValue Then ret += ",type=" & WarpsharpType.Value.ToInvariantString If WarpsharpDepth.Value <> WarpsharpDepth.DefaultValue Then ret += ",depth=" & WarpsharpDepth.Value.ToInvariantString If WarpsharpChroma.Value <> WarpsharpChroma.DefaultValue Then ret += ",chroma=" & WarpsharpChroma.Value.ToInvariantString Return "--vpp-warpsharp " + ret.TrimStart(","c) End If End Function Function GetTransform() As String Dim ret = "" If TransformFlipX.Value Then ret += ",flip_x=true" If TransformFlipY.Value Then ret += ",flip_y=true" If TransformTranspose.Value Then ret += ",transpose=true" If ret <> "" Then Return ("--vpp-transform " + ret.TrimStart(","c)) End Function Function GetSelectEvery() As String If SelectEvery.Value Then Dim ret = "" ret += SelectEveryValue.Value.ToString ret += "," + SelectEveryOffsets.Value.SplitNoEmptyAndWhiteSpace(" ", ",", ";").Select(Function(item) "offset=" + item).Join(",") If ret <> "" Then Return "--vpp-select-every " + ret.TrimStart(","c) End If End Function Function GetDeinterlacerArgs() As String Dim ret = "" Select Case Deinterlacer.Value Case 2 If AfsPreset.Value <> AfsPreset.DefaultValue Then ret += ",preset=" + AfsPreset.ValueText If AfsINI.Value <> "" Then ret += ",ini=" + AfsINI.Value.Escape If AfsLeft.Value <> AfsLeft.DefaultValue Then ret += ",left=" & AfsLeft.Value If AfsRight.Value <> AfsRight.DefaultValue Then ret += ",right=" & AfsRight.Value If AfsTop.Value <> AfsTop.DefaultValue Then ret += ",top=" & AfsTop.Value If AfsBottom.Value <> AfsBottom.DefaultValue Then ret += ",bottom=" & AfsBottom.Value If AfsMethodSwitch.Value <> AfsMethodSwitch.DefaultValue Then ret += ",method_switch=" & AfsMethodSwitch.Value If AfsCoeffShift.Value <> AfsCoeffShift.DefaultValue Then ret += ",coeff_shift=" & AfsCoeffShift.Value If AfsThreShift.Value <> AfsThreShift.DefaultValue Then ret += ",thre_shift=" & AfsThreShift.Value If AfsThreDeint.Value <> AfsThreDeint.DefaultValue Then ret += ",thre_deint=" & AfsThreDeint.Value If AfsThreMotionY.Value <> AfsThreMotionY.DefaultValue Then ret += ",thre_motion_y=" & AfsThreMotionY.Value If AfsThreMotionC.Value <> AfsThreMotionC.DefaultValue Then ret += ",thre_motion_c=" & AfsThreMotionC.Value If AfsLevel.Value <> AfsLevel.DefaultValue Then ret += ",level=" & AfsLevel.Value If AfsShift.Value <> AfsShift.DefaultValue Then ret += ",shift=" + If(AfsShift.Value, "on", "off") If AfsDrop.Value <> AfsDrop.DefaultValue Then ret += ",drop=" + If(AfsDrop.Value, "on", "off") If AfsSmooth.Value <> AfsSmooth.DefaultValue Then ret += ",smooth=" + If(AfsSmooth.Value, "on", "off") If Afs24fps.Value <> Afs24fps.DefaultValue Then ret += ",24fps=" + If(Afs24fps.Value, "on", "off") If AfsTune.Value <> AfsTune.DefaultValue Then ret += ",tune=" + If(AfsTune.Value, "on", "off") If AfsRFF.Value <> AfsRFF.DefaultValue Then ret += ",rff=" + If(AfsRFF.Value, "on", "off") If AfsTimecode.Value <> AfsTimecode.DefaultValue Then ret += ",timecode=" + If(AfsTimecode.Value, "on", "off") If AfsLog.Value <> AfsLog.DefaultValue Then ret += ",log=" + If(AfsLog.Value, "on", "off") Return "--vpp-afs " + ret.TrimStart(","c) Case 3 If NnediField.Value <> NnediField.DefaultValue Then ret += ",field=" + NnediField.ValueText If NnediNns.Value <> NnediNns.DefaultValue Then ret += ",nns=" + NnediNns.ValueText If NnediNsize.Value <> NnediNsize.DefaultValue Then ret += ",nsize=" + NnediNsize.ValueText If NnediQuality.Value <> NnediQuality.DefaultValue Then ret += ",quality=" + NnediQuality.ValueText If NnediPrescreen.Value <> NnediPrescreen.DefaultValue Then ret += ",prescreen=" + NnediPrescreen.ValueText If NnediErrortype.Value <> NnediErrortype.DefaultValue Then ret += ",errortype=" + NnediErrortype.ValueText If NnediPrec.Value <> NnediPrec.DefaultValue Then ret += ",prec=" + NnediPrec.ValueText If NnediWeightfile.Value <> "" Then ret += ",weightfile=" + NnediWeightfile.Value.Escape Return "--vpp-nnedi " + ret.TrimStart(","c) Case Else Return ret End Select End Function Function GetModeArgs() As String Dim rate = If(ConstantQualityMode.Value, 0, Bitrate.Value) Select Case Mode.Value Case 0 Return If(QPAdvanced.Value, $"--cqp {QPI.Value}:{QPP.Value}:{QPB.Value}", $" --cqp {QP.Value}") Case 1 Return "--cbr " & rate Case 2 Return "--cbrhq " & rate Case 3 Return "--vbr " & rate Case 4 Return "--vbrhq " & rate End Select End Function Overrides Function GetCommandLine( includePaths As Boolean, includeExe As Boolean, Optional pass As Integer = 1) As String Dim ret As String Dim sourcePath As String Dim targetPath = p.VideoEncoder.OutputPath.ChangeExt(p.VideoEncoder.OutputExt) If includePaths AndAlso includeExe Then ret = Package.NVEnc.Path.Escape End If Select Case Decoder.ValueText Case "avs" sourcePath = p.Script.Path If includePaths AndAlso FrameServerHelp.IsPortable Then ret += " --avsdll " + Package.AviSynth.Path.Escape End If Case "nvhw" sourcePath = p.LastOriginalSourceFile ret += " --avhw" Case "nvsw" sourcePath = p.LastOriginalSourceFile ret += " --avsw" Case "qs" sourcePath = "-" If includePaths Then ret = If(includePaths, Package.QSVEnc.Path.Escape, "QSVEncC64") + " -o - -c raw" + " -i " + If(includePaths, p.SourceFile.Escape, "path") + " | " + If(includePaths, Package.NVEnc.Path.Escape, "NVEncC64") End If Case "ffdxva" sourcePath = "-" If includePaths Then Dim pix_fmt = If(p.SourceVideoBitDepth = 10, "yuv420p10le", "yuv420p") ret = If(includePaths, Package.ffmpeg.Path.Escape, "ffmpeg") + " -threads 1 -hwaccel dxva2 -i " + If(includePaths, p.SourceFile.Escape, "path") + " -f yuv4mpegpipe -pix_fmt " + pix_fmt + " -strict -1 -loglevel fatal -hide_banner - | " + If(includePaths, Package.NVEnc.Path.Escape, "NVEncC64") End If Case "ffqsv" sourcePath = "-" If includePaths Then ret = If(includePaths, Package.ffmpeg.Path.Escape, "ffmpeg") + " -threads 1 -hwaccel qsv -i " + If(includePaths, p.SourceFile.Escape, "path") + " -f yuv4mpegpipe -strict -1 -pix_fmt yuv420p -loglevel fatal -hide_banner - | " + If(includePaths, Package.NVEnc.Path.Escape, "NVEncC64") End If End Select Dim q = From i In Items Where i.GetArgs <> "" AndAlso Not IsCustom(i.Switch) If q.Count > 0 Then ret += " " + q.Select(Function(item) item.GetArgs).Join(" ") End If If (p.CropLeft Or p.CropTop Or p.CropRight Or p.CropBottom) <> 0 AndAlso (p.Script.IsFilterActive("Crop", "Hardware Encoder") OrElse (Decoder.ValueText <> "avs" AndAlso p.Script.IsFilterActive("Crop"))) Then ret += " --crop " & p.CropLeft & "," & p.CropTop & "," & p.CropRight & "," & p.CropBottom End If If p.Script.IsFilterActive("Resize", "Hardware Encoder") OrElse (Decoder.ValueText <> "avs" AndAlso p.Script.IsFilterActive("Resize")) Then ret += " --output-res " & p.TargetWidth & "x" & p.TargetHeight End If If Decoder.ValueText <> "avs" Then If p.Ranges.Count > 0 Then ret += " --trim " + p.Ranges.Select(Function(range) $"{range.Start}:{range.End}").Join(",") End If End If If sourcePath = "-" Then ret += " --y4m" End If If ret.Contains("%") Then ret = Macro.Expand(ret) End If If includePaths Then ret += " -i " + sourcePath.Escape + " -o " + targetPath.Escape End If Return ret.Trim End Function Function IsCustom(switch As String) As Boolean If switch = "" Then Return False End If If Custom.Value?.Contains(switch + " ") OrElse Custom.Value?.EndsWith(switch) Then Return True End If End Function Public Overrides Function GetPackage() As Package Return Package.NVEnc End Function End Class End Class