diff --git a/Changelog.md b/Changelog.md index a379b68f..de46402e 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,8 +1,12 @@ ### 2.1.0.3 Beta not yet released -- new: check added that blocks source files with too long path or filename, - accepted are max 150 chars for the path and 75 for the filename +- new: check added that blocks source files with too long path or filename. A setting + that allows to change the limit exists and there is also a explanation as tooltip: + In theory Windows supports paths that are longer than 260 characters, in reality + neither Windows, nor the .NET Framework or the used tools have full long path support. +- new: in order to support unicode the command line based encoder used by XviD uses + now cmd.exe directly without creating a batch file ### 2.1.0.2 Beta diff --git a/Encoding/SvtAv1.vb b/Encoding/SvtAv1.vb index 2baf89ac..87266025 100644 --- a/Encoding/SvtAv1.vb +++ b/Encoding/SvtAv1.vb @@ -1,15 +1,16 @@ -Imports StaxRip.CommandLine + +Imports StaxRip.CommandLine Imports StaxRip.UI -Public Class SvtAv1 +Public Class SVTAV1 Inherits BasicVideoEncoder Property ParamsStore As New PrimitiveStore Public Overrides ReadOnly Property DefaultName As String Get - Return "More | SVT-AV1" + Return "SVT-AV1" End Get End Property @@ -37,7 +38,7 @@ Public Class SvtAv1 Using form As New CommandLineForm(encParams) Dim saveProfileAction = Sub() - Dim enc = ObjectHelp.GetCopy(Of SvtAv1)(Me) + Dim enc = ObjectHelp.GetCopy(Of SVTAV1)(Me) Dim encParamsCopy As New EncoderParams Dim storeCopy = DirectCast(ObjectHelp.GetCopy(store), PrimitiveStore) encParamsCopy.Init(storeCopy) @@ -58,7 +59,7 @@ Public Class SvtAv1 Overrides ReadOnly Property OutputExt() As String Get - 'Return Params.Codec.ValueText + Return "ivf" End Get End Property @@ -67,8 +68,8 @@ Public Class SvtAv1 Using proc As New Proc proc.Header = "Video encoding" - proc.Package = Package.SvtAv1 - 'proc.SkipStrings = {"%]", " frames: "} + proc.Package = Package.SVTAV1 + proc.RemoveChars = {Convert.ToChar(8)} 'back space proc.File = "cmd.exe" proc.Arguments = "/S /C """ + Params.GetCommandLine(True, True) + """" proc.Start() @@ -78,15 +79,15 @@ Public Class SvtAv1 End Sub Overrides Function GetMenu() As MenuList - Dim r As New MenuList - r.Add("Encoder Options", AddressOf ShowConfigDialog) - r.Add("Container Configuration", AddressOf OpenMuxerConfigDialog) - Return r + 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 + Return True End Get Set(Value As Boolean) End Set @@ -102,21 +103,29 @@ Public Class SvtAv1 Inherits CommandLineParams Sub New() - Title = "SvtAv1 Options" + Title = "SVT-AV1 Options" End Sub Overrides ReadOnly Property Items As List(Of CommandLineParam) Get If ItemsValue Is Nothing Then ItemsValue = New List(Of CommandLineParam) - Add("Basic") - Add("Advanced") - Add("Rate Control") + Add("Basic", + New OptionParam With {.Switch = "--rc", .Text = "Mode", .Options = {"CQP", "VBR", "CVBR"}}, + New OptionParam With {.Switch = "-enc-mode", .Text = "Preset", .Init = 8, .IntegerValue = True, .Options = {"Very Slow", "Slower", "Slow", "Medium", "Fast", "Faster", "Very Fast", "Super Fast", "Ultra Fast"}}, + New NumParam With {.Switch = "-q", .Text = "QP", .Config = {0, 63, 1}, .Init = 50}) For Each item In ItemsValue - If item.HelpSwitch <> "" Then Continue For + If item.HelpSwitch <> "" Then + Continue For + End If + Dim switches = item.GetSwitches - If switches.NothingOrEmpty Then Continue For + + If switches.NothingOrEmpty Then + Continue For + End If + item.HelpSwitch = switches(0) Next End If @@ -126,67 +135,40 @@ Public Class SvtAv1 End Property Public Overrides Sub ShowHelp(switch As String) - g.ShowCommandLineHelp(Package.SvtAv1, switch) + g.ShowCommandLineHelp(Package.SVTAV1, switch) End Sub - Overrides Function GetCommandLine(includePaths As Boolean, - includeExecutable 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 includeExecutable Then ret = Package.SvtAv1.Path.Escape + Overrides Function GetCommandLine( + includePaths As Boolean, + includeExecutable As Boolean, + Optional pass As Integer = 1) As String - 'Select Case Decoder.ValueText - ' Case "avs" - ' sourcePath = p.Script.Path - ' 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.SvtAv1.Path.Escape, "SvtAv1C64") - ' Case "ffdxva" - ' sourcePath = "-" - ' If includePaths Then ret = If(includePaths, Package.ffmpeg.Path.Escape, "ffmpeg") + " -threads 1 -hwaccel dxva2 -i " + If(includePaths, p.SourceFile.Escape, "path") + " -f yuv4mpegpipe -strict -1 -pix_fmt yuv420p -loglevel fatal - | " + If(includePaths, Package.SvtAv1.Path.Escape, "SvtAv1C64") - ' 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 - | " + If(includePaths, Package.SvtAv1.Path.Escape, "SvtAv1C64") - ' Case "vce" - ' sourcePath = p.LastOriginalSourceFile - ' ret += " --avhw" - 'End Select + Dim ret = "" + Dim targetPath = p.VideoEncoder.OutputPath.ChangeExt(p.VideoEncoder.OutputExt) + + If includePaths AndAlso includeExecutable Then + ret = Package.ffmpeg.Path.Escape + + If(p.Script.Engine = ScriptEngine.VapourSynth, " -f vapoursynth", "") + + " -i " + p.Script.Path.Escape + + " -f yuv4mpegpipe -strict -1 -loglevel fatal -hide_banner - | " + + Package.SVTAV1.Path.Escape + End If Dim q = From i In Items Where i.GetArgs <> "" - If q.Count > 0 Then ret += " " + q.Select(Function(item) item.GetArgs).Join(" ") - 'Select Case Mode.Value - ' Case 0 - ' ret += " --cqp " & QPI.Value & ":" & QPP.Value & ":" & QPB.Value - ' Case 1 - ' ret += " --cbr " & p.VideoBitrate - ' Case 2 - ' ret += " --vbr " & p.VideoBitrate - 'End Select + If q.Count > 0 Then + ret += " " + q.Select(Function(item) item.GetArgs).Join(" ") + End If - 'If CInt(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 sourcePath = "-" Then ret += " --y4m" - If includePaths Then ret += " -i " + sourcePath.Escape + " -o " + targetPath.Escape + If includePaths Then + ret += " -n " & p.Script.GetFrameCount & " -i stdin -b " + targetPath.Escape + End If Return ret.Trim End Function Public Overrides Function GetPackage() As Package - Return Package.SvtAv1 + Return Package.SVTAV1 End Function End Class End Class \ No newline at end of file diff --git a/Encoding/VideoEncoder.vb b/Encoding/VideoEncoder.vb index 6615931a..c3918c2e 100644 --- a/Encoding/VideoEncoder.vb +++ b/Encoding/VideoEncoder.vb @@ -342,6 +342,7 @@ Public MustInherit Class VideoEncoder ret.Add(New x265Enc) ret.Add(New Rav1e) + ret.Add(New SVTAV1) Dim nvidia264 As New NVEnc() ret.Add(nvidia264) @@ -557,14 +558,17 @@ Public Class BatchEncoder Overrides ReadOnly Property OutputExt As String Get - If OutputFileTypeValue = "" Then OutputFileTypeValue = "h264" + If OutputFileTypeValue = "" Then + OutputFileTypeValue = "h264" + End If + Return OutputFileTypeValue End Get End Property Overrides Sub ShowConfigDialog() - Using f As New BatchVideoEncoderForm(Me) - If f.ShowDialog() = DialogResult.OK Then + Using form As New BatchVideoEncoderForm(Me) + If form.ShowDialog() = DialogResult.OK Then OnStateChange() End If End Using @@ -596,45 +600,27 @@ Public Class BatchEncoder End If End Function - Function GetBatchCode(value As String) As String - Dim ret = "" - - For Each pack In Package.Items.Values - If TypeOf pack Is PluginPackage Then Continue For - Dim dir = pack.Directory - If Not Directory.Exists(dir) Then Continue For - If Not dir.Contains(Folder.Startup) Then Continue For - - If value.ToLower.Contains(pack.Name.ToLower) Then - ret += "@set PATH=" + dir + ";%PATH%" + BR - End If - Next - - Return ret + BR + value - End Function - Overrides Sub Encode() p.Script.Synchronize() - Dim batchPath = p.TempDir + p.TargetFile.Base + "_encode.bat" - Dim batchCode = Proc.WriteBatchFile(batchPath, GetBatchCode(Macro.Expand(CommandLines).Trim)) + For Each line In Macro.Expand(CommandLines).SplitLinesNoEmpty + Using proc As New Proc + proc.Header = "Video encoding command line encoder: " + Name + proc.SkipStrings = GetSkipStrings(CommandLines) + proc.File = "cmd.exe" + proc.Arguments = "/S /C """ + line + """" + proc.EnvironmentVariables("path") = g.GetPathEnvVar - Using proc As New Proc - proc.Header = "Video encoding command line encoder: " + Name - proc.SkipStrings = GetSkipStrings(CommandLines) - proc.WriteLog(batchCode + BR2) - proc.File = "cmd.exe" - proc.Arguments = "/C call """ + batchPath + """" - - Try - proc.Start() - Catch ex As AbortException - Throw ex - Catch ex As Exception - g.ShowException(ex) - Throw New AbortException - End Try - End Using + Try + proc.Start() + Catch ex As AbortException + Throw ex + Catch ex As Exception + g.ShowException(ex) + Throw New AbortException + End Try + End Using + Next End Sub Overrides Sub RunCompCheck() @@ -664,16 +650,15 @@ Public Class BatchEncoder script.Path = p.TempDir + p.TargetFile.Base + "_CompCheck." + script.FileType script.Synchronize() - Dim batchPath = p.TempDir + p.TargetFile.Base + "_CompCheck.bat" - Dim batchCode = Proc.WriteBatchFile(batchPath, GetBatchCode(Macro.Expand(CompCheckCommandLines))) + Dim line = Macro.Expand(CompCheckCommandLines) Using proc As New Proc proc.Header = "Compressibility Check" proc.WriteLog(code + BR2) - proc.WriteLog(batchCode + BR2) - proc.SkipStrings = GetSkipStrings(batchCode) + proc.SkipStrings = GetSkipStrings(line) proc.File = "cmd.exe" - proc.Arguments = "/C call """ + batchPath + """" + proc.Arguments = "/S /C """ + line + """" + proc.EnvironmentVariables("path") = g.GetPathEnvVar Try proc.Start() diff --git a/Encoding/x265Enc.vb b/Encoding/x265Enc.vb index c38110ca..87d861f6 100644 --- a/Encoding/x265Enc.vb +++ b/Encoding/x265Enc.vb @@ -1016,19 +1016,21 @@ Public Class x265Params MyBase.OnValueChanged(item) End Sub - Overloads Overrides Function GetCommandLine(includePaths As Boolean, - includeExecutable As Boolean, - Optional pass As Integer = 1) As String + Overloads Overrides Function GetCommandLine( + includePaths As Boolean, + includeExecutable As Boolean, + Optional pass As Integer = 1) As String Return GetArgs(1, p.Script, p.VideoEncoder.OutputPath.DirAndBase + - p.VideoEncoder.OutputExtFull, includePaths, includeExecutable) + p.VideoEncoder.OutputExtFull, includePaths, includeExecutable) End Function - Overloads Function GetArgs(pass As Integer, - script As VideoScript, - targetPath As String, - includePaths As Boolean, - includeExecutable As Boolean) As String + Overloads Function GetArgs( + pass As Integer, + script As VideoScript, + targetPath As String, + includePaths As Boolean, + includeExecutable As Boolean) As String ApplyPresetDefaultValues() ApplyTuneDefaultValues() diff --git a/Forms/BatchVideoEncoderForm.vb b/Forms/BatchVideoEncoderForm.vb index eaa5217a..d001bdd0 100644 --- a/Forms/BatchVideoEncoderForm.vb +++ b/Forms/BatchVideoEncoderForm.vb @@ -90,7 +90,7 @@ Public Class BatchVideoEncoderForm Me.EncodingCliControl.Name = "EncodingCliControl" Me.EncodingCliControl.Size = New System.Drawing.Size(1234, 251) Me.EncodingCliControl.TabIndex = 0 - Me.EncodingCliControl.Text = "Encoding Batch" + Me.EncodingCliControl.Text = "Command Line" ' 'lPercent ' @@ -198,12 +198,12 @@ Public Class BatchVideoEncoderForm End Sub Private Sub BatchEncoderForm_HelpRequested() Handles Me.HelpRequested - Dim f As New HelpForm - f.Doc.WriteStart(Text) - f.Doc.WriteP("The batch encoder allows executing a command line. If there is a piping symbol or line break then it's executed as batch file.") - f.Doc.WriteTips(TipProvider.GetTips, EncodingCliControl.TipProvider.GetTips) - f.Doc.WriteTable("Macros", Strings.MacrosHelp, Macro.GetTips()) - f.Show() + Dim form As New HelpForm + form.Doc.WriteStart(Text) + form.Doc.WriteP("The batch encoder allows executing a command line. If there is a piping symbol or line break then it's executed as batch file.") + form.Doc.WriteTips(TipProvider.GetTips, EncodingCliControl.TipProvider.GetTips) + form.Doc.WriteTable("Macros", Strings.MacrosHelp, Macro.GetTips()) + form.Show() End Sub Private Sub cbQualityMode_CheckedChanged(sender As Object, e As EventArgs) Handles cbQualityMode.CheckedChanged diff --git a/Forms/MainForm.vb b/Forms/MainForm.vb index f0dee1ad..cacef740 100644 --- a/Forms/MainForm.vb +++ b/Forms/MainForm.vb @@ -3376,6 +3376,12 @@ Public Class MainForm n.Help = "Timeout in seconds before the shutdown is executed." n.Field = NameOf(s.ShutdownTimeout) + n = ui.AddNum + n.Text = "Path Character Limit" + n.Help = "Character limit of source file paths and half of it as filename limit. " + Strings.CharacterLimitReason + n.Config = {150, 1000, 10} + n.Field = NameOf(s.CharacterLimit) + b = ui.AddBool b.Text = "Prevent system entering standby mode while encoding" b.Field = NameOf(s.PreventStandby) diff --git a/General/ApplicationSettings.vb b/General/ApplicationSettings.vb index 0074f2c1..4a9fbca4 100644 --- a/General/ApplicationSettings.vb +++ b/General/ApplicationSettings.vb @@ -53,6 +53,7 @@ Public Class ApplicationSettings Public ShowPreviewInfo As Boolean Public ShowTemplateSelection As Boolean Public ShutdownTimeout As Integer + Public CharacterLimit As Integer Public StartupTemplate As String Public Storage As ObjectStorage Public StringDictionary As Dictionary(Of String, String) @@ -286,7 +287,14 @@ Public Class ApplicationSettings FilterSetupProfiles = VideoScript.GetDefaults End If - If LastSourceDir = "" Then LastSourceDir = "" + If LastSourceDir = "" Then + LastSourceDir = "" + End If + + If CharacterLimit < 150 Then + CharacterLimit = 150 + End If + Migrate() End Sub diff --git a/General/CommandLine.vb b/General/CommandLine.vb index 781f85a8..f2028c04 100644 --- a/General/CommandLine.vb +++ b/General/CommandLine.vb @@ -1,4 +1,5 @@ -Imports StaxRip.UI + +Imports StaxRip.UI Namespace CommandLine Public MustInherit Class CommandLineParams @@ -8,9 +9,10 @@ Namespace CommandLine Event ValueChanged(item As CommandLineParam) MustOverride ReadOnly Property Items As List(Of CommandLineParam) - MustOverride Function GetCommandLine(includePaths As Boolean, - includeExecutable As Boolean, - Optional pass As Integer = 1) As String + MustOverride Function GetCommandLine( + includePaths As Boolean, + includeExecutable As Boolean, + Optional pass As Integer = 1) As String MustOverride Function GetPackage() As Package diff --git a/General/GlobalClass.vb b/General/GlobalClass.vb index e81bcfe9..7947c1a1 100644 --- a/General/GlobalClass.vb +++ b/General/GlobalClass.vb @@ -305,10 +305,8 @@ Public Class GlobalClass Return True End If - If file.Length > 150 OrElse file.FileName.Length > 75 Then - MsgError("Source file path or filename is too long", - "In theory Windows supports long paths, in reality neither Windows, the .NET Framework or the used tools have full long path support.") - + If file.Length > s.CharacterLimit OrElse file.FileName.Length > s.CharacterLimit \ 2 Then + MsgError("Source file path or filename is too long", Strings.CharacterLimitReason) Return True End If @@ -1288,4 +1286,18 @@ Public Class GlobalClass $"""`n{Package.vspipe.Name} {Package.vspipe.Version}`n""; & '{Package.vspipe.Path}' --info '{script.Path}' -;""""", True) End If End Sub + + Public Function GetPathEnvVar() As String + Dim path = Environment.GetEnvironmentVariable("path") + + For Each pack In Package.Items.Values + If Not pack.Filename.Ext = "exe" OrElse Not pack.Path.FileExists Then + Continue For + End If + + path = pack.Directory + ";" + path + Next + + Return path + End Function End Class diff --git a/General/GlobalCommands.vb b/General/GlobalCommands.vb index 69e402ab..bcae0e8f 100644 --- a/General/GlobalCommands.vb +++ b/General/GlobalCommands.vb @@ -90,44 +90,24 @@ Public Class GlobalCommands Sub ShowCommandPrompt() - Dim path = Environment.GetEnvironmentVariable("path") - - For Each pack In Package.Items.Values - If Not pack.Filename.Ext = "exe" OrElse Not pack.Path.FileExists Then - Continue For - End If - - path = pack.Directory + ";" + path - Next - Using proc As New Process proc.StartInfo.UseShellExecute = False proc.StartInfo.FileName = "cmd.exe" proc.StartInfo.Arguments = "/k" proc.StartInfo.WorkingDirectory = p.TempDir - proc.StartInfo.EnvironmentVariables("path") = path + proc.StartInfo.EnvironmentVariables("path") = g.GetPathEnvVar proc.Start() End Using End Sub Sub ShowPowerShell() - Dim path = Environment.GetEnvironmentVariable("path") - - For Each pack In Package.Items.Values - If Not pack.Filename.Ext = "exe" OrElse Not pack.Path.FileExists Then - Continue For - End If - - path = pack.Directory + ";" + path - Next - Using proc As New Process proc.StartInfo.UseShellExecute = False proc.StartInfo.FileName = "powershell.exe" proc.StartInfo.Arguments = "-noexit -nologo" proc.StartInfo.WorkingDirectory = p.TempDir - proc.StartInfo.EnvironmentVariables("path") = path + proc.StartInfo.EnvironmentVariables("path") = g.GetPathEnvVar proc.Start() End Using End Sub diff --git a/General/Package.vb b/General/Package.vb index 891e1d56..22deb20f 100644 --- a/General/Package.vb +++ b/General/Package.vb @@ -416,6 +416,14 @@ Public Class Package .HelpFilename = "x265 Help.txt", .Description = "H.265 video encoding console app."}) + Shared Property SVTAV1 As Package = Add(New Package With { + .Name = "SVT-AV1", + .Location = "Encoders\SVT-AV1", + .Filename = "SvtAv1EncApp.exe", + .WebURL = "https://github.com/OpenVisualCloud/SVT-AV1", + .HelpURL = "https://github.com/OpenVisualCloud/SVT-AV1/blob/master/Docs/svt-av1_encoder_user_guide.md", + .Description = "Intel AV1 encoder."}) + Shared Property mkvmerge As Package = Add(New Package With { .Name = "mkvmerge", .Filename = "mkvmerge.exe", diff --git a/General/Proc.vb b/General/Proc.vb index d250ffa9..fd6eff49 100644 --- a/General/Proc.vb +++ b/General/Proc.vb @@ -3,6 +3,7 @@ Imports System.Text.RegularExpressions Imports System.Text Imports System.ComponentModel Imports System.Runtime.InteropServices +Imports System.Collections.Specialized Public Class Proc Implements IDisposable @@ -193,6 +194,12 @@ Public Class Proc End Set End Property + ReadOnly Property EnvironmentVariables As StringDictionary + Get + Return Process.StartInfo.EnvironmentVariables + End Get + End Property + Property Arguments() As String Get Return Process.StartInfo.Arguments @@ -367,27 +374,39 @@ Public Class Proc End Sub Function ProcessData(value As String) As (Data As String, Skip As Boolean) - If value = "" Then Return ("", False) + If value = "" Then + Return ("", False) + End If If Not RemoveChars Is Nothing Then For Each i In RemoveChars - If value.Contains(i) Then value = value.Replace(i, "") + If value.Contains(i) Then + value = value.Replace(i, "") + End If Next End If - If Not TrimChars Is Nothing Then value = value.Trim(TrimChars) + If Not TrimChars Is Nothing Then + value = value.Trim(TrimChars) + End If If SkipString <> "" Then - If value.Contains(SkipString) Then Return (value, True) + If value.Contains(SkipString) Then + Return (value, True) + End If ElseIf Not SkipStrings Is Nothing Then For Each i In SkipStrings - If value.Contains(i) Then Return (value, True) + If value.Contains(i) Then + Return (value, True) + End If Next End If If Not SkipPatterns Is Nothing Then For Each i In SkipPatterns - If Regex.IsMatch(value, i) Then Return (value, True) + If Regex.IsMatch(value, i) Then + Return (value, True) + End If Next End If diff --git a/General/ProcController.vb b/General/ProcController.vb index 81ec51d4..684724a2 100644 --- a/General/ProcController.vb +++ b/General/ProcController.vb @@ -81,13 +81,20 @@ Public Class ProcController Shared LastProgress As Double Sub SetProgress(value As String) - If Proc.IsSilent Then Exit Sub + If Proc.IsSilent Then + Exit Sub + End If If value.Contains("%") Then value = value.Left("%") - If value.Contains("[") Then value = value.Right("[") - If value.Contains(" ") Then value = value.RightLast(" ") + If value.Contains("[") Then + value = value.Right("[") + End If + + If value.Contains(" ") Then + value = value.RightLast(" ") + End If If value.IsDouble Then Dim val = value.ToDouble diff --git a/General/Strings.vb b/General/Strings.vb index 29966016..c1732ad1 100644 --- a/General/Strings.vb +++ b/General/Strings.vb @@ -1,8 +1,9 @@ Public Class Strings + Public Shared CharacterLimitReason As String = "In theory Windows supports paths that are longer than 260 characters, in reality neither Windows, nor the .NET Framework or the used tools have full long path support. StaxRip has a setting that allows to increase the limit but it's not recommended to change this limit! It will almost certainly not work!" Public Shared EventCommands As String = "A Event Command allows to define a command to be executed on a defined event. Furthermore criteria can be defined to execute the command only if certain criteria is matched." Public Shared MacrosHelp As String = "Macros are placeholders that can be used in command lines, scripts and other places, on execution StaxRip expands/replaces the macros with the actual values." + BR2 + "GUI Macros like $browse_file$ are typically used In custom menus like the video filter profiles menu." - Public Shared TaskDialogFooter As String = "[copymsg: Copy Message]" - Public Shared NoUnicode As String = $"Unicode filenames are not supported by AviSynth.{BR2}VapourSynth supports unicode, it can be enabled at:{BR2}Filters > Filter Setup > VapourSynth" Public Shared Muxer As String = "A muxer merges different video, audio and subtitle files into a single container file which is the actual output file. Using x264 or subtitles MKV or MP4 is required as container." + Public Shared NoUnicode As String = $"Unicode filenames are not supported by AviSynth.{BR2}VapourSynth supports unicode, it can be enabled at:{BR2}Filters > Filter Setup > VapourSynth" + Public Shared TaskDialogFooter As String = "[copymsg: Copy Message]" End Class diff --git a/General/VideoScript.vb b/General/VideoScript.vb index 38e1c637..e6472144 100644 --- a/General/VideoScript.vb +++ b/General/VideoScript.vb @@ -786,9 +786,9 @@ Public Class FilterCategory color.Filters.Add(New VideoFilter(color.Name, "ColorSpace | Transfer", "clip = core.fmtc.transfer(clip, transs='$select:msg:Select Input;Linear;470m;470bg;240m;SRGB;709;2020;2084$', transd='$select:msg:Select Output;Linear;470m;470bg;240m;SRGB;709;2020;2084$')")) color.Filters.Add(New VideoFilter(color.Name, "ColorSpace | Range", "$select:msg:Select Range;PC to TV|clip = core.fmtc.bitdepth(clip, fulls=True, fulld=False);TV to PC|clip = core.fmtc.bitdepth (clip, fulls=False, fulld=True)$")) color.Filters.Add(New VideoFilter(color.Name, "Convert | Tweak", "clip = adjust.Tweak(clip, sat=0.75, hue=115-138)")) - color.Filters.Add(New VideoFilter(color.Name, "Convert | BitDepth", "clip = core.fmtc.bitdepth(clip, bits=$select:msg:Select BitDepth;8;10;12;16;32$)")) + color.Filters.Add(New VideoFilter(color.Name, "Convert | BitDepth (fmtc)", "clip = core.fmtc.bitdepth(clip, bits=$select:msg:Select BitDepth;8;10;12;16;32$)")) color.Filters.Add(New VideoFilter(color.Name, "Convert | Format", "clip = core.avs.z_ConvertFormat(clip, pixel_type='$enter_text:Enter The Format You Wish To Convert To$',colorspace_op='$select:msg:Select Color Matrix Input;RGB;240m;709;2020ncl$:$select:msg:Select Color Transfer Input;Linear;470m;470bg;240m;SRGB;709;2020;st2084$:$select:msg:Select Color Primaries Input;470m;470bg;FILM;709;2020$:l=>$select:msg:Select Color Matrix output;RGB;FCC;YCGCO;240m;709;2020ncl$:$select:msg:Select Color Transfer Output;Linear;Log100;Log316;470m;470bg;240m;XVYCC;SRGB;709;2020;st2084$:$select:msg:Select Color Primaries Output;470m;470bg;FILM;709;2020$:l', dither_type='$select:msg:Select Dither Type;None;ordered$')")) - color.Filters.Add(New VideoFilter(color.Name, "Convert | Convert To", "clip = core.resize.Bicubic(clip, format=vs.$enter_text:Enter The Format You Wish To Convert To$)")) ''Ex: resize.Bicubic( format=vs.YUV444P8) + color.Filters.Add(New VideoFilter(color.Name, "Convert | Convert To", "clip = core.resize.Bicubic(clip, format=vs.$select:COMPATBGR32;COMPATYUY2;GRAY16;GRAY8;GRAYH;GRAYS;RGB24;RGB27;RGB30;RGB48;RGBH;RGBS;YUV410P8;YUV411P8;YUV420P8;YUV420P9;YUV420P10;YUV420P12;YUV420P14;YUV420P16;YUV422P8;YUV422P9;YUV422P10;YUV422P12;YUV422P14;YUV422P16;YUV440P8;YUV444P8;YUV444P9;YUV444P10;YUV444P12;YUV444P14;YUV444P16;YUV444PH;YUV444PS$)")) color.Filters.Add(New VideoFilter(color.Name, "Convert | To 444", "clip = core.fmtc.resample(clip, css='444')")) ret.Add(color) diff --git a/StaxRip.vbproj b/StaxRip.vbproj index 7af2fb76..3b184905 100644 --- a/StaxRip.vbproj +++ b/StaxRip.vbproj @@ -159,6 +159,7 @@ UserControl +