├── .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 [](https://travis-ci.org/moisesmcardona/rav1e_gui) [](https://ci.appveyor.com/project/moisesmcardona/rav1e-gui)
2 | A GUI to convert video files to AV1 using rav1e
3 |
4 | 
5 |
6 | 
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 |
--------------------------------------------------------------------------------