├── .travis.yml ├── appveyor.yml ├── rav1e_gui ├── My Project │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Application.Designer.vb │ ├── Resources.Designer.vb │ ├── app.manifest │ ├── Settings.settings │ ├── Resources.resx │ └── Settings.Designer.vb ├── SuspendResumeProcess.vb ├── AdvancedOptions.vb ├── App.config ├── Form1.resx ├── AdvancedOptions.resx ├── rav1e_gui.vbproj ├── AdvancedOptions.Designer.vb ├── Form1.Designer.vb └── Form1.vb ├── rav1e_gui.sln ├── README.md ├── .gitattributes └── .gitignore /.travis.yml: -------------------------------------------------------------------------------- 1 | language: csharp 2 | solution: rav1e_gui.sln 3 | 4 | os: 5 | - linux 6 | - osx 7 | -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | image: Visual Studio 2019 2 | configuration: Release 3 | 4 | artifacts: 5 | - path: rav1e_gui\bin\Release\rav1e_gui.exe 6 | -------------------------------------------------------------------------------- /rav1e_gui/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | Form1 5 | false 6 | 0 7 | true 8 | 0 9 | 0 10 | true 11 | 12 | -------------------------------------------------------------------------------- /rav1e_gui/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System 2 | Imports System.Reflection 3 | Imports System.Runtime.InteropServices 4 | 5 | ' General Information about an assembly is controlled through the following 6 | ' set of attributes. Change these attribute values to modify the information 7 | ' associated with an assembly. 8 | 9 | ' Review the values of the assembly attributes 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 21 | 22 | 23 | ' Version information for an assembly consists of the following four values: 24 | ' 25 | ' Major Version 26 | ' Minor Version 27 | ' Build Number 28 | ' Revision 29 | ' 30 | ' You can specify all the values or you can default the Build and Revision Numbers 31 | ' by using the '*' as shown below: 32 | ' 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /rav1e_gui.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27703.2035 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "rav1e_gui", "rav1e_gui\rav1e_gui.vbproj", "{51B64CB0-26F1-466F-A4EF-05F48DA441ED}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Debug|x64 = Debug|x64 12 | Release|Any CPU = Release|Any CPU 13 | Release|x64 = Release|x64 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 17 | {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Debug|Any CPU.Build.0 = Debug|Any CPU 18 | {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Debug|x64.ActiveCfg = Debug|x64 19 | {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Debug|x64.Build.0 = Debug|x64 20 | {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Release|x64.ActiveCfg = Release|x64 23 | {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Release|x64.Build.0 = Release|x64 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {6677CD0A-1F01-4E78-AAC1-7B208DACE1C2} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /rav1e_gui/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | 'NOTE: This file is auto-generated; do not modify it directly. To make changes, 18 | ' or if you encounter build errors in this file, go to the Project Designer 19 | ' (go to Project Properties or double-click the My Project node in 20 | ' Solution Explorer), and make changes on the Application tab. 21 | ' 22 | Partial Friend Class MyApplication 23 | 24 | _ 25 | Public Sub New() 26 | MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) 27 | Me.IsSingleInstance = false 28 | Me.EnableVisualStyles = true 29 | Me.SaveMySettingsOnExit = true 30 | Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses 31 | End Sub 32 | 33 | _ 34 | Protected Overrides Sub OnCreateMainForm() 35 | Me.MainForm = Global.rav1e_gui.Form1 36 | End Sub 37 | End Class 38 | End Namespace 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RAV1E GUI [![Travis Build Status](https://travis-ci.org/moisesmcardona/rav1e_gui.svg?branch=master)](https://travis-ci.org/moisesmcardona/rav1e_gui) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/moisesmcardona/rav1e_gui?branch=master&svg=true)](https://ci.appveyor.com/project/moisesmcardona/rav1e-gui) 2 | A GUI to convert video files to AV1 using rav1e 3 | 4 | ![Main Window Screenshot](https://moisescardona.me/wp-content/uploads/2019/08/rav1e-GUI-v1.16.png) 5 | 6 | ![Advanced Encoder Options Window Screenshot](https://moisescardona.me/wp-content/uploads/2019/08/rav1e-GUI-v1.15-Advanced-Window.png) 7 | 8 | I wrote this software to test the rav1e software. The GUI encodes the input video to .y4m to feed it into rav1e. The audio is encoded to Opus using ffmpeg. After the encoding is finished, the .ivf files are concatenated. Lastly, the .ivf and .opus (if video has audio) files are merged into a .webm or .mkv container. 9 | 10 | Originally written in Visual Basic .NET using Visual Studio 2017 and updated using Visual Studio 2019. 11 | 12 | ## Dependencies: 13 | 14 | * You need ffmpeg as found here: https://ffmpeg.zeranoe.com/builds/. Use the nightly builds. [Instructions here.](https://moisescardona.me/downloading-ffmpeg-rav1e-gui/) 15 | * You also need rav1e. The software comes bundled with it already, but newer builds can be found here: [https://moisescardona.me/rav1e-builds/](https://moisescardona.me/rav1e-builds/) 16 | 17 | Builds come with rav1e bundled, but not ffmpeg due to licensing restrictions. 18 | 19 | # Updated components builds: 20 | 21 | Ocasionally, rav1e gets updated. You can download the latest version of rav1e_gui with the latest version of rav1e included here: [https://moisescardona.me/rav1e-gui](https://moisescardona.me/rav1e-gui) 22 | 23 | Enjoy! 24 | -------------------------------------------------------------------------------- /rav1e_gui/SuspendResumeProcess.vb: -------------------------------------------------------------------------------- 1 | Imports System.Runtime.InteropServices 2 | 3 | Public Class SuspendResumeProcess 4 | Public Enum ThreadAccess As Integer 5 | Terminate = &H1 6 | SuspendResume = &H2 7 | GetContext = &H8 8 | SetContext = &H10 9 | SetInformation = &H20 10 | QueryInformation = &H40 11 | SetThreadToken = &H80 12 | Impersonate = &H100 13 | DirectImpersonation = &H200 14 | End Enum 15 | 16 | 17 | Private Shared Function OpenThread(dwDesiredAccess As ThreadAccess, bInheritHandle As Boolean, dwThreadId As Integer) As IntPtr 18 | End Function 19 | 20 | Private Shared Function SuspendThread(hThread As IntPtr) As UInteger 21 | End Function 22 | 23 | Private Shared Function ResumeThread(hThread As IntPtr) As Integer 24 | End Function 25 | 26 | Private Shared Function CloseHandle(hObject As IntPtr) As Boolean 27 | End Function 28 | Public Shared Sub SuspendProcess(ByVal pid As Integer) 29 | Dim proc = Process.GetProcessById(pid) 30 | If proc.ProcessName = String.Empty Then Return 31 | For Each pT As ProcessThread In proc.Threads 32 | Dim pOpenThread As IntPtr = OpenThread(ThreadAccess.SuspendResume, False, CUInt(pT.Id)) 33 | If pOpenThread = IntPtr.Zero Then 34 | Continue For 35 | End If 36 | SuspendThread(pOpenThread) 37 | CloseHandle(pOpenThread) 38 | Next 39 | End Sub 40 | Public Shared Sub ResumeProcess(ByVal pid As Integer) 41 | Dim proc = Process.GetProcessById(pid) 42 | If proc.ProcessName = String.Empty Then Return 43 | For Each pT As ProcessThread In proc.Threads 44 | Dim pOpenThread As IntPtr = OpenThread(ThreadAccess.SuspendResume, False, CUInt(pT.Id)) 45 | If pOpenThread = IntPtr.Zero Then 46 | Continue For 47 | End If 48 | Dim suspendCount = 0 49 | Do 50 | suspendCount = ResumeThread(pOpenThread) 51 | Loop While suspendCount > 0 52 | CloseHandle(pOpenThread) 53 | Next 54 | End Sub 55 | End Class 56 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /rav1e_gui/My Project/Resources.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | Imports System 15 | 16 | Namespace My.Resources 17 | 18 | 'This class was auto-generated by the StronglyTypedResourceBuilder 19 | 'class via a tool like ResGen or Visual Studio. 20 | 'To add or remove a member, edit your .ResX file then rerun ResGen 21 | 'with the /str option, or rebuild your VS project. 22 | ''' 23 | ''' A strongly-typed resource class, for looking up localized strings, etc. 24 | ''' 25 | _ 29 | Friend Module Resources 30 | 31 | Private resourceMan As Global.System.Resources.ResourceManager 32 | 33 | Private resourceCulture As Global.System.Globalization.CultureInfo 34 | 35 | ''' 36 | ''' Returns the cached ResourceManager instance used by this class. 37 | ''' 38 | _ 39 | Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager 40 | Get 41 | If Object.ReferenceEquals(resourceMan, Nothing) Then 42 | Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("rav1e_gui.Resources", GetType(Resources).Assembly) 43 | resourceMan = temp 44 | End If 45 | Return resourceMan 46 | End Get 47 | End Property 48 | 49 | ''' 50 | ''' Overrides the current thread's CurrentUICulture property for all 51 | ''' resource lookups using this strongly typed resource class. 52 | ''' 53 | _ 54 | Friend Property Culture() As Global.System.Globalization.CultureInfo 55 | Get 56 | Return resourceCulture 57 | End Get 58 | Set 59 | resourceCulture = value 60 | End Set 61 | End Property 62 | End Module 63 | End Namespace 64 | -------------------------------------------------------------------------------- /rav1e_gui/My Project/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 52 | 59 | 60 | 61 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /rav1e_gui/AdvancedOptions.vb: -------------------------------------------------------------------------------- 1 | Public Class AdvancedOptions 2 | 3 | Private Sub AdvancedOptions_Load(sender As Object, e As EventArgs) Handles MyBase.Load 4 | ColorPrimariesComboBox.SelectedItem = My.Settings.ColorPrimaries 5 | ContentLightTextBox.Text = My.Settings.ContentLight 6 | MatrixCoefficientsComboBox.SelectedItem = My.Settings.MatrixCoefficients 7 | TransferCharacteristicsComboBox.SelectedItem = My.Settings.TransferCharacteristics 8 | RangeComboBox.SelectedItem = My.Settings.Range 9 | QualityTuningComboBox.SelectedItem = My.Settings.Tune 10 | TilingRowsNumericUpDown.Value = My.Settings.TilingRows 11 | TilingColumnsNumericUpDown.Value = My.Settings.TilingColumns 12 | End Sub 13 | Private Sub ColorPrimariesComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ColorPrimariesComboBox.SelectedIndexChanged 14 | My.Settings.ColorPrimaries = ColorPrimariesComboBox.SelectedItem 15 | My.Settings.Save() 16 | End Sub 17 | 18 | Private Sub MatrixCoefficientsComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles MatrixCoefficientsComboBox.SelectedIndexChanged 19 | My.Settings.MatrixCoefficients = MatrixCoefficientsComboBox.SelectedItem 20 | My.Settings.Save() 21 | End Sub 22 | 23 | Private Sub TransferCharacteristicsComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TransferCharacteristicsComboBox.SelectedIndexChanged 24 | My.Settings.TransferCharacteristics = TransferCharacteristicsComboBox.SelectedItem 25 | My.Settings.Save() 26 | End Sub 27 | 28 | Private Sub QualityTuningComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles QualityTuningComboBox.SelectedIndexChanged 29 | My.Settings.Tune = QualityTuningComboBox.SelectedItem 30 | My.Settings.Save() 31 | End Sub 32 | 33 | Private Sub CloseButton_Click(sender As Object, e As EventArgs) Handles CloseButton.Click 34 | If Not IsPowerOfTwo(TilingRowsNumericUpDown.Value) Then 35 | MsgBox("The Tile Rows is not a power of 2. It must be a power of 2 for rav1e to work correctly.") 36 | ElseIf Not IsPowerOfTwo(TilingColumnsNumericUpDown.Value) Then 37 | MsgBox("The Tile Columns is not a power of 2. It must be a power of 2 for rav1e to work correctly.") 38 | Else 39 | Close() 40 | End If 41 | End Sub 42 | 43 | Private Sub ContentLightTextBox_TextChanged(sender As Object, e As EventArgs) Handles ContentLightTextBox.TextChanged 44 | My.Settings.ContentLight = ContentLightTextBox.Text 45 | My.Settings.Save() 46 | End Sub 47 | 48 | Private Sub RangeComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles RangeComboBox.SelectedIndexChanged 49 | My.Settings.Range = RangeComboBox.SelectedItem 50 | My.Settings.Save() 51 | End Sub 52 | 53 | Private Sub TilingRowsNumericUpDown_ValueChanged(sender As Object, e As EventArgs) Handles TilingRowsNumericUpDown.ValueChanged 54 | My.Settings.TilingRows = TilingRowsNumericUpDown.Value 55 | My.Settings.Save() 56 | End Sub 57 | 58 | Private Sub TilingColumsNumericUpDown_ValueChanged(sender As Object, e As EventArgs) Handles TilingColumnsNumericUpDown.ValueChanged 59 | My.Settings.TilingColumns = TilingColumnsNumericUpDown.Value 60 | My.Settings.Save() 61 | End Sub 62 | 63 | 64 | Private Function IsPowerOfTwo(number As Integer) As Boolean 65 | Return (number And (number - 1)) = 0 66 | End Function 67 | End Class -------------------------------------------------------------------------------- /rav1e_gui/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 100 7 | 8 | 9 | 5 10 | 11 | 12 | 13 | 14 | 15 | 64 16 | 17 | 18 | False 19 | 20 | 21 | 12 22 | 23 | 24 | True 25 | 26 | 27 | 1 28 | 29 | 30 | 240 31 | 32 | 33 | Psychovisual 34 | 35 | 36 | Unspecified 37 | 38 | 39 | Unspecified 40 | 41 | 42 | Unspecified 43 | 44 | 45 | False 46 | 47 | 48 | Limited 49 | 50 | 51 | 0,0 52 | 53 | 54 | 1024 55 | 56 | 57 | False 58 | 59 | 60 | True 61 | 62 | 63 | False 64 | 65 | 66 | 2 67 | 68 | 69 | 2 70 | 71 | 72 | True 73 | 74 | 75 | 0 76 | 77 | 78 | False 79 | 80 | 81 | -------------------------------------------------------------------------------- /rav1e_gui/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 100 18 | 19 | 20 | 5 21 | 22 | 23 | 24 | 25 | 26 | 64 27 | 28 | 29 | False 30 | 31 | 32 | 12 33 | 34 | 35 | True 36 | 37 | 38 | 1 39 | 40 | 41 | 240 42 | 43 | 44 | Psychovisual 45 | 46 | 47 | Unspecified 48 | 49 | 50 | Unspecified 51 | 52 | 53 | Unspecified 54 | 55 | 56 | False 57 | 58 | 59 | Limited 60 | 61 | 62 | 0,0 63 | 64 | 65 | 1024 66 | 67 | 68 | False 69 | 70 | 71 | True 72 | 73 | 74 | False 75 | 76 | 77 | 2 78 | 79 | 80 | 2 81 | 82 | 83 | True 84 | 85 | 86 | 0 87 | 88 | 89 | False 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | bld/ 21 | [Bb]in/ 22 | [Oo]bj/ 23 | [Ll]og/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | # Uncomment if you have tasks that create the project's static files in wwwroot 28 | #wwwroot/ 29 | 30 | # MSTest test Results 31 | [Tt]est[Rr]esult*/ 32 | [Bb]uild[Ll]og.* 33 | 34 | # NUNIT 35 | *.VisualState.xml 36 | TestResult.xml 37 | 38 | # Build Results of an ATL Project 39 | [Dd]ebugPS/ 40 | [Rr]eleasePS/ 41 | dlldata.c 42 | 43 | # DNX 44 | project.lock.json 45 | project.fragment.lock.json 46 | artifacts/ 47 | 48 | *_i.c 49 | *_p.c 50 | *_i.h 51 | *.ilk 52 | *.meta 53 | *.obj 54 | *.pch 55 | *.pdb 56 | *.pgc 57 | *.pgd 58 | *.rsp 59 | *.sbr 60 | *.tlb 61 | *.tli 62 | *.tlh 63 | *.tmp 64 | *.tmp_proj 65 | *.log 66 | *.vspscc 67 | *.vssscc 68 | .builds 69 | *.pidb 70 | *.svclog 71 | *.scc 72 | 73 | # Chutzpah Test files 74 | _Chutzpah* 75 | 76 | # Visual C++ cache files 77 | ipch/ 78 | *.aps 79 | *.ncb 80 | *.opendb 81 | *.opensdf 82 | *.sdf 83 | *.cachefile 84 | *.VC.db 85 | *.VC.VC.opendb 86 | 87 | # Visual Studio profiler 88 | *.psess 89 | *.vsp 90 | *.vspx 91 | *.sap 92 | 93 | # TFS 2012 Local Workspace 94 | $tf/ 95 | 96 | # Guidance Automation Toolkit 97 | *.gpState 98 | 99 | # ReSharper is a .NET coding add-in 100 | _ReSharper*/ 101 | *.[Rr]e[Ss]harper 102 | *.DotSettings.user 103 | 104 | # JustCode is a .NET coding add-in 105 | .JustCode 106 | 107 | # TeamCity is a build add-in 108 | _TeamCity* 109 | 110 | # DotCover is a Code Coverage Tool 111 | *.dotCover 112 | 113 | # NCrunch 114 | _NCrunch_* 115 | .*crunch*.local.xml 116 | nCrunchTemp_* 117 | 118 | # MightyMoose 119 | *.mm.* 120 | AutoTest.Net/ 121 | 122 | # Web workbench (sass) 123 | .sass-cache/ 124 | 125 | # Installshield output folder 126 | [Ee]xpress/ 127 | 128 | # DocProject is a documentation generator add-in 129 | DocProject/buildhelp/ 130 | DocProject/Help/*.HxT 131 | DocProject/Help/*.HxC 132 | DocProject/Help/*.hhc 133 | DocProject/Help/*.hhk 134 | DocProject/Help/*.hhp 135 | DocProject/Help/Html2 136 | DocProject/Help/html 137 | 138 | # Click-Once directory 139 | publish/ 140 | 141 | # Publish Web Output 142 | *.[Pp]ublish.xml 143 | *.azurePubxml 144 | # TODO: Comment the next line if you want to checkin your web deploy settings 145 | # but database connection strings (with potential passwords) will be unencrypted 146 | #*.pubxml 147 | *.publishproj 148 | 149 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 150 | # checkin your Azure Web App publish settings, but sensitive information contained 151 | # in these scripts will be unencrypted 152 | PublishScripts/ 153 | 154 | # NuGet Packages 155 | *.nupkg 156 | # The packages folder can be ignored because of Package Restore 157 | **/packages/* 158 | # except build/, which is used as an MSBuild target. 159 | !**/packages/build/ 160 | # Uncomment if necessary however generally it will be regenerated when needed 161 | #!**/packages/repositories.config 162 | # NuGet v3's project.json files produces more ignoreable files 163 | *.nuget.props 164 | *.nuget.targets 165 | 166 | # Microsoft Azure Build Output 167 | csx/ 168 | *.build.csdef 169 | 170 | # Microsoft Azure Emulator 171 | ecf/ 172 | rcf/ 173 | 174 | # Windows Store app package directories and files 175 | AppPackages/ 176 | BundleArtifacts/ 177 | Package.StoreAssociation.xml 178 | _pkginfo.txt 179 | 180 | # Visual Studio cache files 181 | # files ending in .cache can be ignored 182 | *.[Cc]ache 183 | # but keep track of directories ending in .cache 184 | !*.[Cc]ache/ 185 | 186 | # Others 187 | ClientBin/ 188 | ~$* 189 | *~ 190 | *.dbmdl 191 | *.dbproj.schemaview 192 | *.jfm 193 | *.pfx 194 | *.publishsettings 195 | node_modules/ 196 | orleans.codegen.cs 197 | 198 | # Since there are multiple workflows, uncomment next line to ignore bower_components 199 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 200 | #bower_components/ 201 | 202 | # RIA/Silverlight projects 203 | Generated_Code/ 204 | 205 | # Backup & report files from converting an old project file 206 | # to a newer Visual Studio version. Backup files are not needed, 207 | # because we have git ;-) 208 | _UpgradeReport_Files/ 209 | Backup*/ 210 | UpgradeLog*.XML 211 | UpgradeLog*.htm 212 | 213 | # SQL Server files 214 | *.mdf 215 | *.ldf 216 | 217 | # Business Intelligence projects 218 | *.rdl.data 219 | *.bim.layout 220 | *.bim_*.settings 221 | 222 | # Microsoft Fakes 223 | FakesAssemblies/ 224 | 225 | # GhostDoc plugin setting file 226 | *.GhostDoc.xml 227 | 228 | # Node.js Tools for Visual Studio 229 | .ntvs_analysis.dat 230 | 231 | # Visual Studio 6 build log 232 | *.plg 233 | 234 | # Visual Studio 6 workspace options file 235 | *.opt 236 | 237 | # Visual Studio LightSwitch build output 238 | **/*.HTMLClient/GeneratedArtifacts 239 | **/*.DesktopClient/GeneratedArtifacts 240 | **/*.DesktopClient/ModelManifest.xml 241 | **/*.Server/GeneratedArtifacts 242 | **/*.Server/ModelManifest.xml 243 | _Pvt_Extensions 244 | 245 | # Paket dependency manager 246 | .paket/paket.exe 247 | paket-files/ 248 | 249 | # FAKE - F# Make 250 | .fake/ 251 | 252 | # JetBrains Rider 253 | .idea/ 254 | *.sln.iml 255 | 256 | # CodeRush 257 | .cr/ 258 | 259 | # Python Tools for Visual Studio (PTVS) 260 | __pycache__/ 261 | *.pyc -------------------------------------------------------------------------------- /rav1e_gui/My Project/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /rav1e_gui/Form1.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /rav1e_gui/AdvancedOptions.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /rav1e_gui/rav1e_gui.vbproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {51B64CB0-26F1-466F-A4EF-05F48DA441ED} 8 | WinExe 9 | rav1e_gui.My.MyApplication 10 | rav1e_gui 11 | rav1e_gui 12 | 512 13 | WindowsForms 14 | v4.8 15 | true 16 | 17 | 18 | 19 | AnyCPU 20 | true 21 | full 22 | true 23 | true 24 | bin\Debug\ 25 | rav1e_gui.xml 26 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 27 | 28 | 29 | AnyCPU 30 | pdbonly 31 | false 32 | true 33 | true 34 | bin\Release\ 35 | rav1e_gui.xml 36 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 37 | 38 | 39 | On 40 | 41 | 42 | Binary 43 | 44 | 45 | Off 46 | 47 | 48 | On 49 | 50 | 51 | x64 52 | bin\x64\Debug\ 53 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 54 | 55 | 56 | x64 57 | bin\x64\Release\ 58 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 59 | 60 | 61 | My Project\app.manifest 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | AdvancedOptions.vb 91 | 92 | 93 | Form 94 | 95 | 96 | Form 97 | 98 | 99 | Form1.vb 100 | Form 101 | 102 | 103 | 104 | True 105 | Application.myapp 106 | 107 | 108 | True 109 | True 110 | Resources.resx 111 | 112 | 113 | True 114 | Settings.settings 115 | True 116 | 117 | 118 | 119 | 120 | 121 | AdvancedOptions.vb 122 | 123 | 124 | Form1.vb 125 | 126 | 127 | VbMyResourcesResXFileCodeGenerator 128 | Resources.Designer.vb 129 | My.Resources 130 | Designer 131 | 132 | 133 | 134 | 135 | 136 | MyApplicationCodeGenerator 137 | Application.Designer.vb 138 | 139 | 140 | SettingsSingleFileGenerator 141 | My 142 | Settings.Designer.vb 143 | 144 | 145 | 146 | 147 | -------------------------------------------------------------------------------- /rav1e_gui/My Project/Settings.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | _ 20 | Partial Friend NotInheritable Class MySettings 21 | Inherits Global.System.Configuration.ApplicationSettingsBase 22 | 23 | Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) 24 | 25 | #Region "My.Settings Auto-Save Functionality" 26 | #If _MyType = "WindowsForms" Then 27 | Private Shared addedHandler As Boolean 28 | 29 | Private Shared addedHandlerLockObject As New Object 30 | 31 | _ 32 | Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) 33 | If My.Application.SaveMySettingsOnExit Then 34 | My.Settings.Save() 35 | End If 36 | End Sub 37 | #End If 38 | #End Region 39 | 40 | Public Shared ReadOnly Property [Default]() As MySettings 41 | Get 42 | 43 | #If _MyType = "WindowsForms" Then 44 | If Not addedHandler Then 45 | SyncLock addedHandlerLockObject 46 | If Not addedHandler Then 47 | AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings 48 | addedHandler = True 49 | End If 50 | End SyncLock 51 | End If 52 | #End If 53 | Return defaultInstance 54 | End Get 55 | End Property 56 | 57 | _ 60 | Public Property quantizer() As Integer 61 | Get 62 | Return CType(Me("quantizer"),Integer) 63 | End Get 64 | Set 65 | Me("quantizer") = value 66 | End Set 67 | End Property 68 | 69 | _ 72 | Public Property speed() As Integer 73 | Get 74 | Return CType(Me("speed"),Integer) 75 | End Get 76 | Set 77 | Me("speed") = value 78 | End Set 79 | End Property 80 | 81 | _ 84 | Public Property tempFolder() As String 85 | Get 86 | Return CType(Me("tempFolder"),String) 87 | End Get 88 | Set 89 | Me("tempFolder") = value 90 | End Set 91 | End Property 92 | 93 | _ 96 | Public Property AudioBitrate() As Integer 97 | Get 98 | Return CType(Me("AudioBitrate"),Integer) 99 | End Get 100 | Set 101 | Me("AudioBitrate") = value 102 | End Set 103 | End Property 104 | 105 | _ 108 | Public Property lowlat() As Boolean 109 | Get 110 | Return CType(Me("lowlat"),Boolean) 111 | End Get 112 | Set 113 | Me("lowlat") = value 114 | End Set 115 | End Property 116 | 117 | _ 120 | Public Property minKeyInt() As Integer 121 | Get 122 | Return CType(Me("minKeyInt"),Integer) 123 | End Get 124 | Set 125 | Me("minKeyInt") = value 126 | End Set 127 | End Property 128 | 129 | _ 132 | Public Property removeTempFiles() As Boolean 133 | Get 134 | Return CType(Me("removeTempFiles"),Boolean) 135 | End Get 136 | Set 137 | Me("removeTempFiles") = value 138 | End Set 139 | End Property 140 | 141 | _ 144 | Public Property pieceSeconds() As Integer 145 | Get 146 | Return CType(Me("pieceSeconds"),Integer) 147 | End Get 148 | Set 149 | Me("pieceSeconds") = value 150 | End Set 151 | End Property 152 | 153 | _ 156 | Public Property maxKeyInt() As Integer 157 | Get 158 | Return CType(Me("maxKeyInt"),Integer) 159 | End Get 160 | Set 161 | Me("maxKeyInt") = value 162 | End Set 163 | End Property 164 | 165 | _ 168 | Public Property Tune() As String 169 | Get 170 | Return CType(Me("Tune"),String) 171 | End Get 172 | Set 173 | Me("Tune") = value 174 | End Set 175 | End Property 176 | 177 | _ 180 | Public Property ColorPrimaries() As String 181 | Get 182 | Return CType(Me("ColorPrimaries"),String) 183 | End Get 184 | Set 185 | Me("ColorPrimaries") = value 186 | End Set 187 | End Property 188 | 189 | _ 192 | Public Property MatrixCoefficients() As String 193 | Get 194 | Return CType(Me("MatrixCoefficients"),String) 195 | End Get 196 | Set 197 | Me("MatrixCoefficients") = value 198 | End Set 199 | End Property 200 | 201 | _ 204 | Public Property TransferCharacteristics() As String 205 | Get 206 | Return CType(Me("TransferCharacteristics"),String) 207 | End Get 208 | Set 209 | Me("TransferCharacteristics") = value 210 | End Set 211 | End Property 212 | 213 | _ 216 | Public Property ShowPSNRMetrics() As Boolean 217 | Get 218 | Return CType(Me("ShowPSNRMetrics"),Boolean) 219 | End Get 220 | Set 221 | Me("ShowPSNRMetrics") = value 222 | End Set 223 | End Property 224 | 225 | _ 228 | Public Property Range() As String 229 | Get 230 | Return CType(Me("Range"),String) 231 | End Get 232 | Set 233 | Me("Range") = value 234 | End Set 235 | End Property 236 | 237 | _ 240 | Public Property ContentLight() As String 241 | Get 242 | Return CType(Me("ContentLight"),String) 243 | End Get 244 | Set 245 | Me("ContentLight") = value 246 | End Set 247 | End Property 248 | 249 | _ 252 | Public Property VideoBitrate() As Integer 253 | Get 254 | Return CType(Me("VideoBitrate"),Integer) 255 | End Get 256 | Set 257 | Me("VideoBitrate") = value 258 | End Set 259 | End Property 260 | 261 | _ 264 | Public Property useBitrate() As Boolean 265 | Get 266 | Return CType(Me("useBitrate"),Boolean) 267 | End Get 268 | Set 269 | Me("useBitrate") = value 270 | End Set 271 | End Property 272 | 273 | _ 276 | Public Property useQuantizer() As Boolean 277 | Get 278 | Return CType(Me("useQuantizer"),Boolean) 279 | End Get 280 | Set 281 | Me("useQuantizer") = value 282 | End Set 283 | End Property 284 | 285 | _ 288 | Public Property twoPass() As Boolean 289 | Get 290 | Return CType(Me("twoPass"),Boolean) 291 | End Get 292 | Set 293 | Me("twoPass") = value 294 | End Set 295 | End Property 296 | 297 | _ 300 | Public Property TilingRows() As Integer 301 | Get 302 | Return CType(Me("TilingRows"),Integer) 303 | End Get 304 | Set 305 | Me("TilingRows") = value 306 | End Set 307 | End Property 308 | 309 | _ 312 | Public Property TilingColumns() As Integer 313 | Get 314 | Return CType(Me("TilingColumns"),Integer) 315 | End Get 316 | Set 317 | Me("TilingColumns") = value 318 | End Set 319 | End Property 320 | 321 | _ 324 | Public Property UseTiling() As Boolean 325 | Get 326 | Return CType(Me("UseTiling"),Boolean) 327 | End Get 328 | Set 329 | Me("UseTiling") = value 330 | End Set 331 | End Property 332 | 333 | _ 336 | Public Property CPUThreads() As Integer 337 | Get 338 | Return CType(Me("CPUThreads"),Integer) 339 | End Get 340 | Set 341 | Me("CPUThreads") = value 342 | End Set 343 | End Property 344 | 345 | _ 348 | Public Property RunRav1eInWSL() As Boolean 349 | Get 350 | Return CType(Me("RunRav1eInWSL"),Boolean) 351 | End Get 352 | Set 353 | Me("RunRav1eInWSL") = value 354 | End Set 355 | End Property 356 | End Class 357 | End Namespace 358 | 359 | Namespace My 360 | 361 | _ 364 | Friend Module MySettingsProperty 365 | 366 | _ 367 | Friend ReadOnly Property Settings() As Global.rav1e_gui.My.MySettings 368 | Get 369 | Return Global.rav1e_gui.My.MySettings.Default 370 | End Get 371 | End Property 372 | End Module 373 | End Namespace 374 | -------------------------------------------------------------------------------- /rav1e_gui/AdvancedOptions.Designer.vb: -------------------------------------------------------------------------------- 1 | 2 | Partial Class AdvancedOptions 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form overrides dispose to clean up the component list. 6 | 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Required by the Windows Form Designer 18 | Private components As System.ComponentModel.IContainer 19 | 20 | 'NOTE: The following procedure is required by the Windows Form Designer 21 | 'It can be modified using the Windows Form Designer. 22 | 'Do not modify it using the code editor. 23 | 24 | Private Sub InitializeComponent() 25 | Me.GroupBox1 = New System.Windows.Forms.GroupBox() 26 | Me.ContentLightTextBox = New System.Windows.Forms.TextBox() 27 | Me.Label6 = New System.Windows.Forms.Label() 28 | Me.RangeComboBox = New System.Windows.Forms.ComboBox() 29 | Me.Label5 = New System.Windows.Forms.Label() 30 | Me.TransferCharacteristicsComboBox = New System.Windows.Forms.ComboBox() 31 | Me.Label3 = New System.Windows.Forms.Label() 32 | Me.MatrixCoefficientsComboBox = New System.Windows.Forms.ComboBox() 33 | Me.Label2 = New System.Windows.Forms.Label() 34 | Me.ColorPrimariesComboBox = New System.Windows.Forms.ComboBox() 35 | Me.Label1 = New System.Windows.Forms.Label() 36 | Me.GroupBox2 = New System.Windows.Forms.GroupBox() 37 | Me.QualityTuningComboBox = New System.Windows.Forms.ComboBox() 38 | Me.Label4 = New System.Windows.Forms.Label() 39 | Me.CloseButton = New System.Windows.Forms.Button() 40 | Me.GroupBox3 = New System.Windows.Forms.GroupBox() 41 | Me.TilingColumnsNumericUpDown = New System.Windows.Forms.NumericUpDown() 42 | Me.Label8 = New System.Windows.Forms.Label() 43 | Me.TilingRowsNumericUpDown = New System.Windows.Forms.NumericUpDown() 44 | Me.Label7 = New System.Windows.Forms.Label() 45 | Me.GroupBox1.SuspendLayout 46 | Me.GroupBox2.SuspendLayout 47 | Me.GroupBox3.SuspendLayout 48 | CType(Me.TilingColumnsNumericUpDown, System.ComponentModel.ISupportInitialize).BeginInit() 49 | CType(Me.TilingRowsNumericUpDown, System.ComponentModel.ISupportInitialize).BeginInit() 50 | Me.SuspendLayout 51 | ' 52 | 'GroupBox1 53 | ' 54 | Me.GroupBox1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 55 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 56 | Me.GroupBox1.Controls.Add(Me.ContentLightTextBox) 57 | Me.GroupBox1.Controls.Add(Me.Label6) 58 | Me.GroupBox1.Controls.Add(Me.RangeComboBox) 59 | Me.GroupBox1.Controls.Add(Me.Label5) 60 | Me.GroupBox1.Controls.Add(Me.TransferCharacteristicsComboBox) 61 | Me.GroupBox1.Controls.Add(Me.Label3) 62 | Me.GroupBox1.Controls.Add(Me.MatrixCoefficientsComboBox) 63 | Me.GroupBox1.Controls.Add(Me.Label2) 64 | Me.GroupBox1.Controls.Add(Me.ColorPrimariesComboBox) 65 | Me.GroupBox1.Controls.Add(Me.Label1) 66 | Me.GroupBox1.Location = New System.Drawing.Point(12, 12) 67 | Me.GroupBox1.Name = "GroupBox1" 68 | Me.GroupBox1.Size = New System.Drawing.Size(361, 157) 69 | Me.GroupBox1.TabIndex = 0 70 | Me.GroupBox1.TabStop = False 71 | Me.GroupBox1.Text = "Color Parameters" 72 | ' 73 | 'ContentLightTextBox 74 | ' 75 | Me.ContentLightTextBox.Location = New System.Drawing.Point(127, 45) 76 | Me.ContentLightTextBox.Name = "ContentLightTextBox" 77 | Me.ContentLightTextBox.Size = New System.Drawing.Size(219, 20) 78 | Me.ContentLightTextBox.TabIndex = 9 79 | ' 80 | 'Label6 81 | ' 82 | Me.Label6.AutoSize = True 83 | Me.Label6.Location = New System.Drawing.Point(54, 48) 84 | Me.Label6.Name = "Label6" 85 | Me.Label6.Size = New System.Drawing.Size(73, 13) 86 | Me.Label6.TabIndex = 8 87 | Me.Label6.Text = "Content Light:" 88 | ' 89 | 'RangeComboBox 90 | ' 91 | Me.RangeComboBox.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 92 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 93 | Me.RangeComboBox.FormattingEnabled = True 94 | Me.RangeComboBox.Items.AddRange(New Object() {"Limited", "Full"}) 95 | Me.RangeComboBox.Location = New System.Drawing.Point(127, 93) 96 | Me.RangeComboBox.Name = "RangeComboBox" 97 | Me.RangeComboBox.Size = New System.Drawing.Size(219, 21) 98 | Me.RangeComboBox.TabIndex = 7 99 | ' 100 | 'Label5 101 | ' 102 | Me.Label5.AutoSize = True 103 | Me.Label5.Location = New System.Drawing.Point(85, 96) 104 | Me.Label5.Name = "Label5" 105 | Me.Label5.Size = New System.Drawing.Size(42, 13) 106 | Me.Label5.TabIndex = 6 107 | Me.Label5.Text = "Range:" 108 | ' 109 | 'TransferCharacteristicsComboBox 110 | ' 111 | Me.TransferCharacteristicsComboBox.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 112 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 113 | Me.TransferCharacteristicsComboBox.FormattingEnabled = True 114 | Me.TransferCharacteristicsComboBox.Items.AddRange(New Object() {"Unspecified", "BT1886", "BT470M", "BT470BG", "ST170M", "ST240M", "Linear", "Logarithmic100", "Logarithmic316", "XVYCC", "BT1361E", "SRGB", "BT2020Ten", "BT2020Twelve", "PerceptualQuantizer", "ST428", "HybridLogGamma"}) 115 | Me.TransferCharacteristicsComboBox.Location = New System.Drawing.Point(127, 116) 116 | Me.TransferCharacteristicsComboBox.Name = "TransferCharacteristicsComboBox" 117 | Me.TransferCharacteristicsComboBox.Size = New System.Drawing.Size(219, 21) 118 | Me.TransferCharacteristicsComboBox.TabIndex = 5 119 | ' 120 | 'Label3 121 | ' 122 | Me.Label3.AutoSize = True 123 | Me.Label3.Location = New System.Drawing.Point(6, 119) 124 | Me.Label3.Name = "Label3" 125 | Me.Label3.Size = New System.Drawing.Size(121, 13) 126 | Me.Label3.TabIndex = 4 127 | Me.Label3.Text = "Transfer Characteristics:" 128 | ' 129 | 'MatrixCoefficientsComboBox 130 | ' 131 | Me.MatrixCoefficientsComboBox.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 132 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 133 | Me.MatrixCoefficientsComboBox.FormattingEnabled = True 134 | Me.MatrixCoefficientsComboBox.Items.AddRange(New Object() {"Unspecified", "Identity", "B709", "BT470M", "BT470BG", "ST170M", "ST240M", "YCgCo", "BT2020NonConstantLuminance", "BT2020ConstantLuminance", "ST2085", "ChromaticityDerivedNonConstantLuminance", "ChromaticityDerivedConstantLuminance", "ICtCp"}) 135 | Me.MatrixCoefficientsComboBox.Location = New System.Drawing.Point(127, 69) 136 | Me.MatrixCoefficientsComboBox.Name = "MatrixCoefficientsComboBox" 137 | Me.MatrixCoefficientsComboBox.Size = New System.Drawing.Size(219, 21) 138 | Me.MatrixCoefficientsComboBox.TabIndex = 3 139 | ' 140 | 'Label2 141 | ' 142 | Me.Label2.AutoSize = True 143 | Me.Label2.Location = New System.Drawing.Point(31, 72) 144 | Me.Label2.Name = "Label2" 145 | Me.Label2.Size = New System.Drawing.Size(96, 13) 146 | Me.Label2.TabIndex = 2 147 | Me.Label2.Text = "Matrix Coefficients:" 148 | ' 149 | 'ColorPrimariesComboBox 150 | ' 151 | Me.ColorPrimariesComboBox.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 152 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 153 | Me.ColorPrimariesComboBox.FormattingEnabled = True 154 | Me.ColorPrimariesComboBox.Items.AddRange(New Object() {"Unspecified", "BT709", "BT470M", "BT470BG", "ST170M", "ST240M", "Film", "BT2020", "ST428", "P3DCI", "P3Display", "Tech3213"}) 155 | Me.ColorPrimariesComboBox.Location = New System.Drawing.Point(128, 21) 156 | Me.ColorPrimariesComboBox.Name = "ColorPrimariesComboBox" 157 | Me.ColorPrimariesComboBox.Size = New System.Drawing.Size(219, 21) 158 | Me.ColorPrimariesComboBox.TabIndex = 1 159 | ' 160 | 'Label1 161 | ' 162 | Me.Label1.AutoSize = True 163 | Me.Label1.Location = New System.Drawing.Point(48, 24) 164 | Me.Label1.Name = "Label1" 165 | Me.Label1.Size = New System.Drawing.Size(79, 13) 166 | Me.Label1.TabIndex = 0 167 | Me.Label1.Text = "Color Primaries:" 168 | ' 169 | 'GroupBox2 170 | ' 171 | Me.GroupBox2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 172 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 173 | Me.GroupBox2.Controls.Add(Me.QualityTuningComboBox) 174 | Me.GroupBox2.Controls.Add(Me.Label4) 175 | Me.GroupBox2.Location = New System.Drawing.Point(11, 175) 176 | Me.GroupBox2.Name = "GroupBox2" 177 | Me.GroupBox2.Size = New System.Drawing.Size(361, 61) 178 | Me.GroupBox2.TabIndex = 1 179 | Me.GroupBox2.TabStop = False 180 | Me.GroupBox2.Text = "Other Options" 181 | ' 182 | 'QualityTuningComboBox 183 | ' 184 | Me.QualityTuningComboBox.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 185 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 186 | Me.QualityTuningComboBox.FormattingEnabled = True 187 | Me.QualityTuningComboBox.Items.AddRange(New Object() {"Psnr", "Psychovisual"}) 188 | Me.QualityTuningComboBox.Location = New System.Drawing.Point(128, 27) 189 | Me.QualityTuningComboBox.Name = "QualityTuningComboBox" 190 | Me.QualityTuningComboBox.Size = New System.Drawing.Size(219, 21) 191 | Me.QualityTuningComboBox.TabIndex = 6 192 | ' 193 | 'Label4 194 | ' 195 | Me.Label4.AutoSize = True 196 | Me.Label4.Location = New System.Drawing.Point(49, 30) 197 | Me.Label4.Name = "Label4" 198 | Me.Label4.Size = New System.Drawing.Size(78, 13) 199 | Me.Label4.TabIndex = 2 200 | Me.Label4.Text = "Quality Tuning:" 201 | ' 202 | 'CloseButton 203 | ' 204 | Me.CloseButton.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 205 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 206 | Me.CloseButton.Location = New System.Drawing.Point(13, 355) 207 | Me.CloseButton.Name = "CloseButton" 208 | Me.CloseButton.Size = New System.Drawing.Size(360, 23) 209 | Me.CloseButton.TabIndex = 2 210 | Me.CloseButton.Text = "Close" 211 | Me.CloseButton.UseVisualStyleBackColor = True 212 | ' 213 | 'GroupBox3 214 | ' 215 | Me.GroupBox3.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 216 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 217 | Me.GroupBox3.Controls.Add(Me.TilingColumnsNumericUpDown) 218 | Me.GroupBox3.Controls.Add(Me.Label8) 219 | Me.GroupBox3.Controls.Add(Me.TilingRowsNumericUpDown) 220 | Me.GroupBox3.Controls.Add(Me.Label7) 221 | Me.GroupBox3.Location = New System.Drawing.Point(12, 242) 222 | Me.GroupBox3.Name = "GroupBox3" 223 | Me.GroupBox3.Size = New System.Drawing.Size(361, 61) 224 | Me.GroupBox3.TabIndex = 7 225 | Me.GroupBox3.TabStop = False 226 | Me.GroupBox3.Text = "Tiling" 227 | ' 228 | 'TilingColumnsNumericUpDown 229 | ' 230 | Me.TilingColumnsNumericUpDown.Increment = New Decimal(New Integer() {2, 0, 0, 0}) 231 | Me.TilingColumnsNumericUpDown.Location = New System.Drawing.Point(180, 26) 232 | Me.TilingColumnsNumericUpDown.Maximum = New Decimal(New Integer() {64, 0, 0, 0}) 233 | Me.TilingColumnsNumericUpDown.Name = "TilingColumnsNumericUpDown" 234 | Me.TilingColumnsNumericUpDown.Size = New System.Drawing.Size(51, 20) 235 | Me.TilingColumnsNumericUpDown.TabIndex = 5 236 | ' 237 | 'Label8 238 | ' 239 | Me.Label8.AutoSize = True 240 | Me.Label8.Location = New System.Drawing.Point(124, 28) 241 | Me.Label8.Name = "Label8" 242 | Me.Label8.Size = New System.Drawing.Size(50, 13) 243 | Me.Label8.TabIndex = 4 244 | Me.Label8.Text = "Columns:" 245 | ' 246 | 'TilingRowsNumericUpDown 247 | ' 248 | Me.TilingRowsNumericUpDown.Increment = New Decimal(New Integer() {2, 0, 0, 0}) 249 | Me.TilingRowsNumericUpDown.Location = New System.Drawing.Point(49, 26) 250 | Me.TilingRowsNumericUpDown.Maximum = New Decimal(New Integer() {64, 0, 0, 0}) 251 | Me.TilingRowsNumericUpDown.Name = "TilingRowsNumericUpDown" 252 | Me.TilingRowsNumericUpDown.Size = New System.Drawing.Size(51, 20) 253 | Me.TilingRowsNumericUpDown.TabIndex = 3 254 | ' 255 | 'Label7 256 | ' 257 | Me.Label7.AutoSize = True 258 | Me.Label7.Location = New System.Drawing.Point(6, 28) 259 | Me.Label7.Name = "Label7" 260 | Me.Label7.Size = New System.Drawing.Size(37, 13) 261 | Me.Label7.TabIndex = 2 262 | Me.Label7.Text = "Rows:" 263 | ' 264 | 'TilingRowsNumericUpDown 265 | ' 266 | Me.TilingRowsNumericUpDown.Location = New System.Drawing.Point(49, 26) 267 | Me.TilingRowsNumericUpDown.Maximum = New Decimal(New Integer() {6, 0, 0, 0}) 268 | Me.TilingRowsNumericUpDown.Name = "TilingRowsNumericUpDown" 269 | Me.TilingRowsNumericUpDown.Size = New System.Drawing.Size(51, 20) 270 | Me.TilingRowsNumericUpDown.TabIndex = 3 271 | ' 272 | 'Label7 273 | ' 274 | Me.Label7.AutoSize = True 275 | Me.Label7.Location = New System.Drawing.Point(6, 28) 276 | Me.Label7.Name = "Label7" 277 | Me.Label7.Size = New System.Drawing.Size(37, 13) 278 | Me.Label7.TabIndex = 2 279 | Me.Label7.Text = "Rows:" 280 | ' 281 | 'AdvancedOptions 282 | ' 283 | Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 284 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 285 | Me.ClientSize = New System.Drawing.Size(384, 399) 286 | Me.Controls.Add(Me.GroupBox3) 287 | Me.Controls.Add(Me.CloseButton) 288 | Me.Controls.Add(Me.GroupBox2) 289 | Me.Controls.Add(Me.GroupBox1) 290 | Me.MaximizeBox = False 291 | Me.MinimizeBox = False 292 | Me.Name = "AdvancedOptions" 293 | Me.Text = "Advanced Encoder Options" 294 | Me.GroupBox1.ResumeLayout(False) 295 | Me.GroupBox1.PerformLayout 296 | Me.GroupBox2.ResumeLayout(False) 297 | Me.GroupBox2.PerformLayout 298 | Me.GroupBox3.ResumeLayout(False) 299 | Me.GroupBox3.PerformLayout 300 | CType(Me.TilingColumnsNumericUpDown, System.ComponentModel.ISupportInitialize).EndInit() 301 | CType(Me.TilingRowsNumericUpDown, System.ComponentModel.ISupportInitialize).EndInit() 302 | Me.ResumeLayout(False) 303 | 304 | End Sub 305 | 306 | Friend WithEvents GroupBox1 As GroupBox 307 | Friend WithEvents MatrixCoefficientsComboBox As ComboBox 308 | Friend WithEvents Label2 As Label 309 | Friend WithEvents ColorPrimariesComboBox As ComboBox 310 | Friend WithEvents Label1 As Label 311 | Friend WithEvents TransferCharacteristicsComboBox As ComboBox 312 | Friend WithEvents Label3 As Label 313 | Friend WithEvents GroupBox2 As GroupBox 314 | Friend WithEvents QualityTuningComboBox As ComboBox 315 | Friend WithEvents Label4 As Label 316 | Friend WithEvents CloseButton As Button 317 | Friend WithEvents RangeComboBox As ComboBox 318 | Friend WithEvents Label5 As Label 319 | Friend WithEvents ContentLightTextBox As TextBox 320 | Friend WithEvents Label6 As Label 321 | Friend WithEvents GroupBox3 As GroupBox 322 | Friend WithEvents Label7 As Label 323 | Friend WithEvents TilingColumnsNumericUpDown As NumericUpDown 324 | Friend WithEvents Label8 As Label 325 | Friend WithEvents TilingRowsNumericUpDown As NumericUpDown 326 | End Class 327 | -------------------------------------------------------------------------------- /rav1e_gui/Form1.Designer.vb: -------------------------------------------------------------------------------- 1 | 2 | Partial Class Form1 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form overrides dispose to clean up the component list. 6 | 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Required by the Windows Form Designer 18 | Private components As System.ComponentModel.IContainer 19 | 20 | 'NOTE: The following procedure is required by the Windows Form Designer 21 | 'It can be modified using the Windows Form Designer. 22 | 'Do not modify it using the code editor. 23 | 24 | Private Sub InitializeComponent() 25 | Me.Label1 = New System.Windows.Forms.Label() 26 | Me.Label2 = New System.Windows.Forms.Label() 27 | Me.InputTxt = New System.Windows.Forms.TextBox() 28 | Me.OutputTxt = New System.Windows.Forms.TextBox() 29 | Me.InputBrowseBtn = New System.Windows.Forms.Button() 30 | Me.OutputBrowseBtn = New System.Windows.Forms.Button() 31 | Me.StartBtn = New System.Windows.Forms.Button() 32 | Me.Label4 = New System.Windows.Forms.Label() 33 | Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() 34 | Me.Label5 = New System.Windows.Forms.Label() 35 | Me.Label6 = New System.Windows.Forms.Label() 36 | Me.GroupBox1 = New System.Windows.Forms.GroupBox() 37 | Me.RunRav1eInWSL = New System.Windows.Forms.CheckBox() 38 | Me.videoBitrate = New System.Windows.Forms.NumericUpDown() 39 | Me.UseTilingCheckbox = New System.Windows.Forms.CheckBox() 40 | Me.twoPass = New System.Windows.Forms.CheckBox() 41 | Me.Label16 = New System.Windows.Forms.Label() 42 | Me.ShowPSNRMetrics = New System.Windows.Forms.CheckBox() 43 | Me.CPUThreads = New System.Windows.Forms.NumericUpDown() 44 | Me.Label15 = New System.Windows.Forms.Label() 45 | Me.useBitrate = New System.Windows.Forms.RadioButton() 46 | Me.AdvancedEncoderOptionsButton = New System.Windows.Forms.Button() 47 | Me.useQuantizer = New System.Windows.Forms.RadioButton() 48 | Me.Label13 = New System.Windows.Forms.Label() 49 | Me.quantizer = New System.Windows.Forms.NumericUpDown() 50 | Me.LowLatencyCheckbox = New System.Windows.Forms.CheckBox() 51 | Me.MaxKeyFrameInterval = New System.Windows.Forms.NumericUpDown() 52 | Me.Label12 = New System.Windows.Forms.Label() 53 | Me.MinKeyFrameInterval = New System.Windows.Forms.NumericUpDown() 54 | Me.Label10 = New System.Windows.Forms.Label() 55 | Me.pieceSeconds = New System.Windows.Forms.NumericUpDown() 56 | Me.Label11 = New System.Windows.Forms.Label() 57 | Me.audioBitrate = New System.Windows.Forms.NumericUpDown() 58 | Me.Label9 = New System.Windows.Forms.Label() 59 | Me.speed = New System.Windows.Forms.NumericUpDown() 60 | Me.Label7 = New System.Windows.Forms.Label() 61 | Me.RemoveTempFiles = New System.Windows.Forms.CheckBox() 62 | Me.BrowseTempLocation = New System.Windows.Forms.Button() 63 | Me.Label8 = New System.Windows.Forms.Label() 64 | Me.tempLocationPath = New System.Windows.Forms.TextBox() 65 | Me.rav1eVersionLabel = New System.Windows.Forms.Label() 66 | Me.Label14 = New System.Windows.Forms.Label() 67 | Me.ProgressLog = New System.Windows.Forms.RichTextBox() 68 | Me.SplitContainer1 = New System.Windows.Forms.SplitContainer() 69 | Me.ffmpegVersionLabel = New System.Windows.Forms.Label() 70 | Me.PauseResumeButton = New System.Windows.Forms.Button() 71 | Me.ClearLogBtn = New System.Windows.Forms.Button() 72 | Me.SaveLogBtn = New System.Windows.Forms.Button() 73 | Me.GroupBox1.SuspendLayout() 74 | CType(Me.videoBitrate, System.ComponentModel.ISupportInitialize).BeginInit() 75 | CType(Me.CPUThreads, System.ComponentModel.ISupportInitialize).BeginInit() 76 | CType(Me.quantizer, System.ComponentModel.ISupportInitialize).BeginInit() 77 | CType(Me.MaxKeyFrameInterval, System.ComponentModel.ISupportInitialize).BeginInit() 78 | CType(Me.MinKeyFrameInterval, System.ComponentModel.ISupportInitialize).BeginInit() 79 | CType(Me.pieceSeconds, System.ComponentModel.ISupportInitialize).BeginInit() 80 | CType(Me.audioBitrate, System.ComponentModel.ISupportInitialize).BeginInit() 81 | CType(Me.speed, System.ComponentModel.ISupportInitialize).BeginInit() 82 | CType(Me.SplitContainer1, System.ComponentModel.ISupportInitialize).BeginInit() 83 | Me.SplitContainer1.Panel1.SuspendLayout() 84 | Me.SplitContainer1.Panel2.SuspendLayout() 85 | Me.SplitContainer1.SuspendLayout() 86 | Me.SuspendLayout() 87 | ' 88 | 'Label1 89 | ' 90 | Me.Label1.AutoSize = True 91 | Me.Label1.Location = New System.Drawing.Point(3, 9) 92 | Me.Label1.Name = "Label1" 93 | Me.Label1.Size = New System.Drawing.Size(151, 13) 94 | Me.Label1.TabIndex = 0 95 | Me.Label1.Text = "Step 1: Browse for an input file" 96 | ' 97 | 'Label2 98 | ' 99 | Me.Label2.AutoSize = True 100 | Me.Label2.Location = New System.Drawing.Point(3, 52) 101 | Me.Label2.Name = "Label2" 102 | Me.Label2.Size = New System.Drawing.Size(182, 13) 103 | Me.Label2.TabIndex = 1 104 | Me.Label2.Text = "Step 2: Output location and filename:" 105 | ' 106 | 'InputTxt 107 | ' 108 | Me.InputTxt.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 109 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 110 | Me.InputTxt.Location = New System.Drawing.Point(6, 26) 111 | Me.InputTxt.Name = "InputTxt" 112 | Me.InputTxt.Size = New System.Drawing.Size(349, 20) 113 | Me.InputTxt.TabIndex = 1 114 | ' 115 | 'OutputTxt 116 | ' 117 | Me.OutputTxt.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 118 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 119 | Me.OutputTxt.Location = New System.Drawing.Point(6, 68) 120 | Me.OutputTxt.Name = "OutputTxt" 121 | Me.OutputTxt.Size = New System.Drawing.Size(349, 20) 122 | Me.OutputTxt.TabIndex = 3 123 | ' 124 | 'InputBrowseBtn 125 | ' 126 | Me.InputBrowseBtn.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 127 | Me.InputBrowseBtn.Location = New System.Drawing.Point(361, 22) 128 | Me.InputBrowseBtn.Name = "InputBrowseBtn" 129 | Me.InputBrowseBtn.Size = New System.Drawing.Size(75, 23) 130 | Me.InputBrowseBtn.TabIndex = 2 131 | Me.InputBrowseBtn.Text = "Browse" 132 | Me.InputBrowseBtn.UseVisualStyleBackColor = True 133 | ' 134 | 'OutputBrowseBtn 135 | ' 136 | Me.OutputBrowseBtn.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 137 | Me.OutputBrowseBtn.Location = New System.Drawing.Point(361, 66) 138 | Me.OutputBrowseBtn.Name = "OutputBrowseBtn" 139 | Me.OutputBrowseBtn.Size = New System.Drawing.Size(75, 23) 140 | Me.OutputBrowseBtn.TabIndex = 4 141 | Me.OutputBrowseBtn.Text = "Browse" 142 | Me.OutputBrowseBtn.UseVisualStyleBackColor = True 143 | ' 144 | 'StartBtn 145 | ' 146 | Me.StartBtn.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ 147 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 148 | Me.StartBtn.Location = New System.Drawing.Point(6, 310) 149 | Me.StartBtn.Name = "StartBtn" 150 | Me.StartBtn.Size = New System.Drawing.Size(430, 37) 151 | Me.StartBtn.TabIndex = 15 152 | Me.StartBtn.Text = "Start" 153 | Me.StartBtn.UseVisualStyleBackColor = True 154 | ' 155 | 'Label4 156 | ' 157 | Me.Label4.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) 158 | Me.Label4.AutoSize = True 159 | Me.Label4.Location = New System.Drawing.Point(6, 355) 160 | Me.Label4.Name = "Label4" 161 | Me.Label4.Size = New System.Drawing.Size(51, 13) 162 | Me.Label4.TabIndex = 9 163 | Me.Label4.Text = "Progress:" 164 | ' 165 | 'ProgressBar1 166 | ' 167 | Me.ProgressBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ 168 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 169 | Me.ProgressBar1.Location = New System.Drawing.Point(9, 371) 170 | Me.ProgressBar1.Name = "ProgressBar1" 171 | Me.ProgressBar1.Size = New System.Drawing.Size(427, 23) 172 | Me.ProgressBar1.Step = 1 173 | Me.ProgressBar1.TabIndex = 10 174 | ' 175 | 'Label5 176 | ' 177 | Me.Label5.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) 178 | Me.Label5.AutoSize = True 179 | Me.Label5.Location = New System.Drawing.Point(6, 446) 180 | Me.Label5.Name = "Label5" 181 | Me.Label5.Size = New System.Drawing.Size(119, 13) 182 | Me.Label5.TabIndex = 11 183 | Me.Label5.Text = "GUI by Moises Cardona" 184 | ' 185 | 'Label6 186 | ' 187 | Me.Label6.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 188 | Me.Label6.AutoSize = True 189 | Me.Label6.Location = New System.Drawing.Point(408, 446) 190 | Me.Label6.Name = "Label6" 191 | Me.Label6.Size = New System.Drawing.Size(34, 13) 192 | Me.Label6.TabIndex = 12 193 | Me.Label6.Text = "v1.17" 194 | ' 195 | 'GroupBox1 196 | ' 197 | Me.GroupBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ 198 | Or System.Windows.Forms.AnchorStyles.Left) _ 199 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 200 | Me.GroupBox1.Controls.Add(Me.RunRav1eInWSL) 201 | Me.GroupBox1.Controls.Add(Me.videoBitrate) 202 | Me.GroupBox1.Controls.Add(Me.UseTilingCheckbox) 203 | Me.GroupBox1.Controls.Add(Me.twoPass) 204 | Me.GroupBox1.Controls.Add(Me.Label16) 205 | Me.GroupBox1.Controls.Add(Me.ShowPSNRMetrics) 206 | Me.GroupBox1.Controls.Add(Me.CPUThreads) 207 | Me.GroupBox1.Controls.Add(Me.Label15) 208 | Me.GroupBox1.Controls.Add(Me.useBitrate) 209 | Me.GroupBox1.Controls.Add(Me.AdvancedEncoderOptionsButton) 210 | Me.GroupBox1.Controls.Add(Me.useQuantizer) 211 | Me.GroupBox1.Controls.Add(Me.Label13) 212 | Me.GroupBox1.Controls.Add(Me.quantizer) 213 | Me.GroupBox1.Controls.Add(Me.LowLatencyCheckbox) 214 | Me.GroupBox1.Controls.Add(Me.MaxKeyFrameInterval) 215 | Me.GroupBox1.Controls.Add(Me.Label12) 216 | Me.GroupBox1.Controls.Add(Me.MinKeyFrameInterval) 217 | Me.GroupBox1.Controls.Add(Me.Label10) 218 | Me.GroupBox1.Controls.Add(Me.pieceSeconds) 219 | Me.GroupBox1.Controls.Add(Me.Label11) 220 | Me.GroupBox1.Controls.Add(Me.audioBitrate) 221 | Me.GroupBox1.Controls.Add(Me.Label9) 222 | Me.GroupBox1.Controls.Add(Me.speed) 223 | Me.GroupBox1.Controls.Add(Me.Label7) 224 | Me.GroupBox1.Location = New System.Drawing.Point(6, 156) 225 | Me.GroupBox1.Name = "GroupBox1" 226 | Me.GroupBox1.Size = New System.Drawing.Size(430, 148) 227 | Me.GroupBox1.TabIndex = 15 228 | Me.GroupBox1.TabStop = False 229 | Me.GroupBox1.Text = "Encoder Options" 230 | ' 231 | 'RunRav1eInWSL 232 | ' 233 | Me.RunRav1eInWSL.AutoSize = True 234 | Me.RunRav1eInWSL.Location = New System.Drawing.Point(167, 119) 235 | Me.RunRav1eInWSL.Name = "RunRav1eInWSL" 236 | Me.RunRav1eInWSL.Size = New System.Drawing.Size(114, 17) 237 | Me.RunRav1eInWSL.TabIndex = 18 238 | Me.RunRav1eInWSL.Text = "Run rav1e in WSL" 239 | Me.RunRav1eInWSL.UseVisualStyleBackColor = True 240 | ' 241 | 'videoBitrate 242 | ' 243 | Me.videoBitrate.Location = New System.Drawing.Point(65, 84) 244 | Me.videoBitrate.Maximum = New Decimal(New Integer() {999999, 0, 0, 0}) 245 | Me.videoBitrate.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) 246 | Me.videoBitrate.Name = "videoBitrate" 247 | Me.videoBitrate.Size = New System.Drawing.Size(68, 20) 248 | Me.videoBitrate.TabIndex = 37 249 | Me.videoBitrate.Value = New Decimal(New Integer() {10000, 0, 0, 0}) 250 | ' 251 | 'UseTilingCheckbox 252 | ' 253 | Me.UseTilingCheckbox.AutoSize = True 254 | Me.UseTilingCheckbox.Location = New System.Drawing.Point(174, 61) 255 | Me.UseTilingCheckbox.Name = "UseTilingCheckbox" 256 | Me.UseTilingCheckbox.Size = New System.Drawing.Size(70, 17) 257 | Me.UseTilingCheckbox.TabIndex = 36 258 | Me.UseTilingCheckbox.Text = "Use Tiles" 259 | Me.UseTilingCheckbox.UseVisualStyleBackColor = True 260 | ' 261 | 'twoPass 262 | ' 263 | Me.twoPass.AutoSize = True 264 | Me.twoPass.Location = New System.Drawing.Point(250, 60) 265 | Me.twoPass.Name = "twoPass" 266 | Me.twoPass.Size = New System.Drawing.Size(58, 17) 267 | Me.twoPass.TabIndex = 35 268 | Me.twoPass.Text = "2-Pass" 269 | Me.twoPass.UseVisualStyleBackColor = True 270 | ' 271 | 'Label16 272 | ' 273 | Me.Label16.AutoSize = True 274 | Me.Label16.Location = New System.Drawing.Point(133, 90) 275 | Me.Label16.Name = "Label16" 276 | Me.Label16.Size = New System.Drawing.Size(30, 13) 277 | Me.Label16.TabIndex = 8 278 | Me.Label16.Text = "kbps" 279 | ' 280 | 'ShowPSNRMetrics 281 | ' 282 | Me.ShowPSNRMetrics.AutoSize = True 283 | Me.ShowPSNRMetrics.Checked = True 284 | Me.ShowPSNRMetrics.CheckState = System.Windows.Forms.CheckState.Checked 285 | Me.ShowPSNRMetrics.Location = New System.Drawing.Point(11, 119) 286 | Me.ShowPSNRMetrics.Name = "ShowPSNRMetrics" 287 | Me.ShowPSNRMetrics.Size = New System.Drawing.Size(150, 17) 288 | Me.ShowPSNRMetrics.TabIndex = 32 289 | Me.ShowPSNRMetrics.Text = "Show PSNR metrics in log" 290 | Me.ShowPSNRMetrics.UseVisualStyleBackColor = True 291 | ' 292 | 'CPUThreads 293 | ' 294 | Me.CPUThreads.Location = New System.Drawing.Point(216, 32) 295 | Me.CPUThreads.Maximum = New Decimal(New Integer() {100000, 0, 0, 0}) 296 | Me.CPUThreads.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) 297 | Me.CPUThreads.Name = "CPUThreads" 298 | Me.CPUThreads.Size = New System.Drawing.Size(47, 20) 299 | Me.CPUThreads.TabIndex = 34 300 | Me.CPUThreads.Value = New Decimal(New Integer() {1, 0, 0, 0}) 301 | ' 302 | 'Label15 303 | ' 304 | Me.Label15.AutoSize = True 305 | Me.Label15.Location = New System.Drawing.Point(210, 16) 306 | Me.Label15.Name = "Label15" 307 | Me.Label15.Size = New System.Drawing.Size(49, 13) 308 | Me.Label15.TabIndex = 33 309 | Me.Label15.Text = "Threads:" 310 | ' 311 | 'useBitrate 312 | ' 313 | Me.useBitrate.AutoSize = True 314 | Me.useBitrate.Location = New System.Drawing.Point(9, 88) 315 | Me.useBitrate.Name = "useBitrate" 316 | Me.useBitrate.Size = New System.Drawing.Size(55, 17) 317 | Me.useBitrate.TabIndex = 6 318 | Me.useBitrate.TabStop = True 319 | Me.useBitrate.Text = "Bitrate" 320 | Me.useBitrate.UseVisualStyleBackColor = True 321 | ' 322 | 'AdvancedEncoderOptionsButton 323 | ' 324 | Me.AdvancedEncoderOptionsButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 325 | Me.AdvancedEncoderOptionsButton.Location = New System.Drawing.Point(308, 119) 326 | Me.AdvancedEncoderOptionsButton.Name = "AdvancedEncoderOptionsButton" 327 | Me.AdvancedEncoderOptionsButton.Size = New System.Drawing.Size(113, 23) 328 | Me.AdvancedEncoderOptionsButton.TabIndex = 31 329 | Me.AdvancedEncoderOptionsButton.Text = "Advanced Options" 330 | Me.AdvancedEncoderOptionsButton.UseVisualStyleBackColor = True 331 | ' 332 | 'useQuantizer 333 | ' 334 | Me.useQuantizer.AutoSize = True 335 | Me.useQuantizer.Location = New System.Drawing.Point(9, 64) 336 | Me.useQuantizer.Name = "useQuantizer" 337 | Me.useQuantizer.Size = New System.Drawing.Size(70, 17) 338 | Me.useQuantizer.TabIndex = 0 339 | Me.useQuantizer.TabStop = True 340 | Me.useQuantizer.Text = "Quantizer" 341 | Me.useQuantizer.UseVisualStyleBackColor = True 342 | ' 343 | 'Label13 344 | ' 345 | Me.Label13.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 346 | Me.Label13.AutoSize = True 347 | Me.Label13.Location = New System.Drawing.Point(331, 21) 348 | Me.Label13.Name = "Label13" 349 | Me.Label13.Size = New System.Drawing.Size(95, 13) 350 | Me.Label13.TabIndex = 30 351 | Me.Label13.Text = "keyframe intervals:" 352 | ' 353 | 'quantizer 354 | ' 355 | Me.quantizer.Location = New System.Drawing.Point(83, 61) 356 | Me.quantizer.Maximum = New Decimal(New Integer() {255, 0, 0, 0}) 357 | Me.quantizer.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) 358 | Me.quantizer.Name = "quantizer" 359 | Me.quantizer.Size = New System.Drawing.Size(50, 20) 360 | Me.quantizer.TabIndex = 5 361 | Me.quantizer.Value = New Decimal(New Integer() {100, 0, 0, 0}) 362 | ' 363 | 'LowLatencyCheckbox 364 | ' 365 | Me.LowLatencyCheckbox.AutoSize = True 366 | Me.LowLatencyCheckbox.Location = New System.Drawing.Point(174, 84) 367 | Me.LowLatencyCheckbox.Name = "LowLatencyCheckbox" 368 | Me.LowLatencyCheckbox.Size = New System.Drawing.Size(87, 17) 369 | Me.LowLatencyCheckbox.TabIndex = 9 370 | Me.LowLatencyCheckbox.Text = "Low Latency" 371 | Me.LowLatencyCheckbox.UseVisualStyleBackColor = True 372 | ' 373 | 'MaxKeyFrameInterval 374 | ' 375 | Me.MaxKeyFrameInterval.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 376 | Me.MaxKeyFrameInterval.Location = New System.Drawing.Point(363, 67) 377 | Me.MaxKeyFrameInterval.Maximum = New Decimal(New Integer() {100000, 0, 0, 0}) 378 | Me.MaxKeyFrameInterval.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) 379 | Me.MaxKeyFrameInterval.Name = "MaxKeyFrameInterval" 380 | Me.MaxKeyFrameInterval.Size = New System.Drawing.Size(58, 20) 381 | Me.MaxKeyFrameInterval.TabIndex = 11 382 | Me.MaxKeyFrameInterval.Value = New Decimal(New Integer() {240, 0, 0, 0}) 383 | ' 384 | 'Label12 385 | ' 386 | Me.Label12.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 387 | Me.Label12.AutoSize = True 388 | Me.Label12.Location = New System.Drawing.Point(331, 74) 389 | Me.Label12.Name = "Label12" 390 | Me.Label12.Size = New System.Drawing.Size(29, 13) 391 | Me.Label12.TabIndex = 29 392 | Me.Label12.Text = "max:" 393 | ' 394 | 'MinKeyFrameInterval 395 | ' 396 | Me.MinKeyFrameInterval.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 397 | Me.MinKeyFrameInterval.Location = New System.Drawing.Point(363, 37) 398 | Me.MinKeyFrameInterval.Maximum = New Decimal(New Integer() {100000, 0, 0, 0}) 399 | Me.MinKeyFrameInterval.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) 400 | Me.MinKeyFrameInterval.Name = "MinKeyFrameInterval" 401 | Me.MinKeyFrameInterval.Size = New System.Drawing.Size(58, 20) 402 | Me.MinKeyFrameInterval.TabIndex = 10 403 | Me.MinKeyFrameInterval.Value = New Decimal(New Integer() {12, 0, 0, 0}) 404 | ' 405 | 'Label10 406 | ' 407 | Me.Label10.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 408 | Me.Label10.AutoSize = True 409 | Me.Label10.Location = New System.Drawing.Point(331, 44) 410 | Me.Label10.Name = "Label10" 411 | Me.Label10.Size = New System.Drawing.Size(26, 13) 412 | Me.Label10.TabIndex = 27 413 | Me.Label10.Text = "min:" 414 | ' 415 | 'pieceSeconds 416 | ' 417 | Me.pieceSeconds.Location = New System.Drawing.Point(136, 32) 418 | Me.pieceSeconds.Maximum = New Decimal(New Integer() {100000, 0, 0, 0}) 419 | Me.pieceSeconds.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) 420 | Me.pieceSeconds.Name = "pieceSeconds" 421 | Me.pieceSeconds.Size = New System.Drawing.Size(76, 20) 422 | Me.pieceSeconds.TabIndex = 8 423 | Me.pieceSeconds.Value = New Decimal(New Integer() {1, 0, 0, 0}) 424 | ' 425 | 'Label11 426 | ' 427 | Me.Label11.AutoSize = True 428 | Me.Label11.Location = New System.Drawing.Point(133, 16) 429 | Me.Label11.Name = "Label11" 430 | Me.Label11.Size = New System.Drawing.Size(71, 13) 431 | Me.Label11.TabIndex = 23 432 | Me.Label11.Text = "part seconds:" 433 | ' 434 | 'audioBitrate 435 | ' 436 | Me.audioBitrate.Location = New System.Drawing.Point(65, 32) 437 | Me.audioBitrate.Maximum = New Decimal(New Integer() {320, 0, 0, 0}) 438 | Me.audioBitrate.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) 439 | Me.audioBitrate.Name = "audioBitrate" 440 | Me.audioBitrate.Size = New System.Drawing.Size(65, 20) 441 | Me.audioBitrate.TabIndex = 7 442 | Me.audioBitrate.Value = New Decimal(New Integer() {64, 0, 0, 0}) 443 | ' 444 | 'Label9 445 | ' 446 | Me.Label9.AutoSize = True 447 | Me.Label9.Location = New System.Drawing.Point(62, 16) 448 | Me.Label9.Name = "Label9" 449 | Me.Label9.Size = New System.Drawing.Size(68, 13) 450 | Me.Label9.TabIndex = 18 451 | Me.Label9.Text = "audio bitrate:" 452 | ' 453 | 'speed 454 | ' 455 | Me.speed.Location = New System.Drawing.Point(9, 32) 456 | Me.speed.Maximum = New Decimal(New Integer() {10, 0, 0, 0}) 457 | Me.speed.Name = "speed" 458 | Me.speed.Size = New System.Drawing.Size(50, 20) 459 | Me.speed.TabIndex = 6 460 | Me.speed.Value = New Decimal(New Integer() {3, 0, 0, 0}) 461 | ' 462 | 'Label7 463 | ' 464 | Me.Label7.AutoSize = True 465 | Me.Label7.Location = New System.Drawing.Point(6, 16) 466 | Me.Label7.Name = "Label7" 467 | Me.Label7.Size = New System.Drawing.Size(39, 13) 468 | Me.Label7.TabIndex = 2 469 | Me.Label7.Text = "speed:" 470 | ' 471 | 'RemoveTempFiles 472 | ' 473 | Me.RemoveTempFiles.AutoSize = True 474 | Me.RemoveTempFiles.Checked = True 475 | Me.RemoveTempFiles.CheckState = System.Windows.Forms.CheckState.Checked 476 | Me.RemoveTempFiles.Location = New System.Drawing.Point(6, 135) 477 | Me.RemoveTempFiles.Name = "RemoveTempFiles" 478 | Me.RemoveTempFiles.Size = New System.Drawing.Size(143, 17) 479 | Me.RemoveTempFiles.TabIndex = 14 480 | Me.RemoveTempFiles.Text = "Remove Temporary Files" 481 | Me.RemoveTempFiles.UseVisualStyleBackColor = True 482 | ' 483 | 'BrowseTempLocation 484 | ' 485 | Me.BrowseTempLocation.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 486 | Me.BrowseTempLocation.Location = New System.Drawing.Point(361, 106) 487 | Me.BrowseTempLocation.Name = "BrowseTempLocation" 488 | Me.BrowseTempLocation.Size = New System.Drawing.Size(75, 23) 489 | Me.BrowseTempLocation.TabIndex = 13 490 | Me.BrowseTempLocation.Text = "Browse" 491 | Me.BrowseTempLocation.UseVisualStyleBackColor = True 492 | ' 493 | 'Label8 494 | ' 495 | Me.Label8.AutoSize = True 496 | Me.Label8.Location = New System.Drawing.Point(3, 93) 497 | Me.Label8.Name = "Label8" 498 | Me.Label8.Size = New System.Drawing.Size(123, 13) 499 | Me.Label8.TabIndex = 4 500 | Me.Label8.Text = "Temporary File Location:" 501 | ' 502 | 'tempLocationPath 503 | ' 504 | Me.tempLocationPath.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ 505 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 506 | Me.tempLocationPath.Location = New System.Drawing.Point(6, 109) 507 | Me.tempLocationPath.Name = "tempLocationPath" 508 | Me.tempLocationPath.Size = New System.Drawing.Size(349, 20) 509 | Me.tempLocationPath.TabIndex = 12 510 | ' 511 | 'rav1eVersionLabel 512 | ' 513 | Me.rav1eVersionLabel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) 514 | Me.rav1eVersionLabel.AutoSize = True 515 | Me.rav1eVersionLabel.Location = New System.Drawing.Point(6, 414) 516 | Me.rav1eVersionLabel.Name = "rav1eVersionLabel" 517 | Me.rav1eVersionLabel.Size = New System.Drawing.Size(74, 13) 518 | Me.rav1eVersionLabel.TabIndex = 16 519 | Me.rav1eVersionLabel.Text = "rav1e version:" 520 | ' 521 | 'Label14 522 | ' 523 | Me.Label14.AutoSize = True 524 | Me.Label14.Location = New System.Drawing.Point(3, 9) 525 | Me.Label14.Name = "Label14" 526 | Me.Label14.Size = New System.Drawing.Size(28, 13) 527 | Me.Label14.TabIndex = 17 528 | Me.Label14.Text = "Log:" 529 | ' 530 | 'ProgressLog 531 | ' 532 | Me.ProgressLog.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ 533 | Or System.Windows.Forms.AnchorStyles.Left) _ 534 | Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 535 | Me.ProgressLog.BackColor = System.Drawing.SystemColors.Window 536 | Me.ProgressLog.Location = New System.Drawing.Point(6, 26) 537 | Me.ProgressLog.Name = "ProgressLog" 538 | Me.ProgressLog.ReadOnly = True 539 | Me.ProgressLog.Size = New System.Drawing.Size(579, 409) 540 | Me.ProgressLog.TabIndex = 18 541 | Me.ProgressLog.Text = "" 542 | ' 543 | 'SplitContainer1 544 | ' 545 | Me.SplitContainer1.Dock = System.Windows.Forms.DockStyle.Fill 546 | Me.SplitContainer1.ImeMode = System.Windows.Forms.ImeMode.NoControl 547 | Me.SplitContainer1.Location = New System.Drawing.Point(0, 0) 548 | Me.SplitContainer1.Name = "SplitContainer1" 549 | ' 550 | 'SplitContainer1.Panel1 551 | ' 552 | Me.SplitContainer1.Panel1.Controls.Add(Me.ffmpegVersionLabel) 553 | Me.SplitContainer1.Panel1.Controls.Add(Me.rav1eVersionLabel) 554 | Me.SplitContainer1.Panel1.Controls.Add(Me.Label1) 555 | Me.SplitContainer1.Panel1.Controls.Add(Me.GroupBox1) 556 | Me.SplitContainer1.Panel1.Controls.Add(Me.Label2) 557 | Me.SplitContainer1.Panel1.Controls.Add(Me.InputTxt) 558 | Me.SplitContainer1.Panel1.Controls.Add(Me.Label6) 559 | Me.SplitContainer1.Panel1.Controls.Add(Me.OutputTxt) 560 | Me.SplitContainer1.Panel1.Controls.Add(Me.Label5) 561 | Me.SplitContainer1.Panel1.Controls.Add(Me.InputBrowseBtn) 562 | Me.SplitContainer1.Panel1.Controls.Add(Me.ProgressBar1) 563 | Me.SplitContainer1.Panel1.Controls.Add(Me.RemoveTempFiles) 564 | Me.SplitContainer1.Panel1.Controls.Add(Me.OutputBrowseBtn) 565 | Me.SplitContainer1.Panel1.Controls.Add(Me.Label4) 566 | Me.SplitContainer1.Panel1.Controls.Add(Me.StartBtn) 567 | Me.SplitContainer1.Panel1.Controls.Add(Me.Label8) 568 | Me.SplitContainer1.Panel1.Controls.Add(Me.BrowseTempLocation) 569 | Me.SplitContainer1.Panel1.Controls.Add(Me.tempLocationPath) 570 | ' 571 | 'SplitContainer1.Panel2 572 | ' 573 | Me.SplitContainer1.Panel2.Controls.Add(Me.PauseResumeButton) 574 | Me.SplitContainer1.Panel2.Controls.Add(Me.ClearLogBtn) 575 | Me.SplitContainer1.Panel2.Controls.Add(Me.SaveLogBtn) 576 | Me.SplitContainer1.Panel2.Controls.Add(Me.ProgressLog) 577 | Me.SplitContainer1.Panel2.Controls.Add(Me.Label14) 578 | Me.SplitContainer1.Size = New System.Drawing.Size(1049, 473) 579 | Me.SplitContainer1.SplitterDistance = 448 580 | Me.SplitContainer1.TabIndex = 19 581 | ' 582 | 'ffmpegVersionLabel 583 | ' 584 | Me.ffmpegVersionLabel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) 585 | Me.ffmpegVersionLabel.AutoSize = True 586 | Me.ffmpegVersionLabel.Location = New System.Drawing.Point(6, 427) 587 | Me.ffmpegVersionLabel.Name = "ffmpegVersionLabel" 588 | Me.ffmpegVersionLabel.Size = New System.Drawing.Size(79, 13) 589 | Me.ffmpegVersionLabel.TabIndex = 17 590 | Me.ffmpegVersionLabel.Text = "ffmpeg version:" 591 | ' 592 | 'PauseResumeButton 593 | ' 594 | Me.PauseResumeButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 595 | Me.PauseResumeButton.Enabled = False 596 | Me.PauseResumeButton.Location = New System.Drawing.Point(6, 441) 597 | Me.PauseResumeButton.Name = "PauseResumeButton" 598 | Me.PauseResumeButton.Size = New System.Drawing.Size(163, 23) 599 | Me.PauseResumeButton.TabIndex = 21 600 | Me.PauseResumeButton.Text = "Pause" 601 | Me.PauseResumeButton.UseVisualStyleBackColor = True 602 | ' 603 | 'ClearLogBtn 604 | ' 605 | Me.ClearLogBtn.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 606 | Me.ClearLogBtn.Location = New System.Drawing.Point(175, 441) 607 | Me.ClearLogBtn.Name = "ClearLogBtn" 608 | Me.ClearLogBtn.Size = New System.Drawing.Size(202, 23) 609 | Me.ClearLogBtn.TabIndex = 20 610 | Me.ClearLogBtn.Text = "Clear Log" 611 | Me.ClearLogBtn.UseVisualStyleBackColor = True 612 | ' 613 | 'SaveLogBtn 614 | ' 615 | Me.SaveLogBtn.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 616 | Me.SaveLogBtn.Location = New System.Drawing.Point(383, 441) 617 | Me.SaveLogBtn.Name = "SaveLogBtn" 618 | Me.SaveLogBtn.Size = New System.Drawing.Size(202, 23) 619 | Me.SaveLogBtn.TabIndex = 19 620 | Me.SaveLogBtn.Text = "Save Log" 621 | Me.SaveLogBtn.UseVisualStyleBackColor = True 622 | ' 623 | 'Form1 624 | ' 625 | Me.AllowDrop = True 626 | Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 627 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 628 | Me.ClientSize = New System.Drawing.Size(1049, 473) 629 | Me.Controls.Add(Me.SplitContainer1) 630 | Me.Name = "Form1" 631 | Me.Text = "rav1e GUI" 632 | Me.GroupBox1.ResumeLayout(False) 633 | Me.GroupBox1.PerformLayout() 634 | CType(Me.videoBitrate, System.ComponentModel.ISupportInitialize).EndInit() 635 | CType(Me.CPUThreads, System.ComponentModel.ISupportInitialize).EndInit() 636 | CType(Me.quantizer, System.ComponentModel.ISupportInitialize).EndInit() 637 | CType(Me.MaxKeyFrameInterval, System.ComponentModel.ISupportInitialize).EndInit() 638 | CType(Me.MinKeyFrameInterval, System.ComponentModel.ISupportInitialize).EndInit() 639 | CType(Me.pieceSeconds, System.ComponentModel.ISupportInitialize).EndInit() 640 | CType(Me.audioBitrate, System.ComponentModel.ISupportInitialize).EndInit() 641 | CType(Me.speed, System.ComponentModel.ISupportInitialize).EndInit() 642 | Me.SplitContainer1.Panel1.ResumeLayout(False) 643 | Me.SplitContainer1.Panel1.PerformLayout() 644 | Me.SplitContainer1.Panel2.ResumeLayout(False) 645 | Me.SplitContainer1.Panel2.PerformLayout() 646 | CType(Me.SplitContainer1, System.ComponentModel.ISupportInitialize).EndInit() 647 | Me.SplitContainer1.ResumeLayout(False) 648 | Me.ResumeLayout(False) 649 | 650 | End Sub 651 | 652 | Friend WithEvents Label1 As Label 653 | Friend WithEvents Label2 As Label 654 | Friend WithEvents InputTxt As TextBox 655 | Friend WithEvents OutputTxt As TextBox 656 | Friend WithEvents InputBrowseBtn As Button 657 | Friend WithEvents OutputBrowseBtn As Button 658 | Friend WithEvents StartBtn As Button 659 | Friend WithEvents Label4 As Label 660 | Friend WithEvents ProgressBar1 As ProgressBar 661 | Friend WithEvents Label5 As Label 662 | Friend WithEvents Label6 As Label 663 | Friend WithEvents GroupBox1 As GroupBox 664 | Friend WithEvents BrowseTempLocation As Button 665 | Friend WithEvents Label8 As Label 666 | Friend WithEvents tempLocationPath As TextBox 667 | Friend WithEvents speed As NumericUpDown 668 | Friend WithEvents Label7 As Label 669 | Friend WithEvents rav1eVersionLabel As Label 670 | Friend WithEvents audioBitrate As NumericUpDown 671 | Friend WithEvents Label9 As Label 672 | Friend WithEvents LowLatencyCheckbox As CheckBox 673 | Friend WithEvents RemoveTempFiles As CheckBox 674 | Friend WithEvents pieceSeconds As NumericUpDown 675 | Friend WithEvents Label11 As Label 676 | Friend WithEvents Label13 As Label 677 | Friend WithEvents MaxKeyFrameInterval As NumericUpDown 678 | Friend WithEvents Label12 As Label 679 | Friend WithEvents MinKeyFrameInterval As NumericUpDown 680 | Friend WithEvents Label10 As Label 681 | Friend WithEvents Label14 As Label 682 | Friend WithEvents ProgressLog As RichTextBox 683 | Friend WithEvents SplitContainer1 As SplitContainer 684 | Friend WithEvents AdvancedEncoderOptionsButton As Button 685 | Friend WithEvents ShowPSNRMetrics As CheckBox 686 | Friend WithEvents CPUThreads As NumericUpDown 687 | Friend WithEvents Label15 As Label 688 | Friend WithEvents ClearLogBtn As Button 689 | Friend WithEvents SaveLogBtn As Button 690 | Friend WithEvents PauseResumeButton As Button 691 | Friend WithEvents quantizer As NumericUpDown 692 | Friend WithEvents Label16 As Label 693 | Friend WithEvents useBitrate As RadioButton 694 | Friend WithEvents useQuantizer As RadioButton 695 | Friend WithEvents twoPass As CheckBox 696 | Friend WithEvents ffmpegVersionLabel As Label 697 | Friend WithEvents UseTilingCheckbox As CheckBox 698 | Friend WithEvents videoBitrate As NumericUpDown 699 | Friend WithEvents RunRav1eInWSL As CheckBox 700 | End Class 701 | -------------------------------------------------------------------------------- /rav1e_gui/Form1.vb: -------------------------------------------------------------------------------- 1 | Imports System.Text.RegularExpressions 2 | Imports System.Threading 3 | 4 | Public Class Form1 5 | Private Exiting As Boolean = False 6 | Private GUILoaded As Boolean = False 7 | Private CurrentDirectory = IO.Path.GetDirectoryName(Process.GetCurrentProcess.MainModule.FileName) 8 | Private Const PipeBuffer As Integer = 1024 * 1024 * 1024 9 | Private ExtensionsAndFilesList As String() = {".txt", ".opus", "video-part", "InputVideo", ".ivf", "lock"} 10 | Private Sub InputBrowseBtn_Click(sender As Object, e As EventArgs) Handles InputBrowseBtn.Click 11 | Dim InputBrowser As New OpenFileDialog With { 12 | .Title = "Browse for a video file", 13 | .FileName = IO.Path.GetFileName(InputTxt.Text), 14 | .Filter = "All Files|*.*" 15 | } 16 | If Not String.IsNullOrEmpty(InputTxt.Text) Then InputBrowser.InitialDirectory = IO.Path.GetDirectoryName(InputTxt.Text) 17 | Dim OkAction As MsgBoxResult = InputBrowser.ShowDialog 18 | If OkAction = MsgBoxResult.Ok Then 19 | InputTxt.Text = InputBrowser.FileName 20 | OutputTxt.Text = IO.Path.ChangeExtension(InputBrowser.FileName, ".webm") 21 | End If 22 | End Sub 23 | 24 | Private Sub OutputBrowseBtn_Click(sender As Object, e As EventArgs) Handles OutputBrowseBtn.Click 25 | Dim OutputBrowser As New SaveFileDialog With { 26 | .Title = "Save Video File", 27 | .FileName = IO.Path.GetFileName(OutputTxt.Text), 28 | .Filter = "WebM|*.webm|Matroska|*.mkv" 29 | } 30 | If Not String.IsNullOrEmpty(OutputTxt.Text) Then OutputBrowser.InitialDirectory = IO.Path.GetDirectoryName(OutputTxt.Text) 31 | Dim OkAction As MsgBoxResult = OutputBrowser.ShowDialog 32 | If OkAction = MsgBoxResult.Ok Then 33 | OutputTxt.Text = OutputBrowser.FileName 34 | End If 35 | End Sub 36 | Private Sub CheckForLockFile() 37 | If Not String.IsNullOrWhiteSpace(tempLocationPath.Text) Then 38 | Dim videoFound As Boolean = False 39 | Dim opusFound As Boolean = False 40 | Dim CheckTempFolder As String() = IO.Directory.GetFiles(tempLocationPath.Text) 41 | If CheckTempFolder.Count > 0 Then 42 | If CheckTempFolder.Contains(tempLocationPath.Text + "\lock") And CheckTempFolder.Contains(tempLocationPath.Text + "\rav1e-concatenate-list.txt") Then 43 | For Each item In CheckTempFolder 44 | If item.Contains("InputVideo") Then 45 | If Not videoFound Then videoFound = True 46 | ElseIf item.Contains(".opus") Then 47 | If Not opusFound Then opusFound = True 48 | End If 49 | Next 50 | End If 51 | End If 52 | If videoFound And opusFound Then 53 | Dim result As DialogResult = MsgBox("The temporary folder contains temporary files from a previous session. Do you want to continue the previous encoding session?", MsgBoxStyle.YesNo) 54 | If result = DialogResult.Yes Then 55 | OutputTxt.Text = IO.File.ReadAllText(tempLocationPath.Text + "\lock").TrimEnd 56 | ResumePreviousEncodeSession() 57 | Else 58 | Dim result2 As DialogResult = MsgBox("Do you want to clean the folder?", MsgBoxStyle.YesNo) 59 | If result2 = DialogResult.Yes Then 60 | clean_temp_folder(tempLocationPath.Text) 61 | End If 62 | End If 63 | End If 64 | End If 65 | End Sub 66 | Private Sub DisableElements() 67 | StartBtn.Enabled = False 68 | InputTxt.Enabled = False 69 | OutputTxt.Enabled = False 70 | InputBrowseBtn.Enabled = False 71 | OutputBrowseBtn.Enabled = False 72 | pieceSeconds.Enabled = False 73 | audioBitrate.Enabled = False 74 | quantizer.Enabled = False 75 | speed.Enabled = False 76 | MinKeyFrameInterval.Enabled = False 77 | MaxKeyFrameInterval.Enabled = False 78 | LowLatencyCheckbox.Enabled = False 79 | tempLocationPath.Enabled = False 80 | BrowseTempLocation.Enabled = False 81 | AdvancedEncoderOptionsButton.Enabled = False 82 | ShowPSNRMetrics.Enabled = False 83 | RunRav1eInWSL.Enabled = False 84 | CPUThreads.Enabled = False 85 | SaveLogBtn.Enabled = False 86 | PauseResumeButton.Enabled = True 87 | twoPass.Enabled = False 88 | useQuantizer.Enabled = False 89 | useBitrate.Enabled = False 90 | UseTilingCheckbox.Enabled = False 91 | videoBitrate.Enabled = False 92 | End Sub 93 | Private Sub ResumePreviousEncodeSession() 94 | DisableElements() 95 | Dim StartTasks As New Thread(Sub() Part2(True)) 96 | StartTasks.Start() 97 | End Sub 98 | Private Sub StartBtn_Click(sender As Object, e As EventArgs) Handles StartBtn.Click 99 | If MinKeyFrameInterval.Value > MaxKeyFrameInterval.Value Then 100 | MsgBox("Minimum Keyframe Interval must be smaller than or equal to the Maximum Keyframe Interval") 101 | ElseIf String.IsNullOrWhiteSpace(InputTxt.Text) Then 102 | MsgBox("No input file has been specified. Please enter or browse for an input video file") 103 | ElseIf String.IsNullOrWhiteSpace(OutputTxt.Text) Then 104 | MsgBox("No output file has been specified. Please enter or browse for an output video file") 105 | ElseIf String.IsNullOrWhiteSpace(tempLocationPath.Text) Then 106 | MsgBox("Temporary folder has not been specified. Please enter or browse for a temporary path") 107 | Else 108 | Dim CheckTempFolder As String() = IO.Directory.GetFiles(tempLocationPath.Text) 109 | If CheckTempFolder.Count > 0 Then 110 | For Each item In CheckTempFolder 111 | If item.Contains(".ivf") Or item.Contains(".txt") Or item.Contains(".y4m") Or item.Contains(".opus") Then 112 | Dim result As DialogResult = MsgBox("The temporary folder contains temporary files. It is recommended that the folder is cleaned up for best results. Otherwise, you could get an incorrect AV1 file. Do you want to clean the folder?", MsgBoxStyle.YesNo) 113 | If result = DialogResult.Yes Then 114 | clean_temp_folder(tempLocationPath.Text) 115 | End If 116 | Exit For 117 | End If 118 | Next 119 | End If 120 | DisableElements() 121 | If Not IO.Path.GetExtension(OutputTxt.Text) = ".webm" And Not IO.Path.GetExtension(OutputTxt.Text) = ".mkv" Then 122 | OutputTxt.Text = IO.Path.ChangeExtension(OutputTxt.Text, ".webm") 123 | End If 124 | My.Computer.FileSystem.WriteAllText(tempLocationPath.Text + "\lock", OutputTxt.Text, False) 125 | Dim StartTasks As New Thread(Sub() Part1()) 126 | StartTasks.Start() 127 | End If 128 | End Sub 129 | 130 | Private Sub Part1() 131 | Dim PieceSeconds As Long = 0 132 | If Not UseTilingCheckbox.Checked Then PieceSeconds = My.Settings.pieceSeconds 133 | If split_video_file(InputTxt.Text, tempLocationPath.Text, PieceSeconds) Then 134 | If extract_audio(InputTxt.Text, My.Settings.AudioBitrate, tempLocationPath.Text) Then 135 | Part2() 136 | End If 137 | End If 138 | End Sub 139 | 140 | Private Sub Part2(Optional ResumeTasks As Boolean = False) 141 | Dim ItemsToProcess As List(Of String) = New List(Of String) 142 | If IO.File.Exists(tempLocationPath.Text + "/InputVideo") Then 143 | ItemsToProcess.Add(IO.File.ReadAllText(tempLocationPath.Text + "/InputVideo")) 144 | Else 145 | For Each File As String In IO.Directory.GetFiles(tempLocationPath.Text) 146 | If IO.Path.GetExtension(File) = IO.File.ReadAllText(tempLocationPath.Text + "/InputVideoExt") And File.Contains("video-part-") Then 147 | ItemsToProcess.Add(File) 148 | End If 149 | Next 150 | End If 151 | ItemsToProcess.Sort() 152 | ProgressBar1.BeginInvoke(Sub() 153 | ProgressBar1.Maximum = ItemsToProcess.Count 154 | ProgressBar1.Value = 0 155 | End Sub) 156 | Dim tasks = New List(Of Action) 157 | If Not ResumeTasks Then 158 | Dim streamWriter As New IO.StreamWriter(tempLocationPath.Text + "\rav1e-concatenate-list.txt") 159 | For Counter As Integer = 0 To ItemsToProcess.Count - 1 160 | streamWriter.WriteLine("file '" + tempLocationPath.Text.Replace("\", "/") + "/" + IO.Path.GetFileNameWithoutExtension(ItemsToProcess(Counter)) + ".ivf" + "'") 161 | Dim video_item As String = ItemsToProcess(Counter) 162 | tasks.Add(Function() Run_rav1e(video_item, tempLocationPath.Text + "\" + IO.Path.GetFileNameWithoutExtension(video_item) + ".ivf")) 163 | Next 164 | streamWriter.Close() 165 | Else 166 | For Counter As Integer = 0 To ItemsToProcess.Count - 1 167 | Dim video_item As String = ItemsToProcess(Counter) 168 | tasks.Add(Function() Run_rav1e(video_item, tempLocationPath.Text + "\" + IO.Path.GetFileNameWithoutExtension(video_item) + ".ivf")) 169 | Next 170 | End If 171 | UpdateLog("Encoding Video Segments") 172 | Dim options As New ParallelOptions With {.MaxDegreeOfParallelism = CPUThreads.Value} 173 | Parallel.Invoke(options, tasks.ToArray()) 174 | UpdateLog("Video Segments Encoded") 175 | concatenate_video_files(tempLocationPath.Text + "\rav1e-concatenate-list.txt", tempLocationPath.Text) 176 | merge_audio_video(OutputTxt.Text, tempLocationPath.Text) 177 | If RemoveTempFiles.Checked Then clean_temp_folder(tempLocationPath.Text) Else IO.File.Delete(tempLocationPath.Text + "\lock") 178 | StartBtn.BeginInvoke(Sub() 179 | StartBtn.Enabled = True 180 | audioBitrate.Enabled = True 181 | speed.Enabled = True 182 | MinKeyFrameInterval.Enabled = True 183 | MaxKeyFrameInterval.Enabled = True 184 | LowLatencyCheckbox.Enabled = True 185 | tempLocationPath.Enabled = True 186 | BrowseTempLocation.Enabled = True 187 | OutputTxt.Enabled = True 188 | InputTxt.Enabled = True 189 | InputBrowseBtn.Enabled = True 190 | OutputBrowseBtn.Enabled = True 191 | pieceSeconds.Enabled = Not UseTilingCheckbox.Checked 192 | AdvancedEncoderOptionsButton.Enabled = True 193 | ShowPSNRMetrics.Enabled = True 194 | RunRav1eInWSL.Enabled = True 195 | CPUThreads.Enabled = True 196 | SaveLogBtn.Enabled = True 197 | PauseResumeButton.Enabled = False 198 | useQuantizer.Enabled = True 199 | useBitrate.Enabled = True 200 | UseTilingCheckbox.Enabled = True 201 | If My.Settings.useQuantizer Then 202 | quantizer.Enabled = True 203 | twoPass.Checked = False 204 | twoPass.Enabled = False 205 | End If 206 | If My.Settings.useBitrate Then 207 | videoBitrate.Enabled = True 208 | twoPass.Enabled = True 209 | End If 210 | 211 | End Sub) 212 | MsgBox("Finished") 213 | End Sub 214 | Private Function Run_rav1e(Input_File As String, Output_File As String, Optional SecondPass As Boolean = False) 215 | Dim InputPipe As New IO.Pipes.NamedPipeServerStream(IO.Path.GetFileNameWithoutExtension(Input_File) + ".y4m", IO.Pipes.PipeDirection.Out, -1, IO.Pipes.PipeTransmissionMode.Byte, IO.Pipes.PipeOptions.Asynchronous, PipeBuffer, 0) 216 | UpdateLog("Encoding Video part " + IO.Path.GetFileName(Input_File)) 217 | Dim Original_Input_File As String = Input_File 218 | Dim Original_Output_File As String = Output_File 219 | Using rav1eProcess As New Process() 220 | If RunRav1eInWSL.Checked Then 221 | Input_File = Regex.Replace(Input_File, "((.):\\)", Function(replace_letter) $"/mnt/{replace_letter.Groups(2).Value.ToLower()}/").Replace("\", "/") 222 | Output_File = Regex.Replace(Output_File, "((.):\\)", Function(replace_letter) $"/mnt/{replace_letter.Groups(2).Value.ToLower()}/").Replace("\", "/") 223 | End If 224 | rav1eProcess.StartInfo.FileName = "rav1e.exe" 225 | Dim VideoBitrateString As String = String.Empty 226 | If My.Settings.useBitrate Then 227 | VideoBitrateString = "-b " + My.Settings.VideoBitrate.ToString() 228 | Else 229 | VideoBitrateString = "--quantizer " + My.Settings.quantizer.ToString() 230 | End If 231 | If UseTilingCheckbox.Checked Then 232 | If My.Settings.CPUThreads = 0 Then My.Settings.CPUThreads = Environment.ProcessorCount 233 | VideoBitrateString += " --threads " + My.Settings.CPUThreads.ToString() + " --tile-rows " + My.Settings.TilingRows.ToString() + " --tile-cols " + My.Settings.TilingColumns.ToString() 234 | End If 235 | If My.Settings.twoPass And Not SecondPass Then 236 | UpdateLog("Doing first pass for video part " + IO.Path.GetFileName(Input_File) + "") 237 | rav1eProcess.StartInfo.Arguments = """\\.\pipe\" + IO.Path.GetFileNameWithoutExtension(Input_File) + ".y4m"" --first-pass """ + Output_File + ".first-pass-arg-output"" -o """ + Output_File + ".first-pass.ivf"" " + VideoBitrateString + " -s " + My.Settings.speed.ToString() + " -i " + My.Settings.minKeyInt.ToString() + " -I " + My.Settings.maxKeyInt.ToString() + " --tune " + My.Settings.Tune.ToLower() + " --primaries " + My.Settings.ColorPrimaries.ToLower() + " --content_light " + My.Settings.ContentLight + " --matrix " + My.Settings.MatrixCoefficients.ToLower() + " --range " + My.Settings.Range + " --transfer " + My.Settings.TransferCharacteristics.ToLower() + " -v" 238 | ElseIf My.Settings.twoPass And SecondPass Then 239 | rav1eProcess.StartInfo.Arguments = """\\.\pipe\" + IO.Path.GetFileNameWithoutExtension(Input_File) + ".y4m"" --second-pass """ + Output_File + ".first-pass-arg-output"" -o """ + Output_File + """ " + VideoBitrateString + " -s " + My.Settings.speed.ToString() + " -i " + My.Settings.minKeyInt.ToString() + " -I " + My.Settings.maxKeyInt.ToString() + " --tune " + My.Settings.Tune.ToLower() + " --primaries " + My.Settings.ColorPrimaries.ToLower() + " --content_light " + My.Settings.ContentLight + " --matrix " + My.Settings.MatrixCoefficients.ToLower() + " --range " + My.Settings.Range + " --transfer " + My.Settings.TransferCharacteristics.ToLower() + " -v" 240 | Else 241 | rav1eProcess.StartInfo.Arguments = """\\.\pipe\" + IO.Path.GetFileNameWithoutExtension(Input_File) + ".y4m"" -o """ + Output_File + """ " + VideoBitrateString + " -s " + My.Settings.speed.ToString() + " -i " + My.Settings.minKeyInt.ToString() + " -I " + My.Settings.maxKeyInt.ToString() + " --tune " + My.Settings.Tune.ToLower() + " --primaries " + My.Settings.ColorPrimaries.ToLower() + " --content_light " + My.Settings.ContentLight + " --matrix " + My.Settings.MatrixCoefficients.ToLower() + " --range " + My.Settings.Range + " --transfer " + My.Settings.TransferCharacteristics.ToLower() + " -v" 242 | End If 243 | If My.Settings.lowlat Then 244 | rav1eProcess.StartInfo.Arguments += " --low_latency" 245 | End If 246 | If My.Settings.ShowPSNRMetrics Then 247 | rav1eProcess.StartInfo.Arguments += " --psnr" 248 | End If 249 | If RunRav1eInWSL.Checked Then 250 | rav1eProcess.StartInfo.FileName = ("wsl.exe") 251 | rav1eProcess.StartInfo.Arguments = "-e " + (Regex.Replace(CurrentDirectory, "((.):\\)", Function(replace_letter) $"/mnt/{replace_letter.Groups(2).Value.ToLower()}/") + "/rav1e").Replace("\", "/") + " " + rav1eProcess.StartInfo.Arguments 252 | End If 253 | rav1eProcess.StartInfo.CreateNoWindow = True 254 | rav1eProcess.StartInfo.RedirectStandardOutput = True 255 | rav1eProcess.StartInfo.RedirectStandardError = True 256 | rav1eProcess.StartInfo.RedirectStandardInput = True 257 | rav1eProcess.StartInfo.UseShellExecute = False 258 | AddHandler rav1eProcess.OutputDataReceived, New DataReceivedEventHandler(Sub(sender, e) 259 | If Not e.Data = Nothing Then 260 | UpdateLog(e.Data, IO.Path.GetFileName(Input_File)) 261 | End If 262 | End Sub) 263 | AddHandler rav1eProcess.ErrorDataReceived, New DataReceivedEventHandler(Sub(sender, e) 264 | If Not e.Data = Nothing Then 265 | UpdateLog(e.Data, IO.Path.GetFileName(Input_File)) 266 | End If 267 | End Sub) 268 | rav1eProcess.Start() 269 | rav1eProcess.BeginOutputReadLine() 270 | rav1eProcess.BeginErrorReadLine() 271 | WriteByteAsync(InputPipe, Input_File, SecondPass) 272 | rav1eProcess.WaitForExit() 273 | If My.Settings.twoPass And Not SecondPass Then 274 | UpdateLog("Video part " + IO.Path.GetFileName(Input_File) + " First pass encoding complete.") 275 | Run_rav1e(Original_Input_File, Original_Output_File, True) 276 | Else 277 | UpdateLog("Video part " + IO.Path.GetFileName(Input_File) + " encoding complete.") 278 | If Not Exiting Then 279 | If IO.File.Exists(Original_Output_File + ".first-pass-arg-output") Then IO.File.Delete(Original_Output_File + ".first-pass-arg-output") 280 | If IO.File.Exists(Original_Output_File + ".first-pass.ivf") Then IO.File.Delete(Original_Output_File + ".first-pass.ivf") 281 | If IO.File.Exists(Input_File) Then IO.File.Delete(Input_File) 282 | End If 283 | ProgressBar1.BeginInvoke(Sub() ProgressBar1.PerformStep()) 284 | End If 285 | End Using 286 | Return True 287 | End Function 288 | Private Async Sub WriteByteAsync(InputPipe As IO.Pipes.NamedPipeServerStream, Input As String, SecondPass As Boolean) 289 | Dim OutputPipe As New IO.Pipes.NamedPipeServerStream(IO.Path.GetFileNameWithoutExtension(Input) + "-out.y4m", IO.Pipes.PipeDirection.In, -1, IO.Pipes.PipeTransmissionMode.Byte, IO.Pipes.PipeOptions.WriteThrough, 0, PipeBuffer) 290 | Dim ffmpegProcessInfo As New ProcessStartInfo 291 | Dim ffmpegProcess As Process 292 | ffmpegProcessInfo.FileName = "ffmpeg.exe" 293 | ffmpegProcessInfo.Arguments = "-i """ + Input + """ ""\\.\pipe\" + IO.Path.GetFileNameWithoutExtension(Input) + "-out.y4m"" -y" 294 | ffmpegProcessInfo.CreateNoWindow = True 295 | ffmpegProcessInfo.RedirectStandardInput = True 296 | ffmpegProcessInfo.RedirectStandardOutput = True 297 | ffmpegProcessInfo.UseShellExecute = False 298 | ffmpegProcess = Process.Start(ffmpegProcessInfo) 299 | Dim lastRead As Integer 300 | OutputPipe.WaitForConnection() 301 | InputPipe.WaitForConnection() 302 | Dim buffer As Byte() = New Byte(PipeBuffer) {} 303 | Do 304 | Try 305 | lastRead = OutputPipe.Read(buffer, 0, PipeBuffer) 306 | Await InputPipe.WriteAsync(buffer, 0, lastRead) 307 | Catch 308 | End Try 309 | InputPipe.Flush() 310 | Loop While lastRead > 0 311 | OutputPipe.Dispose() 312 | ffmpegProcess.WaitForExit() 313 | InputPipe.Dispose() 314 | If Not Exiting And (Not My.Settings.twoPass Or (My.Settings.twoPass And SecondPass)) Then 315 | If Not My.Settings.UseTiling Then 316 | IO.File.Delete(Input) 317 | End If 318 | End If 319 | End Sub 320 | Private Function split_video_file(input As String, tempFolder As String, pieceSeconds As Integer) 321 | If pieceSeconds > 0 Then 322 | Dim ffmpegProcessInfo As New ProcessStartInfo 323 | Dim ffmpegProcess As Process 324 | ffmpegProcessInfo.FileName = "ffmpeg.exe" 325 | UpdateLog("Splitting input video file") 326 | IO.File.WriteAllText(tempFolder + "/InputVideoExt", IO.Path.GetExtension(input)) 327 | ffmpegProcessInfo.Arguments = "-i """ + input + """ -c copy -f segment -segment_time " + pieceSeconds.ToString() + " """ + tempFolder + "/video-part-%6d" + IO.Path.GetExtension(input) + """ -y" 328 | ffmpegProcessInfo.CreateNoWindow = True 329 | ffmpegProcessInfo.RedirectStandardOutput = False 330 | ffmpegProcessInfo.UseShellExecute = False 331 | ffmpegProcess = Process.Start(ffmpegProcessInfo) 332 | ffmpegProcess.WaitForExit() 333 | UpdateLog("Video file splitted") 334 | Else 335 | IO.File.WriteAllText(tempFolder + "/InputVideo", input) 336 | End If 337 | Return True 338 | End Function 339 | 340 | Private Function concatenate_video_files(input As String, tempFolder As String) 341 | If Not My.Settings.UseTiling Then 342 | UpdateLog("Concatenating encoded video segments") 343 | Dim ffmpegProcessInfo As New ProcessStartInfo 344 | Dim ffmpegProcess As Process 345 | ffmpegProcessInfo.FileName = "ffmpeg.exe" 346 | ffmpegProcessInfo.Arguments = "-f concat -safe 0 -i """ + input + """ -c copy """ + tempFolder + "\rav1e-concatenated-file.ivf"" -y" 347 | ffmpegProcessInfo.CreateNoWindow = True 348 | ffmpegProcessInfo.RedirectStandardOutput = False 349 | ffmpegProcessInfo.UseShellExecute = False 350 | ffmpegProcess = Process.Start(ffmpegProcessInfo) 351 | ffmpegProcess.WaitForExit() 352 | UpdateLog("Video concatenated") 353 | Else 354 | IO.File.Move(input, tempFolder + "\rav1e-concatenated-file.ivf") 355 | End If 356 | Return True 357 | End Function 358 | Private Function clean_temp_folder(tempFolder As String) 359 | For Each file As String In IO.Directory.GetFiles(tempFolder) 360 | For Each value In ExtensionsAndFilesList 361 | If file.Contains(value) Then If IO.File.Exists(file) Then IO.File.Delete(file) 362 | Next 363 | Next 364 | Return True 365 | End Function 366 | Private Function merge_audio_video(output As String, tempFolder As String) 367 | UpdateLog("Merging audio and video files") 368 | Dim ffmpegProcessInfo As New ProcessStartInfo 369 | Dim ffmpegProcess As Process 370 | ffmpegProcessInfo.FileName = "ffmpeg.exe" 371 | If IO.File.Exists(tempFolder + "\rav1e-audio.opus") Then 372 | ffmpegProcessInfo.Arguments = "-i """ + tempFolder + "\rav1e-concatenated-file.ivf"" -i """ + tempFolder + "\rav1e-audio.opus"" -c:v copy -c:a copy """ + output + """ -y" 373 | Else 374 | ffmpegProcessInfo.Arguments = "-i """ + tempFolder + "\rav1e-concatenated-file.ivf"" -c:v copy """ + output + """ -y" 375 | End If 376 | ffmpegProcessInfo.CreateNoWindow = True 377 | ffmpegProcessInfo.RedirectStandardOutput = False 378 | ffmpegProcessInfo.UseShellExecute = False 379 | ffmpegProcess = Process.Start(ffmpegProcessInfo) 380 | ffmpegProcess.WaitForExit() 381 | UpdateLog("Merge complete") 382 | Return True 383 | End Function 384 | 385 | Private Function extract_audio(input As String, bitrate As Integer, tempFolder As String) 386 | UpdateLog("Extracting and encoding audio") 387 | Dim ffmpegProcessInfo As New ProcessStartInfo 388 | Dim ffmpegProcess As Process 389 | ffmpegProcessInfo.FileName = "ffmpeg.exe" 390 | ffmpegProcessInfo.Arguments = "-i """ + input + """ -c:a libopus -application audio -b:a " + bitrate.ToString() + "K -af aformat=channel_layouts=""7.1|5.1|stereo"" """ + tempFolder + "\rav1e-audio.opus"" -y" 391 | ffmpegProcessInfo.CreateNoWindow = True 392 | ffmpegProcessInfo.RedirectStandardOutput = False 393 | ffmpegProcessInfo.UseShellExecute = False 394 | ffmpegProcess = Process.Start(ffmpegProcessInfo) 395 | ffmpegProcess.WaitForExit() 396 | UpdateLog("Audio extracted and encoded") 397 | Return True 398 | End Function 399 | Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 400 | Dim ignoreLocations As Boolean = False 401 | Dim vars As String() = Environment.GetCommandLineArgs 402 | If vars.Count > 1 Then 403 | If vars.Contains("ignore_locations") Then ignoreLocations = True 404 | For var As Integer = 1 To vars.Count - 1 405 | If Not vars(var) = "ignore_locations" Then InputTxt.Text = vars(var) 406 | Next 407 | End If 408 | IO.Directory.SetCurrentDirectory(CurrentDirectory) 409 | 410 | CPUThreads.Maximum = Environment.ProcessorCount 411 | If My.Settings.CPUThreads > 0 Then CPUThreads.Value = My.Settings.CPUThreads Else CPUThreads.Value = CPUThreads.Maximum 412 | quantizer.Value = My.Settings.quantizer 413 | videoBitrate.Value = My.Settings.VideoBitrate 414 | useQuantizer.Checked = My.Settings.useQuantizer 415 | useBitrate.Checked = My.Settings.useBitrate 416 | If useBitrate.Checked Then 417 | twoPass.Checked = My.Settings.twoPass 418 | Else 419 | My.Settings.twoPass = False 420 | My.Settings.Save() 421 | End If 422 | speed.Value = My.Settings.speed 423 | audioBitrate.Value = My.Settings.AudioBitrate 424 | MinKeyFrameInterval.Value = My.Settings.minKeyInt 425 | MaxKeyFrameInterval.Value = My.Settings.maxKeyInt 426 | UseTilingCheckbox.Checked = My.Settings.UseTiling 427 | pieceSeconds.Value = My.Settings.pieceSeconds 428 | LowLatencyCheckbox.Checked = My.Settings.lowlat 429 | tempLocationPath.Text = My.Settings.tempFolder 430 | RemoveTempFiles.Checked = My.Settings.removeTempFiles 431 | ShowPSNRMetrics.Checked = My.Settings.ShowPSNRMetrics 432 | RunRav1eInWSL.Checked = My.Settings.RunRav1eInWSL 433 | GetRav1eVersion() 434 | GetFfmpegVersion() 435 | DetectWSL() 436 | GUILoaded = True 437 | If Not String.IsNullOrWhiteSpace(tempLocationPath.Text) Then CheckForLockFile() 438 | End Sub 439 | 440 | Private Delegate Sub UpdateLogInvoker(message As String, PartName As String) 441 | Private Sub UpdateLog(message As String, Optional PartName As String = "") 442 | If ProgressLog.InvokeRequired Then 443 | ProgressLog.Invoke(New UpdateLogInvoker(AddressOf UpdateLog), message, PartName) 444 | Else 445 | If Not PartName = "" Then 446 | ProgressLog.AppendText(Date.Now().ToString() + " || " + PartName + " || " + message + vbCrLf) 447 | Else 448 | ProgressLog.AppendText(Date.Now().ToString() + " || " + message + vbCrLf) 449 | End If 450 | ProgressLog.SelectionStart = ProgressLog.Text.Length - 1 451 | ProgressLog.ScrollToCaret() 452 | End If 453 | End Sub 454 | Private Sub GetRav1eVersion() 455 | Try 456 | Dim rav1eProcessInfo As New ProcessStartInfo 457 | Dim rav1eProcess As Process 458 | rav1eProcessInfo.FileName = "rav1e.exe" 459 | rav1eProcessInfo.Arguments = "-0" 460 | rav1eProcessInfo.CreateNoWindow = True 461 | rav1eProcessInfo.RedirectStandardOutput = True 462 | rav1eProcessInfo.UseShellExecute = False 463 | rav1eProcess = Process.Start(rav1eProcessInfo) 464 | rav1eProcess.WaitForExit() 465 | rav1eVersionLabel.Text = "rav1e version: " + rav1eProcess.StandardOutput.ReadLine() 466 | Catch ex As Exception 467 | MessageBox.Show("rav1e.exe was not found. Exiting...") 468 | Process.Start("https://moisescardona.me/rav1e-builds/") 469 | Me.Close() 470 | End Try 471 | End Sub 472 | Private Sub GetFfmpegVersion() 473 | Try 474 | Dim ffmpegProcessInfo As New ProcessStartInfo 475 | Dim ffmpegProcess As Process 476 | ffmpegProcessInfo.FileName = "ffmpeg.exe" 477 | ffmpegProcessInfo.CreateNoWindow = True 478 | ffmpegProcessInfo.RedirectStandardError = True 479 | ffmpegProcessInfo.UseShellExecute = False 480 | ffmpegProcess = Process.Start(ffmpegProcessInfo) 481 | ffmpegProcess.WaitForExit() 482 | ffmpegVersionLabel.Text = ffmpegProcess.StandardError.ReadLine() 483 | Catch ex As Exception 484 | MessageBox.Show("ffmpeg.exe was not found. Exiting...") 485 | Process.Start("https://moisescardona.me/downloading-ffmpeg-rav1e-gui/") 486 | Me.Close() 487 | End Try 488 | End Sub 489 | 490 | Private Sub DetectWSL() 491 | Try 492 | Dim WSLProcessInfo As New ProcessStartInfo 493 | Dim WSLProcess As Process 494 | WSLProcessInfo.FileName = "wsl.exe" 495 | WSLProcessInfo.Arguments = "--list" 496 | WSLProcessInfo.CreateNoWindow = True 497 | WSLProcessInfo.RedirectStandardError = False 498 | WSLProcessInfo.UseShellExecute = False 499 | WSLProcess = Process.Start(WSLProcessInfo) 500 | WSLProcess.WaitForExit() 501 | Catch ex As Exception 502 | RunRav1eInWSL.Enabled = False 503 | RunRav1eInWSL.Checked = False 504 | End Try 505 | End Sub 506 | 507 | Private Sub tempLocationPath_TextChanged(sender As Object, e As EventArgs) Handles tempLocationPath.TextChanged 508 | If GUILoaded Then 509 | My.Settings.tempFolder = tempLocationPath.Text 510 | My.Settings.Save() 511 | End If 512 | End Sub 513 | 514 | Private Sub quantizer_ValueChanged(sender As Object, e As EventArgs) Handles quantizer.ValueChanged 515 | If GUILoaded Then 516 | My.Settings.quantizer = quantizer.Value 517 | My.Settings.Save() 518 | End If 519 | End Sub 520 | 521 | Private Sub speed_ValueChanged(sender As Object, e As EventArgs) Handles speed.ValueChanged 522 | If GUILoaded Then 523 | My.Settings.speed = speed.Value 524 | My.Settings.Save() 525 | End If 526 | End Sub 527 | 528 | Private Sub audioBitrate_ValueChanged(sender As Object, e As EventArgs) Handles audioBitrate.ValueChanged 529 | If GUILoaded Then 530 | My.Settings.AudioBitrate = audioBitrate.Value 531 | My.Settings.Save() 532 | End If 533 | End Sub 534 | 535 | Private Sub BrowseTempLocation_Click(sender As Object, e As EventArgs) Handles BrowseTempLocation.Click 536 | Dim TempFolderBrowser As New FolderBrowserDialog With { 537 | .ShowNewFolderButton = False 538 | } 539 | Dim OkAction As MsgBoxResult = TempFolderBrowser.ShowDialog 540 | If OkAction = MsgBoxResult.Ok Then 541 | tempLocationPath.Text = TempFolderBrowser.SelectedPath 542 | End If 543 | End Sub 544 | 545 | Private Sub MinKeyFrameInterval_ValueChanged(sender As Object, e As EventArgs) Handles MinKeyFrameInterval.ValueChanged 546 | If GUILoaded Then 547 | My.Settings.minKeyInt = MinKeyFrameInterval.Value 548 | My.Settings.Save() 549 | End If 550 | End Sub 551 | Private Sub MaxKeyFrameInterval_ValueChanged(sender As Object, e As EventArgs) Handles MaxKeyFrameInterval.ValueChanged 552 | If GUILoaded Then 553 | My.Settings.maxKeyInt = MaxKeyFrameInterval.Value 554 | My.Settings.Save() 555 | End If 556 | End Sub 557 | 558 | Private Sub LowLatencyCheckbox_CheckedChanged(sender As Object, e As EventArgs) Handles LowLatencyCheckbox.CheckedChanged 559 | If GUILoaded Then 560 | My.Settings.lowlat = LowLatencyCheckbox.Checked 561 | My.Settings.Save() 562 | End If 563 | End Sub 564 | 565 | Private Sub RemoveTempFiles_CheckedChanged(sender As Object, e As EventArgs) Handles RemoveTempFiles.CheckedChanged 566 | If GUILoaded Then 567 | My.Settings.removeTempFiles = RemoveTempFiles.Checked 568 | My.Settings.Save() 569 | End If 570 | End Sub 571 | 572 | Private Sub pieceSenconds_ValueChanged(sender As Object, e As EventArgs) Handles pieceSeconds.ValueChanged 573 | If GUILoaded Then 574 | My.Settings.pieceSeconds = pieceSeconds.Value 575 | My.Settings.Save() 576 | End If 577 | End Sub 578 | 579 | Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing 580 | Exiting = True 581 | Dim processes As String() = New String() {"rav1e", "ffmpeg"} 582 | If RunRav1eInWSL.Checked Then processes.Append("wsl") 583 | For Each processName In processes 584 | While True 585 | Try 586 | For Each process_proc In Process.GetProcessesByName("ffmpeg") 587 | process_proc.Kill() 588 | Next 589 | Catch 590 | End Try 591 | If Process.GetProcessesByName(processName).Length = 0 Then 592 | Exit While 593 | End If 594 | End While 595 | Next 596 | For Each rav1e_proc In Process.GetProcessesByName("rav1e_gui") 597 | If rav1e_proc.Id = Process.GetCurrentProcess().Id Then rav1e_proc.Kill() 598 | Next 599 | End Sub 600 | 601 | Private Sub AdvancedEncoderOptionsButton_Click(sender As Object, e As EventArgs) Handles AdvancedEncoderOptionsButton.Click 602 | AdvancedOptions.ShowDialog() 603 | End Sub 604 | 605 | Private Sub ShowPSNRMetrics_CheckedChanged(sender As Object, e As EventArgs) Handles ShowPSNRMetrics.CheckedChanged 606 | If GUILoaded Then 607 | My.Settings.ShowPSNRMetrics = ShowPSNRMetrics.Checked 608 | My.Settings.Save() 609 | End If 610 | End Sub 611 | 612 | Private Sub ClearLogBtn_Click(sender As Object, e As EventArgs) Handles ClearLogBtn.Click 613 | ProgressLog.Clear() 614 | End Sub 615 | 616 | Private Sub SaveLogBtn_Click(sender As Object, e As EventArgs) Handles SaveLogBtn.Click 617 | Dim saveDialog As New SaveFileDialog With { 618 | .Filter = "Log File|*.log", 619 | .Title = "Browse to save the log file"} 620 | Dim dialogResult As DialogResult = saveDialog.ShowDialog() 621 | If DialogResult.OK Then 622 | IO.File.WriteAllText(saveDialog.FileName, ProgressLog.Text) 623 | End If 624 | End Sub 625 | 626 | Private Sub Form1_DragEnter(sender As Object, e As DragEventArgs) Handles MyBase.DragEnter 627 | If e.Data.GetDataPresent(DataFormats.FileDrop) Then 628 | e.Effect = DragDropEffects.Copy 629 | End If 630 | End Sub 631 | Private Sub Form1_DragDrop(sender As Object, e As DragEventArgs) Handles MyBase.DragDrop 632 | Dim Filename As String = CType(e.Data.GetData(DataFormats.FileDrop), String())(0) 633 | InputTxt.Text = Filename 634 | OutputTxt.Text = IO.Path.ChangeExtension(Filename, ".webm") 635 | End Sub 636 | 637 | Private Sub PauseResumeButton_Click(sender As Object, e As EventArgs) Handles PauseResumeButton.Click 638 | Dim processes As String() = New String() {"rav1e", "ffmpeg"} 639 | If RunRav1eInWSL.Checked Then processes.Append("wsl") 640 | For Each processName In processes 641 | If PauseResumeButton.Text = "Pause" Then 642 | UpdateLog("Pausing encode") 643 | Try 644 | For Each process_proc In Process.GetProcessesByName(processName) 645 | SuspendResumeProcess.SuspendProcess(process_proc.Id) 646 | Next 647 | Catch 648 | End Try 649 | UpdateLog("Encode paused (Some progress may still be reported)") 650 | PauseResumeButton.Text = "Resume" 651 | Else 652 | UpdateLog("Resuming encode") 653 | Try 654 | For Each process_proc In Process.GetProcessesByName(processName) 655 | SuspendResumeProcess.ResumeProcess(process_proc.Id) 656 | Next 657 | Catch 658 | End Try 659 | UpdateLog("Encode resumed") 660 | PauseResumeButton.Text = "Pause" 661 | End If 662 | Next 663 | End Sub 664 | 665 | Private Sub UseQuantizer_CheckedChanged(sender As Object, e As EventArgs) Handles useQuantizer.CheckedChanged 666 | If GUILoaded Then 667 | My.Settings.useQuantizer = useQuantizer.Checked 668 | My.Settings.Save() 669 | End If 670 | quantizer.Enabled = True 671 | videoBitrate.Enabled = False 672 | twoPass.Checked = False 673 | twoPass.Enabled = False 674 | End Sub 675 | 676 | Private Sub VideoBitrate_ValueChanged(sender As Object, e As EventArgs) Handles videoBitrate.ValueChanged 677 | If GUILoaded Then 678 | My.Settings.VideoBitrate = videoBitrate.Value 679 | My.Settings.Save() 680 | End If 681 | End Sub 682 | 683 | Private Sub UseBitrate_CheckedChanged(sender As Object, e As EventArgs) Handles useBitrate.CheckedChanged 684 | If GUILoaded Then 685 | My.Settings.useBitrate = useBitrate.Checked 686 | My.Settings.Save() 687 | End If 688 | quantizer.Enabled = False 689 | videoBitrate.Enabled = True 690 | twoPass.Enabled = True 691 | End Sub 692 | 693 | Private Sub TwoPass_CheckedChanged(sender As Object, e As EventArgs) Handles twoPass.CheckedChanged 694 | If GUILoaded Then 695 | My.Settings.twoPass = twoPass.Checked 696 | My.Settings.Save() 697 | End If 698 | End Sub 699 | 700 | Private Sub UseTilingCheckbox_CheckedChanged(sender As Object, e As EventArgs) Handles UseTilingCheckbox.CheckedChanged 701 | If GUILoaded Then 702 | My.Settings.UseTiling = UseTilingCheckbox.Checked 703 | My.Settings.Save() 704 | End If 705 | pieceSeconds.Enabled = Not UseTilingCheckbox.Checked 706 | End Sub 707 | 708 | Private Sub CPUThreads_ValueChanged(sender As Object, e As EventArgs) Handles CPUThreads.ValueChanged 709 | If GUILoaded Then 710 | My.Settings.CPUThreads = CPUThreads.Value 711 | My.Settings.Save() 712 | End If 713 | End Sub 714 | 715 | Private Sub InputTxt_TextChanged(sender As Object, e As EventArgs) Handles InputTxt.TextChanged 716 | OutputTxt.Text = IO.Path.ChangeExtension(InputTxt.Text, ".webm") 717 | End Sub 718 | 719 | Private Sub RunRav1eInWSL_CheckedChanged(sender As Object, e As EventArgs) Handles RunRav1eInWSL.CheckedChanged 720 | If GUILoaded Then 721 | My.Settings.RunRav1eInWSL = RunRav1eInWSL.Checked 722 | My.Settings.Save() 723 | End If 724 | End Sub 725 | End Class 726 | --------------------------------------------------------------------------------