diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..1ff0c42
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,63 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto
+
+###############################################################################
+# Set default behavior for command prompt diff.
+#
+# This is need for earlier builds of msysgit that does not have it on by
+# default for csharp files.
+# Note: This is only used by command line
+###############################################################################
+#*.cs diff=csharp
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just uncomment the entries below
+###############################################################################
+#*.sln merge=binary
+#*.csproj merge=binary
+#*.vbproj merge=binary
+#*.vcxproj merge=binary
+#*.vcproj merge=binary
+#*.dbproj merge=binary
+#*.fsproj merge=binary
+#*.lsproj merge=binary
+#*.wixproj merge=binary
+#*.modelproj merge=binary
+#*.sqlproj merge=binary
+#*.wwaproj merge=binary
+
+###############################################################################
+# behavior for image files
+#
+# image files are treated as binary by default.
+###############################################################################
+#*.jpg binary
+#*.png binary
+#*.gif binary
+
+###############################################################################
+# diff behavior for common document formats
+#
+# Convert binary document formats to text before diffing them. This feature
+# is only available from the command line. Turn it on by uncommenting the
+# entries below.
+###############################################################################
+#*.doc diff=astextplain
+#*.DOC diff=astextplain
+#*.docx diff=astextplain
+#*.DOCX diff=astextplain
+#*.dot diff=astextplain
+#*.DOT diff=astextplain
+#*.pdf diff=astextplain
+#*.PDF diff=astextplain
+#*.rtf diff=astextplain
+#*.RTF diff=astextplain
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3c4efe2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,261 @@
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# DNX
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# TODO: Comment the next line if you want to checkin your web deploy settings
+# but database connection strings (with potential passwords) will be unencrypted
+#*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/packages/repositories.config
+# NuGet v3's project.json files produces more ignoreable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.jfm
+*.pfx
+*.publishsettings
+node_modules/
+orleans.codegen.cs
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+.paket/paket.exe
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+# CodeRush
+.cr/
+
+# Python Tools for Visual Studio (PTVS)
+__pycache__/
+*.pyc
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..ff89843
--- /dev/null
+++ b/README.md
@@ -0,0 +1,15 @@
+# rav1e_gui
+A GUI to convert video files to AV1 using rav1e
+
+
+
+I wrote this software to test the rav1e software. Unfortunately, at the current state, rav1e is single-threaded. This GUI solves the issue and enabled multithreading by converting and splitting the input video file into 1-second segments y4m files and splitting the audio as a WAV file using ffmpeg. It then encodes each file using a CPU thread. After the encoding is finished, the WAV file is converted to Opus and the .ivf files are concatenated. Lastly, the .ivf and .opus files are merged into a .webm container.
+
+## Dependencies:
+* You need my build of `opusenc.exe`. You can get it here: https://moisescardona.me/opusenc-libopus%201.3-rc2-2-ga8e2a2b1-dirty-resample-10
+* You need ffmpeg as found here: https://ffmpeg.zeranoe.com/builds/. Use the nightly builds.
+* You also need rav1e
+
+Written in Visual Basic .NET using Visual Studio 2017.
+
+Enjoy!
diff --git a/rav1e_gui.sln b/rav1e_gui.sln
new file mode 100644
index 0000000..91a04e5
--- /dev/null
+++ b/rav1e_gui.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27703.2035
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "rav1e_gui", "rav1e_gui\rav1e_gui.vbproj", "{51B64CB0-26F1-466F-A4EF-05F48DA441ED}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Debug|x64.ActiveCfg = Debug|x64
+ {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Debug|x64.Build.0 = Debug|x64
+ {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Release|Any CPU.Build.0 = Release|Any CPU
+ {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Release|x64.ActiveCfg = Release|x64
+ {51B64CB0-26F1-466F-A4EF-05F48DA441ED}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {6677CD0A-1F01-4E78-AAC1-7B208DACE1C2}
+ EndGlobalSection
+EndGlobal
diff --git a/rav1e_gui/App.config b/rav1e_gui/App.config
new file mode 100644
index 0000000..e1ccd9d
--- /dev/null
+++ b/rav1e_gui/App.config
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 100
+
+
+ 3
+
+
+
+
+
+ 64
+
+
+
+
\ No newline at end of file
diff --git a/rav1e_gui/Form1.Designer.vb b/rav1e_gui/Form1.Designer.vb
new file mode 100644
index 0000000..2cc3443
--- /dev/null
+++ b/rav1e_gui/Form1.Designer.vb
@@ -0,0 +1,335 @@
+
+Partial Class Form1
+ Inherits System.Windows.Forms.Form
+
+ 'Form overrides dispose to clean up the component list.
+
+ Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+ Try
+ If disposing AndAlso components IsNot Nothing Then
+ components.Dispose()
+ End If
+ Finally
+ MyBase.Dispose(disposing)
+ End Try
+ End Sub
+
+ 'Required by the Windows Form Designer
+ Private components As System.ComponentModel.IContainer
+
+ 'NOTE: The following procedure is required by the Windows Form Designer
+ 'It can be modified using the Windows Form Designer.
+ 'Do not modify it using the code editor.
+
+ Private Sub InitializeComponent()
+ Me.Label1 = New System.Windows.Forms.Label()
+ Me.Label2 = New System.Windows.Forms.Label()
+ Me.InputTxt = New System.Windows.Forms.TextBox()
+ Me.OutputTxt = New System.Windows.Forms.TextBox()
+ Me.InputBrowseBtn = New System.Windows.Forms.Button()
+ Me.OutputBrowseBtn = New System.Windows.Forms.Button()
+ Me.StartBtn = New System.Windows.Forms.Button()
+ Me.Label4 = New System.Windows.Forms.Label()
+ Me.ProgressBar1 = New System.Windows.Forms.ProgressBar()
+ Me.Label5 = New System.Windows.Forms.Label()
+ Me.Label6 = New System.Windows.Forms.Label()
+ Me.OpusVersionLabel = New System.Windows.Forms.Label()
+ Me.GroupBox1 = New System.Windows.Forms.GroupBox()
+ Me.audioBitrate = New System.Windows.Forms.NumericUpDown()
+ Me.Label9 = New System.Windows.Forms.Label()
+ Me.BrowseTempLocation = New System.Windows.Forms.Button()
+ Me.Label8 = New System.Windows.Forms.Label()
+ Me.tempLocationPath = New System.Windows.Forms.TextBox()
+ Me.speed = New System.Windows.Forms.NumericUpDown()
+ Me.Label7 = New System.Windows.Forms.Label()
+ Me.quantizer = New System.Windows.Forms.NumericUpDown()
+ Me.Label3 = New System.Windows.Forms.Label()
+ Me.rav1eVersionLabel = New System.Windows.Forms.Label()
+ Me.GroupBox1.SuspendLayout
+ CType(Me.audioBitrate,System.ComponentModel.ISupportInitialize).BeginInit
+ CType(Me.speed,System.ComponentModel.ISupportInitialize).BeginInit
+ CType(Me.quantizer,System.ComponentModel.ISupportInitialize).BeginInit
+ Me.SuspendLayout
+ '
+ 'Label1
+ '
+ Me.Label1.AutoSize = true
+ Me.Label1.Location = New System.Drawing.Point(12, 9)
+ Me.Label1.Name = "Label1"
+ Me.Label1.Size = New System.Drawing.Size(151, 13)
+ Me.Label1.TabIndex = 0
+ Me.Label1.Text = "Step 1: Browse for an input file"
+ '
+ 'Label2
+ '
+ Me.Label2.AutoSize = true
+ Me.Label2.Location = New System.Drawing.Point(12, 52)
+ Me.Label2.Name = "Label2"
+ Me.Label2.Size = New System.Drawing.Size(182, 13)
+ Me.Label2.TabIndex = 1
+ Me.Label2.Text = "Step 2: Output location and filename:"
+ '
+ 'InputTxt
+ '
+ Me.InputTxt.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
+ Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+ Me.InputTxt.Location = New System.Drawing.Point(15, 26)
+ Me.InputTxt.Name = "InputTxt"
+ Me.InputTxt.Size = New System.Drawing.Size(340, 20)
+ Me.InputTxt.TabIndex = 2
+ '
+ 'OutputTxt
+ '
+ Me.OutputTxt.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
+ Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+ Me.OutputTxt.Location = New System.Drawing.Point(15, 68)
+ Me.OutputTxt.Name = "OutputTxt"
+ Me.OutputTxt.Size = New System.Drawing.Size(340, 20)
+ Me.OutputTxt.TabIndex = 3
+ '
+ 'InputBrowseBtn
+ '
+ Me.InputBrowseBtn.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+ Me.InputBrowseBtn.Location = New System.Drawing.Point(361, 24)
+ Me.InputBrowseBtn.Name = "InputBrowseBtn"
+ Me.InputBrowseBtn.Size = New System.Drawing.Size(75, 23)
+ Me.InputBrowseBtn.TabIndex = 5
+ Me.InputBrowseBtn.Text = "Browse"
+ Me.InputBrowseBtn.UseVisualStyleBackColor = true
+ '
+ 'OutputBrowseBtn
+ '
+ Me.OutputBrowseBtn.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+ Me.OutputBrowseBtn.Location = New System.Drawing.Point(361, 68)
+ Me.OutputBrowseBtn.Name = "OutputBrowseBtn"
+ Me.OutputBrowseBtn.Size = New System.Drawing.Size(75, 23)
+ Me.OutputBrowseBtn.TabIndex = 6
+ Me.OutputBrowseBtn.Text = "Browse"
+ Me.OutputBrowseBtn.UseVisualStyleBackColor = true
+ '
+ 'StartBtn
+ '
+ Me.StartBtn.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+ Me.StartBtn.Location = New System.Drawing.Point(12, 235)
+ Me.StartBtn.Name = "StartBtn"
+ Me.StartBtn.Size = New System.Drawing.Size(424, 37)
+ Me.StartBtn.TabIndex = 8
+ Me.StartBtn.Text = "Start"
+ Me.StartBtn.UseVisualStyleBackColor = true
+ '
+ 'Label4
+ '
+ Me.Label4.AutoSize = true
+ Me.Label4.Location = New System.Drawing.Point(12, 282)
+ Me.Label4.Name = "Label4"
+ Me.Label4.Size = New System.Drawing.Size(51, 13)
+ Me.Label4.TabIndex = 9
+ Me.Label4.Text = "Progress:"
+ '
+ 'ProgressBar1
+ '
+ Me.ProgressBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
+ Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+ Me.ProgressBar1.Location = New System.Drawing.Point(15, 299)
+ Me.ProgressBar1.Name = "ProgressBar1"
+ Me.ProgressBar1.Size = New System.Drawing.Size(421, 23)
+ Me.ProgressBar1.Step = 1
+ Me.ProgressBar1.TabIndex = 10
+ '
+ 'Label5
+ '
+ Me.Label5.AutoSize = true
+ Me.Label5.Location = New System.Drawing.Point(12, 370)
+ Me.Label5.Name = "Label5"
+ Me.Label5.Size = New System.Drawing.Size(119, 13)
+ Me.Label5.TabIndex = 11
+ Me.Label5.Text = "GUI by Moises Cardona"
+ '
+ 'Label6
+ '
+ Me.Label6.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+ Me.Label6.AutoSize = true
+ Me.Label6.Location = New System.Drawing.Point(408, 370)
+ Me.Label6.Name = "Label6"
+ Me.Label6.Size = New System.Drawing.Size(28, 13)
+ Me.Label6.TabIndex = 12
+ Me.Label6.Text = "v1.0"
+ '
+ 'OpusVersionLabel
+ '
+ Me.OpusVersionLabel.AutoSize = true
+ Me.OpusVersionLabel.Location = New System.Drawing.Point(12, 348)
+ Me.OpusVersionLabel.Name = "OpusVersionLabel"
+ Me.OpusVersionLabel.Size = New System.Drawing.Size(88, 13)
+ Me.OpusVersionLabel.TabIndex = 14
+ Me.OpusVersionLabel.Text = "opusenc version:"
+ '
+ 'GroupBox1
+ '
+ Me.GroupBox1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
+ Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+ Me.GroupBox1.Controls.Add(Me.audioBitrate)
+ Me.GroupBox1.Controls.Add(Me.Label9)
+ Me.GroupBox1.Controls.Add(Me.BrowseTempLocation)
+ Me.GroupBox1.Controls.Add(Me.Label8)
+ Me.GroupBox1.Controls.Add(Me.tempLocationPath)
+ Me.GroupBox1.Controls.Add(Me.speed)
+ Me.GroupBox1.Controls.Add(Me.Label7)
+ Me.GroupBox1.Controls.Add(Me.quantizer)
+ Me.GroupBox1.Controls.Add(Me.Label3)
+ Me.GroupBox1.Location = New System.Drawing.Point(15, 94)
+ Me.GroupBox1.Name = "GroupBox1"
+ Me.GroupBox1.Size = New System.Drawing.Size(421, 122)
+ Me.GroupBox1.TabIndex = 15
+ Me.GroupBox1.TabStop = false
+ Me.GroupBox1.Text = "Encoder Options"
+ '
+ 'audioBitrate
+ '
+ Me.audioBitrate.Location = New System.Drawing.Point(143, 37)
+ Me.audioBitrate.Maximum = New Decimal(New Integer() {320, 0, 0, 0})
+ Me.audioBitrate.Minimum = New Decimal(New Integer() {1, 0, 0, 0})
+ Me.audioBitrate.Name = "audioBitrate"
+ Me.audioBitrate.Size = New System.Drawing.Size(65, 20)
+ Me.audioBitrate.TabIndex = 19
+ Me.audioBitrate.Value = New Decimal(New Integer() {64, 0, 0, 0})
+ '
+ 'Label9
+ '
+ Me.Label9.AutoSize = true
+ Me.Label9.Location = New System.Drawing.Point(140, 21)
+ Me.Label9.Name = "Label9"
+ Me.Label9.Size = New System.Drawing.Size(68, 13)
+ Me.Label9.TabIndex = 18
+ Me.Label9.Text = "audio bitrate:"
+ '
+ 'BrowseTempLocation
+ '
+ Me.BrowseTempLocation.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+ Me.BrowseTempLocation.Location = New System.Drawing.Point(340, 83)
+ Me.BrowseTempLocation.Name = "BrowseTempLocation"
+ Me.BrowseTempLocation.Size = New System.Drawing.Size(75, 23)
+ Me.BrowseTempLocation.TabIndex = 17
+ Me.BrowseTempLocation.Text = "Browse"
+ Me.BrowseTempLocation.UseVisualStyleBackColor = true
+ '
+ 'Label8
+ '
+ Me.Label8.AutoSize = true
+ Me.Label8.Location = New System.Drawing.Point(9, 69)
+ Me.Label8.Name = "Label8"
+ Me.Label8.Size = New System.Drawing.Size(123, 13)
+ Me.Label8.TabIndex = 4
+ Me.Label8.Text = "Temporary File Location:"
+ '
+ 'tempLocationPath
+ '
+ Me.tempLocationPath.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
+ Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+ Me.tempLocationPath.Location = New System.Drawing.Point(12, 85)
+ Me.tempLocationPath.Name = "tempLocationPath"
+ Me.tempLocationPath.Size = New System.Drawing.Size(322, 20)
+ Me.tempLocationPath.TabIndex = 16
+ '
+ 'speed
+ '
+ Me.speed.Location = New System.Drawing.Point(80, 37)
+ Me.speed.Maximum = New Decimal(New Integer() {10, 0, 0, 0})
+ Me.speed.Name = "speed"
+ Me.speed.Size = New System.Drawing.Size(50, 20)
+ Me.speed.TabIndex = 3
+ Me.speed.Value = New Decimal(New Integer() {3, 0, 0, 0})
+ '
+ 'Label7
+ '
+ Me.Label7.AutoSize = true
+ Me.Label7.Location = New System.Drawing.Point(77, 21)
+ Me.Label7.Name = "Label7"
+ Me.Label7.Size = New System.Drawing.Size(39, 13)
+ Me.Label7.TabIndex = 2
+ Me.Label7.Text = "speed:"
+ '
+ 'quantizer
+ '
+ Me.quantizer.Location = New System.Drawing.Point(12, 37)
+ Me.quantizer.Maximum = New Decimal(New Integer() {255, 0, 0, 0})
+ Me.quantizer.Minimum = New Decimal(New Integer() {1, 0, 0, 0})
+ Me.quantizer.Name = "quantizer"
+ Me.quantizer.Size = New System.Drawing.Size(50, 20)
+ Me.quantizer.TabIndex = 1
+ Me.quantizer.Value = New Decimal(New Integer() {100, 0, 0, 0})
+ '
+ 'Label3
+ '
+ Me.Label3.AutoSize = true
+ Me.Label3.Location = New System.Drawing.Point(9, 21)
+ Me.Label3.Name = "Label3"
+ Me.Label3.Size = New System.Drawing.Size(53, 13)
+ Me.Label3.TabIndex = 0
+ Me.Label3.Text = "quantizer:"
+ '
+ 'rav1eVersionLabel
+ '
+ Me.rav1eVersionLabel.AutoSize = true
+ Me.rav1eVersionLabel.Location = New System.Drawing.Point(12, 335)
+ Me.rav1eVersionLabel.Name = "rav1eVersionLabel"
+ Me.rav1eVersionLabel.Size = New System.Drawing.Size(74, 13)
+ Me.rav1eVersionLabel.TabIndex = 16
+ Me.rav1eVersionLabel.Text = "rav1e version:"
+ '
+ 'Form1
+ '
+ Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!)
+ Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+ Me.ClientSize = New System.Drawing.Size(448, 401)
+ Me.Controls.Add(Me.rav1eVersionLabel)
+ Me.Controls.Add(Me.GroupBox1)
+ Me.Controls.Add(Me.OpusVersionLabel)
+ Me.Controls.Add(Me.Label6)
+ Me.Controls.Add(Me.Label5)
+ Me.Controls.Add(Me.ProgressBar1)
+ Me.Controls.Add(Me.Label4)
+ Me.Controls.Add(Me.StartBtn)
+ Me.Controls.Add(Me.OutputBrowseBtn)
+ Me.Controls.Add(Me.InputBrowseBtn)
+ Me.Controls.Add(Me.OutputTxt)
+ Me.Controls.Add(Me.InputTxt)
+ Me.Controls.Add(Me.Label2)
+ Me.Controls.Add(Me.Label1)
+ Me.MaximizeBox = false
+ Me.Name = "Form1"
+ Me.Text = "rav1e GUI"
+ Me.GroupBox1.ResumeLayout(false)
+ Me.GroupBox1.PerformLayout
+ CType(Me.audioBitrate,System.ComponentModel.ISupportInitialize).EndInit
+ CType(Me.speed,System.ComponentModel.ISupportInitialize).EndInit
+ CType(Me.quantizer,System.ComponentModel.ISupportInitialize).EndInit
+ Me.ResumeLayout(false)
+ Me.PerformLayout
+
+End Sub
+
+ Friend WithEvents Label1 As Label
+ Friend WithEvents Label2 As Label
+ Friend WithEvents InputTxt As TextBox
+ Friend WithEvents OutputTxt As TextBox
+ Friend WithEvents InputBrowseBtn As Button
+ Friend WithEvents OutputBrowseBtn As Button
+ Friend WithEvents StartBtn As Button
+ Friend WithEvents Label4 As Label
+ Friend WithEvents ProgressBar1 As ProgressBar
+ Friend WithEvents Label5 As Label
+ Friend WithEvents Label6 As Label
+ Friend WithEvents OpusVersionLabel As Label
+ Friend WithEvents GroupBox1 As GroupBox
+ Friend WithEvents BrowseTempLocation As Button
+ Friend WithEvents Label8 As Label
+ Friend WithEvents tempLocationPath As TextBox
+ Friend WithEvents speed As NumericUpDown
+ Friend WithEvents Label7 As Label
+ Friend WithEvents quantizer As NumericUpDown
+ Friend WithEvents Label3 As Label
+ Friend WithEvents rav1eVersionLabel As Label
+ Friend WithEvents audioBitrate As NumericUpDown
+ Friend WithEvents Label9 As Label
+End Class
diff --git a/rav1e_gui/Form1.resx b/rav1e_gui/Form1.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/rav1e_gui/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/rav1e_gui/Form1.vb b/rav1e_gui/Form1.vb
new file mode 100644
index 0000000..76b32fb
--- /dev/null
+++ b/rav1e_gui/Form1.vb
@@ -0,0 +1,285 @@
+Public Class Form1
+ Private GUILoaded As Boolean = False
+ Private Sub InputBrowseBtn_Click(sender As Object, e As EventArgs) Handles InputBrowseBtn.Click
+ Dim InputBrowser As New OpenFileDialog With {
+ .Title = "Browse for a video file",
+ .FileName = "",
+ .Filter = "All Files|*.*"
+ }
+ Dim OkAction As MsgBoxResult = InputBrowser.ShowDialog
+ If OkAction = MsgBoxResult.Ok Then
+ InputTxt.Text = InputBrowser.FileName
+ End If
+ End Sub
+
+ Private Sub OutputBrowseBtn_Click(sender As Object, e As EventArgs) Handles OutputBrowseBtn.Click
+ Dim OutputBrowser As New SaveFileDialog With {
+ .Title = "Save Video File",
+ .FileName = "",
+ .Filter = "WebM|*.webm"
+ }
+ Dim OkAction As MsgBoxResult = OutputBrowser.ShowDialog
+ If OkAction = MsgBoxResult.Ok Then
+ OutputTxt.Text = OutputBrowser.FileName
+ End If
+ End Sub
+
+ Private Sub StartBtn_Click(sender As Object, e As EventArgs) Handles StartBtn.Click
+ StartBtn.Enabled = False
+ InputTxt.Enabled = False
+ OutputTxt.Enabled = False
+ InputBrowseBtn.Enabled = False
+ OutputBrowseBtn.Enabled = False
+ audioBitrate.Enabled = False
+ quantizer.Enabled = False
+ speed.Enabled = False
+ tempLocationPath.Enabled = False
+ BrowseTempLocation.Enabled = False
+ If Not IO.Path.GetExtension(OutputTxt.Text) = ".webm" Then
+ OutputTxt.Text = My.Computer.FileSystem.GetParentPath(OutputTxt.Text) + "\" + IO.Path.GetFileNameWithoutExtension(OutputTxt.Text) + ".webm"
+ End If
+ Dim StartTasks As New Threading.Thread(Sub() StartThreads())
+ StartTasks.Start()
+ End Sub
+ Private Sub StartThreads()
+ If split_video_file(InputTxt.Text, tempLocationPath.Text) Then
+ If extract_audio(InputTxt.Text, tempLocationPath.Text) Then
+ Dim ItemsToProcess As List(Of String) = New List(Of String)
+ For Each File As String In IO.Directory.GetFiles(tempLocationPath.Text)
+ If IO.Path.GetExtension(File) = ".y4m" And File.Contains("y4m-part-") Then
+ ItemsToProcess.Add(File)
+ End If
+ Next
+ ItemsToProcess.Sort()
+ ProgressBar1.BeginInvoke(Sub()
+ ProgressBar1.Maximum = ItemsToProcess.Count
+ ProgressBar1.Value = 0
+ End Sub)
+ Dim tasks = New List(Of Action)
+ Dim streamWriter As New IO.StreamWriter(tempLocationPath.Text + "\rav1e-concatenate-list.txt")
+ For Counter As Integer = 0 To ItemsToProcess.Count - 1
+ Dim args As Array = {ItemsToProcess(Counter), tempLocationPath.Text + "\" + IO.Path.GetFileNameWithoutExtension(ItemsToProcess(Counter)) + ".ivf", My.Settings.quantizer, My.Settings.speed}
+ streamWriter.WriteLine("file '" + tempLocationPath.Text.Replace("\", "/") + "/" + IO.Path.GetFileNameWithoutExtension(ItemsToProcess(Counter)) + ".ivf" + "'")
+ tasks.Add(Function() Run_rav1e(args))
+ Next
+ streamWriter.Close()
+ Dim options As New ParallelOptions With {.MaxDegreeOfParallelism = Environment.ProcessorCount}
+ Parallel.Invoke(options, tasks.ToArray())
+ Run_opus(My.Settings.bitrate, tempLocationPath.Text)
+ concatenate_video_files(tempLocationPath.Text + "\rav1e-concatenate-list.txt", tempLocationPath.Text)
+ merge_audio_video(OutputTxt.Text, tempLocationPath.Text)
+ clean_temp_folder(tempLocationPath.Text)
+ StartBtn.BeginInvoke(Sub()
+ StartBtn.Enabled = True
+ audioBitrate.Enabled = True
+ quantizer.Enabled = True
+ speed.Enabled = True
+ tempLocationPath.Enabled = True
+ BrowseTempLocation.Enabled = True
+ OutputTxt.Enabled = True
+ InputTxt.Enabled = True
+ InputBrowseBtn.Enabled = True
+ OutputBrowseBtn.Enabled = True
+ End Sub)
+ MsgBox("Finished")
+ End If
+ End If
+ End Sub
+ Private Function Run_opus(audio_bitrate As Integer, tempFolder As String)
+ Dim opusProcessInfo As New ProcessStartInfo
+ Dim opusProcess As Process
+ opusProcessInfo.FileName = "opusenc.exe"
+ opusProcessInfo.Arguments = "--music --bitrate " & audio_bitrate & " """ + tempFolder + "\rav1e-audio.wav"""
+ opusProcessInfo.CreateNoWindow = True
+ opusProcessInfo.RedirectStandardOutput = False
+ opusProcessInfo.UseShellExecute = False
+ opusProcess = Process.Start(opusProcessInfo)
+ opusProcess.WaitForExit()
+ Return True
+ End Function
+ Private Function Run_rav1e(args As Array)
+ Dim Input_File As String = args(0)
+ Dim Output_File As String = args(1)
+ Dim Quantizer As String = args(2)
+ Dim Speed As String = args(3)
+ Dim rav1eProcessInfo As New ProcessStartInfo
+ Dim rav1eProcess As Process
+ rav1eProcessInfo.FileName = "rav1e.exe"
+ rav1eProcessInfo.Arguments = """" + Input_File + """ -o """ + Output_File + """ --quantizer " + Quantizer + " -s " + Speed
+ rav1eProcessInfo.CreateNoWindow = True
+ rav1eProcessInfo.RedirectStandardOutput = False
+ rav1eProcessInfo.UseShellExecute = False
+ rav1eProcess = Process.Start(rav1eProcessInfo)
+ rav1eProcess.WaitForExit()
+ ProgressBar1.BeginInvoke(Sub() ProgressBar1.PerformStep())
+ Return True
+ End Function
+
+ Private Function split_video_file(input As String, tempFolder As String)
+ Dim ffmpegProcessInfo As New ProcessStartInfo
+ Dim ffmpegProcess As Process
+ ffmpegProcessInfo.FileName = "ffmpeg.exe"
+ ffmpegProcessInfo.Arguments = "-i """ + input + """ -f segment -segment_time 1 """ + tempFolder + "/y4m-part-%6d.y4m"""
+ ffmpegProcessInfo.CreateNoWindow = True
+ ffmpegProcessInfo.RedirectStandardOutput = False
+ ffmpegProcessInfo.UseShellExecute = False
+ ffmpegProcess = Process.Start(ffmpegProcessInfo)
+ ffmpegProcess.WaitForExit()
+ Return True
+ End Function
+
+ Private Function concatenate_video_files(input As String, tempFolder As String)
+ Dim ffmpegProcessInfo As New ProcessStartInfo
+ Dim ffmpegProcess As Process
+ ffmpegProcessInfo.FileName = "ffmpeg.exe"
+ ffmpegProcessInfo.Arguments = "-f concat -safe 0 -i """ + input + """ -c copy """ + tempFolder + "\rav1e-concatenated-file.ivf"""
+ ffmpegProcessInfo.CreateNoWindow = True
+ ffmpegProcessInfo.RedirectStandardOutput = False
+ ffmpegProcessInfo.UseShellExecute = False
+ ffmpegProcess = Process.Start(ffmpegProcessInfo)
+ ffmpegProcess.WaitForExit()
+ Return True
+ End Function
+ Private Function clean_temp_folder(tempFolder As String)
+ For Each File As String In IO.Directory.GetFiles(tempLocationPath.Text)
+ If (IO.Path.GetExtension(File) = ".y4m" Or IO.Path.GetExtension(File) = ".ivf" And File.Contains("y4m-part-")) Or IO.Path.GetFileName(File) = "rav1e-audio.opus" Or IO.Path.GetFileName(File) = "rav1e-audio.wav" Or IO.Path.GetFileName(File) = "rav1e-concatenated-file.ivf" Or IO.Path.GetFileName(File) = "rav1e-concatenate-list.txt" Then
+ My.Computer.FileSystem.DeleteFile(File)
+ End If
+ Next
+ Return True
+ End Function
+ Private Function merge_audio_video(output As String, tempFolder As String)
+ Dim ffmpegProcessInfo As New ProcessStartInfo
+ Dim ffmpegProcess As Process
+ ffmpegProcessInfo.FileName = "ffmpeg.exe"
+ ffmpegProcessInfo.Arguments = "-i """ + tempFolder + "\rav1e-concatenated-file.ivf"" -i """ + tempFolder + "\rav1e-audio.opus"" -c:v copy -c:a copy """ + output + """"
+ ffmpegProcessInfo.CreateNoWindow = True
+ ffmpegProcessInfo.RedirectStandardOutput = False
+ ffmpegProcessInfo.UseShellExecute = False
+ ffmpegProcess = Process.Start(ffmpegProcessInfo)
+ ffmpegProcess.WaitForExit()
+ Return True
+ End Function
+
+ Private Function extract_audio(input As String, tempFolder As String)
+ Dim ffmpegProcessInfo As New ProcessStartInfo
+ Dim ffmpegProcess As Process
+ ffmpegProcessInfo.FileName = "ffmpeg.exe"
+ ffmpegProcessInfo.Arguments = "-i """ + input + """ -vn """ + tempFolder + "\rav1e-audio.wav"""
+ ffmpegProcessInfo.CreateNoWindow = True
+ ffmpegProcessInfo.RedirectStandardOutput = False
+ ffmpegProcessInfo.UseShellExecute = False
+ ffmpegProcess = Process.Start(ffmpegProcessInfo)
+ ffmpegProcess.WaitForExit()
+ Return True
+ End Function
+
+ Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
+ quantizer.Value = My.Settings.quantizer
+ speed.Value = My.Settings.speed
+ audioBitrate.Value = My.Settings.bitrate
+ tempLocationPath.Text = My.Settings.tempFolder
+ If OpusEncExists() Then
+ GetOpusencVersion()
+ Else
+ MessageBox.Show("opusenc.exe was not found. Exiting...")
+ Me.Close()
+ End If
+ If rav1eExists() Then
+ GetRav1eVersion()
+ Else
+ MessageBox.Show("rav1e.exe was not found. Exiting...")
+ Me.Close()
+ End If
+ If Not ffmpegExists() Then
+ MessageBox.Show("ffmpeg.exe was not found. Exiting...")
+ Me.Close()
+ End If
+ GUILoaded = True
+ End Sub
+
+ Private Sub GetOpusencVersion()
+ Dim opusProcessInfo As New ProcessStartInfo
+ Dim opusProcess As Process
+ opusProcessInfo.FileName = "opusenc.exe"
+ opusProcessInfo.Arguments = "-V"
+ opusProcessInfo.CreateNoWindow = True
+ opusProcessInfo.RedirectStandardOutput = True
+ opusProcessInfo.UseShellExecute = False
+ opusProcess = Process.Start(opusProcessInfo)
+ opusProcess.WaitForExit()
+ OpusVersionLabel.Text = "opusenc version: " + opusProcess.StandardOutput.ReadLine()
+ End Sub
+ Private Sub GetRav1eVersion()
+ Dim rav1eProcessInfo As New ProcessStartInfo
+ Dim rav1eProcess As Process
+ rav1eProcessInfo.FileName = "rav1e.exe"
+ rav1eProcessInfo.Arguments = "-V"
+ rav1eProcessInfo.CreateNoWindow = True
+ rav1eProcessInfo.RedirectStandardOutput = True
+ rav1eProcessInfo.UseShellExecute = False
+ rav1eProcess = Process.Start(rav1eProcessInfo)
+ rav1eProcess.WaitForExit()
+ rav1eVersionLabel.Text = "rav1e version: " + rav1eProcess.StandardOutput.ReadLine()
+ End Sub
+
+ Private Function rav1eExists() As Boolean
+ If My.Computer.FileSystem.FileExists("rav1e.exe") Then
+ Return True
+ Else
+ Return False
+ End If
+ End Function
+ Private Function ffmpegExists() As Boolean
+ If My.Computer.FileSystem.FileExists("ffmpeg.exe") Then
+ Return True
+ Else
+ Return False
+ End If
+ End Function
+ Private Function OpusEncExists() As Boolean
+ If My.Computer.FileSystem.FileExists("opusenc.exe") Then
+ Return True
+ Else
+ Return False
+ End If
+ End Function
+
+ Private Sub tempLocationPath_TextChanged(sender As Object, e As EventArgs) Handles tempLocationPath.TextChanged
+ If GUILoaded Then
+ My.Settings.tempFolder = tempLocationPath.Text
+ My.Settings.Save()
+ End If
+ End Sub
+
+ Private Sub quantizer_ValueChanged(sender As Object, e As EventArgs) Handles quantizer.ValueChanged
+ If GUILoaded Then
+ My.Settings.quantizer = quantizer.Value
+ My.Settings.Save()
+ End If
+ End Sub
+
+ Private Sub speed_ValueChanged(sender As Object, e As EventArgs) Handles speed.ValueChanged
+ If GUILoaded Then
+ My.Settings.speed = speed.Value
+ My.Settings.Save()
+ End If
+ End Sub
+
+ Private Sub audioBitrate_ValueChanged(sender As Object, e As EventArgs) Handles audioBitrate.ValueChanged
+ If GUILoaded Then
+ My.Settings.bitrate = audioBitrate.Value
+ My.Settings.Save()
+ End If
+ End Sub
+
+ Private Sub BrowseTempLocation_Click(sender As Object, e As EventArgs) Handles BrowseTempLocation.Click
+ Dim TempFolderBrowser As New FolderBrowserDialog With {
+ .ShowNewFolderButton = False
+ }
+ Dim OkAction As MsgBoxResult = TempFolderBrowser.ShowDialog
+ If OkAction = MsgBoxResult.Ok Then
+ tempLocationPath.Text = TempFolderBrowser.SelectedPath
+ End If
+ End Sub
+End Class
diff --git a/rav1e_gui/My Project/Application.Designer.vb b/rav1e_gui/My Project/Application.Designer.vb
new file mode 100644
index 0000000..0bad600
--- /dev/null
+++ b/rav1e_gui/My Project/Application.Designer.vb
@@ -0,0 +1,38 @@
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:4.0.30319.42000
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+
+ 'NOTE: This file is auto-generated; do not modify it directly. To make changes,
+ ' or if you encounter build errors in this file, go to the Project Designer
+ ' (go to Project Properties or double-click the My Project node in
+ ' Solution Explorer), and make changes on the Application tab.
+ '
+ Partial Friend Class MyApplication
+
+ _
+ Public Sub New()
+ MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
+ Me.IsSingleInstance = false
+ Me.EnableVisualStyles = true
+ Me.SaveMySettingsOnExit = true
+ Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
+ End Sub
+
+ _
+ Protected Overrides Sub OnCreateMainForm()
+ Me.MainForm = Global.rav1e_gui.Form1
+ End Sub
+ End Class
+End Namespace
diff --git a/rav1e_gui/My Project/Application.myapp b/rav1e_gui/My Project/Application.myapp
new file mode 100644
index 0000000..1243847
--- /dev/null
+++ b/rav1e_gui/My Project/Application.myapp
@@ -0,0 +1,11 @@
+
+
+ true
+ Form1
+ false
+ 0
+ true
+ 0
+ 0
+ true
+
diff --git a/rav1e_gui/My Project/AssemblyInfo.vb b/rav1e_gui/My Project/AssemblyInfo.vb
new file mode 100644
index 0000000..bd4053c
--- /dev/null
+++ b/rav1e_gui/My Project/AssemblyInfo.vb
@@ -0,0 +1,35 @@
+Imports System
+Imports System.Reflection
+Imports System.Runtime.InteropServices
+
+' General Information about an assembly is controlled through the following
+' set of attributes. Change these attribute values to modify the information
+' associated with an assembly.
+
+' Review the values of the assembly attributes
+
+
+
+
+
+
+
+
+
+
+'The following GUID is for the ID of the typelib if this project is exposed to COM
+
+
+' Version information for an assembly consists of the following four values:
+'
+' Major Version
+' Minor Version
+' Build Number
+' Revision
+'
+' You can specify all the values or you can default the Build and Revision Numbers
+' by using the '*' as shown below:
+'
+
+
+
diff --git a/rav1e_gui/My Project/Resources.Designer.vb b/rav1e_gui/My Project/Resources.Designer.vb
new file mode 100644
index 0000000..db1081d
--- /dev/null
+++ b/rav1e_gui/My Project/Resources.Designer.vb
@@ -0,0 +1,63 @@
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:4.0.30319.42000
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+Imports System
+
+Namespace My.Resources
+
+ 'This class was auto-generated by the StronglyTypedResourceBuilder
+ 'class via a tool like ResGen or Visual Studio.
+ 'To add or remove a member, edit your .ResX file then rerun ResGen
+ 'with the /str option, or rebuild your VS project.
+ '''
+ ''' A strongly-typed resource class, for looking up localized strings, etc.
+ '''
+ _
+ Friend Module Resources
+
+ Private resourceMan As Global.System.Resources.ResourceManager
+
+ Private resourceCulture As Global.System.Globalization.CultureInfo
+
+ '''
+ ''' Returns the cached ResourceManager instance used by this class.
+ '''
+ _
+ Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
+ Get
+ If Object.ReferenceEquals(resourceMan, Nothing) Then
+ Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("rav1e_gui.Resources", GetType(Resources).Assembly)
+ resourceMan = temp
+ End If
+ Return resourceMan
+ End Get
+ End Property
+
+ '''
+ ''' Overrides the current thread's CurrentUICulture property for all
+ ''' resource lookups using this strongly typed resource class.
+ '''
+ _
+ Friend Property Culture() As Global.System.Globalization.CultureInfo
+ Get
+ Return resourceCulture
+ End Get
+ Set
+ resourceCulture = value
+ End Set
+ End Property
+ End Module
+End Namespace
diff --git a/rav1e_gui/My Project/Resources.resx b/rav1e_gui/My Project/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/rav1e_gui/My Project/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/rav1e_gui/My Project/Settings.Designer.vb b/rav1e_gui/My Project/Settings.Designer.vb
new file mode 100644
index 0000000..e0f21a6
--- /dev/null
+++ b/rav1e_gui/My Project/Settings.Designer.vb
@@ -0,0 +1,121 @@
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:4.0.30319.42000
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+
+ _
+ Partial Friend NotInheritable Class MySettings
+ Inherits Global.System.Configuration.ApplicationSettingsBase
+
+ Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
+
+#Region "My.Settings Auto-Save Functionality"
+#If _MyType = "WindowsForms" Then
+ Private Shared addedHandler As Boolean
+
+ Private Shared addedHandlerLockObject As New Object
+
+ _
+ Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs)
+ If My.Application.SaveMySettingsOnExit Then
+ My.Settings.Save()
+ End If
+ End Sub
+#End If
+#End Region
+
+ Public Shared ReadOnly Property [Default]() As MySettings
+ Get
+
+#If _MyType = "WindowsForms" Then
+ If Not addedHandler Then
+ SyncLock addedHandlerLockObject
+ If Not addedHandler Then
+ AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
+ addedHandler = True
+ End If
+ End SyncLock
+ End If
+#End If
+ Return defaultInstance
+ End Get
+ End Property
+
+ _
+ Public Property quantizer() As Integer
+ Get
+ Return CType(Me("quantizer"),Integer)
+ End Get
+ Set
+ Me("quantizer") = value
+ End Set
+ End Property
+
+ _
+ Public Property speed() As Integer
+ Get
+ Return CType(Me("speed"),Integer)
+ End Get
+ Set
+ Me("speed") = value
+ End Set
+ End Property
+
+ _
+ Public Property tempFolder() As String
+ Get
+ Return CType(Me("tempFolder"),String)
+ End Get
+ Set
+ Me("tempFolder") = value
+ End Set
+ End Property
+
+ _
+ Public Property bitrate() As Integer
+ Get
+ Return CType(Me("bitrate"),Integer)
+ End Get
+ Set
+ Me("bitrate") = value
+ End Set
+ End Property
+ End Class
+End Namespace
+
+Namespace My
+
+ _
+ Friend Module MySettingsProperty
+
+ _
+ Friend ReadOnly Property Settings() As Global.rav1e_gui.My.MySettings
+ Get
+ Return Global.rav1e_gui.My.MySettings.Default
+ End Get
+ End Property
+ End Module
+End Namespace
diff --git a/rav1e_gui/My Project/Settings.settings b/rav1e_gui/My Project/Settings.settings
new file mode 100644
index 0000000..09f57b4
--- /dev/null
+++ b/rav1e_gui/My Project/Settings.settings
@@ -0,0 +1,18 @@
+
+
+
+
+
+ 100
+
+
+ 3
+
+
+
+
+
+ 64
+
+
+
\ No newline at end of file
diff --git a/rav1e_gui/rav1e_gui.vbproj b/rav1e_gui/rav1e_gui.vbproj
new file mode 100644
index 0000000..a4e2228
--- /dev/null
+++ b/rav1e_gui/rav1e_gui.vbproj
@@ -0,0 +1,132 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {51B64CB0-26F1-466F-A4EF-05F48DA441ED}
+ WinExe
+ rav1e_gui.My.MyApplication
+ rav1e_gui
+ rav1e_gui
+ 512
+ WindowsForms
+ v4.6.1
+ true
+
+
+ AnyCPU
+ true
+ full
+ true
+ true
+ bin\Debug\
+ rav1e_gui.xml
+ 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036
+
+
+ AnyCPU
+ pdbonly
+ false
+ true
+ true
+ bin\Release\
+ rav1e_gui.xml
+ 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036
+
+
+ On
+
+
+ Binary
+
+
+ Off
+
+
+ On
+
+
+ x64
+ bin\x64\Debug\
+ 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036
+
+
+ x64
+ bin\x64\Release\
+ 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.vb
+ Form
+
+
+
+ True
+ Application.myapp
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+ Form1.vb
+
+
+ VbMyResourcesResXFileCodeGenerator
+ Resources.Designer.vb
+ My.Resources
+ Designer
+
+
+
+
+ MyApplicationCodeGenerator
+ Application.Designer.vb
+
+
+ SettingsSingleFileGenerator
+ My
+ Settings.Designer.vb
+
+
+
+
+
\ No newline at end of file