├── .gitattributes
├── .gitignore
├── BlenderRenderController
├── BlenderRenderController.sln
└── BlenderRenderController
│ ├── App.config
│ ├── BlenderRenderController.csproj
│ ├── MainForm.Designer.cs
│ ├── MainForm.cs
│ ├── MainForm.resx
│ ├── Program.cs
│ ├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
│ ├── Scripts
│ ├── get_project_info.py
│ └── mixdown_audio.py
│ ├── Settings.cs
│ ├── json_info.Designer.cs
│ ├── json_info.cs
│ ├── json_info.resx
│ └── resources
│ ├── blender-icon.ico
│ └── icon.txt
├── LICENSE.txt
└── README.md
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 |
7 | # Standard to msysgit
8 | *.doc diff=astextplain
9 | *.DOC diff=astextplain
10 | *.docx diff=astextplain
11 | *.DOCX diff=astextplain
12 | *.dot diff=astextplain
13 | *.DOT diff=astextplain
14 | *.pdf diff=astextplain
15 | *.PDF diff=astextplain
16 | *.rtf diff=astextplain
17 | *.RTF diff=astextplain
18 |
--------------------------------------------------------------------------------
/.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 | build/
21 | bld/
22 | [Bb]in/
23 | [Oo]bj/
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 | artifacts/
46 |
47 | *_i.c
48 | *_p.c
49 | *_i.h
50 | *.ilk
51 | *.meta
52 | *.obj
53 | *.pch
54 | *.pdb
55 | *.pgc
56 | *.pgd
57 | *.rsp
58 | *.sbr
59 | *.tlb
60 | *.tli
61 | *.tlh
62 | *.tmp
63 | *.tmp_proj
64 | *.log
65 | *.vspscc
66 | *.vssscc
67 | .builds
68 | *.pidb
69 | *.svclog
70 | *.scc
71 |
72 | # Chutzpah Test files
73 | _Chutzpah*
74 |
75 | # Visual C++ cache files
76 | ipch/
77 | *.aps
78 | *.ncb
79 | *.opensdf
80 | *.sdf
81 | *.cachefile
82 |
83 | # Visual Studio profiler
84 | *.psess
85 | *.vsp
86 | *.vspx
87 | *.sap
88 |
89 | # TFS 2012 Local Workspace
90 | $tf/
91 |
92 | # Guidance Automation Toolkit
93 | *.gpState
94 |
95 | # ReSharper is a .NET coding add-in
96 | _ReSharper*/
97 | *.[Rr]e[Ss]harper
98 | *.DotSettings.user
99 |
100 | # JustCode is a .NET coding add-in
101 | .JustCode
102 |
103 | # TeamCity is a build add-in
104 | _TeamCity*
105 |
106 | # DotCover is a Code Coverage Tool
107 | *.dotCover
108 |
109 | # NCrunch
110 | _NCrunch_*
111 | .*crunch*.local.xml
112 | nCrunchTemp_*
113 |
114 | # MightyMoose
115 | *.mm.*
116 | AutoTest.Net/
117 |
118 | # Web workbench (sass)
119 | .sass-cache/
120 |
121 | # Installshield output folder
122 | [Ee]xpress/
123 |
124 | # DocProject is a documentation generator add-in
125 | DocProject/buildhelp/
126 | DocProject/Help/*.HxT
127 | DocProject/Help/*.HxC
128 | DocProject/Help/*.hhc
129 | DocProject/Help/*.hhk
130 | DocProject/Help/*.hhp
131 | DocProject/Help/Html2
132 | DocProject/Help/html
133 |
134 | # Click-Once directory
135 | publish/
136 |
137 | # Publish Web Output
138 | *.[Pp]ublish.xml
139 | *.azurePubxml
140 | # TODO: Comment the next line if you want to checkin your web deploy settings
141 | # but database connection strings (with potential passwords) will be unencrypted
142 | *.pubxml
143 | *.publishproj
144 |
145 | # NuGet Packages
146 | *.nupkg
147 | # The packages folder can be ignored because of Package Restore
148 | **/packages/*
149 | # except build/, which is used as an MSBuild target.
150 | !**/packages/build/
151 | # Uncomment if necessary however generally it will be regenerated when needed
152 | #!**/packages/repositories.config
153 |
154 | # Windows Azure Build Output
155 | csx/
156 | *.build.csdef
157 |
158 | # Windows Azure Emulator
159 | efc/
160 | rfc/
161 |
162 | # Windows Store app package directory
163 | AppPackages/
164 |
165 | # Visual Studio cache files
166 | # files ending in .cache can be ignored
167 | *.[Cc]ache
168 | # but keep track of directories ending in .cache
169 | !*.[Cc]ache/
170 |
171 | # Others
172 | ClientBin/
173 | [Ss]tyle[Cc]op.*
174 | ~$*
175 | *~
176 | *.dbmdl
177 | *.dbproj.schemaview
178 | *.pfx
179 | *.publishsettings
180 | node_modules/
181 | orleans.codegen.cs
182 |
183 | # RIA/Silverlight projects
184 | Generated_Code/
185 |
186 | # Backup & report files from converting an old project file
187 | # to a newer Visual Studio version. Backup files are not needed,
188 | # because we have git ;-)
189 | _UpgradeReport_Files/
190 | Backup*/
191 | UpgradeLog*.XML
192 | UpgradeLog*.htm
193 |
194 | # SQL Server files
195 | *.mdf
196 | *.ldf
197 |
198 | # Business Intelligence projects
199 | *.rdl.data
200 | *.bim.layout
201 | *.bim_*.settings
202 |
203 | # Microsoft Fakes
204 | FakesAssemblies/
205 |
206 | # GhostDoc plugin setting file
207 | *.GhostDoc.xml
208 |
209 | # Node.js Tools for Visual Studio
210 | .ntvs_analysis.dat
211 |
212 | # Visual Studio 6 build log
213 | *.plg
214 |
215 | # Visual Studio 6 workspace options file
216 | *.opt
217 |
218 | # Visual Studio LightSwitch build output
219 | **/*.HTMLClient/GeneratedArtifacts
220 | **/*.DesktopClient/GeneratedArtifacts
221 | **/*.DesktopClient/ModelManifest.xml
222 | **/*.Server/GeneratedArtifacts
223 | **/*.Server/ModelManifest.xml
224 | _Pvt_Extensions
225 |
226 | # Paket dependency manager
227 | .paket/paket.exe
228 |
229 | # FAKE - F# Make
230 | .fake/
231 |
232 | # =========================
233 | # Operating System Files
234 | # =========================
235 |
236 | # OSX
237 | # =========================
238 |
239 | .DS_Store
240 | .AppleDouble
241 | .LSOverride
242 |
243 | # Thumbnails
244 | ._*
245 |
246 | # Files that might appear in the root of a volume
247 | .DocumentRevisions-V100
248 | .fseventsd
249 | .Spotlight-V100
250 | .TemporaryItems
251 | .Trashes
252 | .VolumeIcon.icns
253 |
254 | # Directories potentially created on remote AFP share
255 | .AppleDB
256 | .AppleDesktop
257 | Network Trash Folder
258 | Temporary Items
259 | .apdisk
260 |
261 | # Windows
262 | # =========================
263 |
264 | # Windows image file caches
265 | Thumbs.db
266 | ehthumbs.db
267 |
268 | # Folder config file
269 | Desktop.ini
270 |
271 | # Recycle Bin used on file shares
272 | $RECYCLE.BIN/
273 |
274 | # Windows Installer files
275 | *.cab
276 | *.msi
277 | *.msm
278 | *.msp
279 |
280 | # Windows shortcuts
281 | *.lnk
282 | /BlenderRenderController/BlenderRenderController/bkp.txt
283 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.23107.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BlenderRenderController", "BlenderRenderController\BlenderRenderController.csproj", "{B050DD69-B2BE-4F42-8D4E-23B7A7EFF2E5}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {B050DD69-B2BE-4F42-8D4E-23B7A7EFF2E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {B050DD69-B2BE-4F42-8D4E-23B7A7EFF2E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {B050DD69-B2BE-4F42-8D4E-23B7A7EFF2E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {B050DD69-B2BE-4F42-8D4E-23B7A7EFF2E5}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | EndGlobal
23 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/BlenderRenderController.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {B050DD69-B2BE-4F42-8D4E-23B7A7EFF2E5}
8 | WinExe
9 | Properties
10 | BlenderRenderController
11 | BlenderRenderController
12 | v4.5
13 | 512
14 | true
15 |
16 | false
17 | E:\Programas\BlenderRenderController\git\
18 | true
19 | Disk
20 | false
21 | Foreground
22 | 7
23 | Days
24 | false
25 | false
26 | true
27 | 0
28 | 1.0.0.%2a
29 | false
30 | true
31 |
32 |
33 | AnyCPU
34 | true
35 | full
36 | false
37 | bin\Debug\
38 | DEBUG;TRACE
39 | prompt
40 | 4
41 |
42 |
43 | AnyCPU
44 | pdbonly
45 | true
46 | bin\Release\
47 | TRACE
48 | prompt
49 | 4
50 |
51 |
52 | resources\blender-icon.ico
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | Form
71 |
72 |
73 | json_info.cs
74 |
75 |
76 | Form
77 |
78 |
79 | MainForm.cs
80 |
81 |
82 |
83 |
84 |
85 | json_info.cs
86 |
87 |
88 | MainForm.cs
89 |
90 |
91 | ResXFileCodeGenerator
92 | Resources.Designer.cs
93 | Designer
94 |
95 |
96 | True
97 | Resources.resx
98 | True
99 |
100 |
101 | README.md
102 |
103 |
104 | SettingsSingleFileGenerator
105 | Settings.Designer.cs
106 |
107 |
108 | True
109 | Settings.settings
110 | True
111 |
112 |
113 |
114 |
115 | Designer
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 | PreserveNewest
124 |
125 |
126 | PreserveNewest
127 |
128 |
129 |
130 |
131 | False
132 | Microsoft .NET Framework 4.5 %28x86 and x64%29
133 | true
134 |
135 |
136 | False
137 | .NET Framework 3.5 SP1
138 | false
139 |
140 |
141 |
142 |
149 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/MainForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace BlenderRenderController
2 | {
3 | partial class MainForm
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.components = new System.ComponentModel.Container();
32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
33 | this.renderSegmentButton = new System.Windows.Forms.Button();
34 | this.blendFileBrowseButton = new System.Windows.Forms.Button();
35 | this.renderProgressBar = new System.Windows.Forms.ProgressBar();
36 | this.blendFilePathTextBox = new System.Windows.Forms.TextBox();
37 | this.startFrameNumericUpDown = new System.Windows.Forms.NumericUpDown();
38 | this.endFrameNumericUpDown = new System.Windows.Forms.NumericUpDown();
39 | this.startFrameLabel = new System.Windows.Forms.Label();
40 | this.endFrameLabel = new System.Windows.Forms.Label();
41 | this.blendFileLabel = new System.Windows.Forms.Label();
42 | this.partsFolderBrowseButton = new System.Windows.Forms.Button();
43 | this.partsFolderPathTextBox = new System.Windows.Forms.TextBox();
44 | this.partsFolderLabel = new System.Windows.Forms.Label();
45 | this.rendererLabel = new System.Windows.Forms.Label();
46 | this.rendererComboBox = new System.Windows.Forms.ComboBox();
47 | this.progressLabel = new System.Windows.Forms.Label();
48 | this.nextChunkButton = new System.Windows.Forms.Button();
49 | this.prevChunkButton = new System.Windows.Forms.Button();
50 | this.totalFrameCountLabel = new System.Windows.Forms.Label();
51 | this.totalFrameCountNumericUpDown = new System.Windows.Forms.NumericUpDown();
52 | this.processCountNumericUpDown = new System.Windows.Forms.NumericUpDown();
53 | this.processCountLabel = new System.Windows.Forms.Label();
54 | this.renderAllButton = new System.Windows.Forms.Button();
55 | this.concatenatePartsButton = new System.Windows.Forms.Button();
56 | this.ReadBlenderData = new System.Windows.Forms.Button();
57 | this.MixdownAudio = new System.Windows.Forms.Button();
58 | this.TotalTime = new System.Windows.Forms.Label();
59 | this.menuStrip1 = new System.Windows.Forms.MenuStrip();
60 | this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
61 | this.tipsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
62 | this.autocombineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
63 | this.debugShow = new System.Windows.Forms.ToolStripMenuItem();
64 | this.speToolStripMenuItem = new System.Windows.Forms.ToolStripSeparator();
65 | this.visitGithubPageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
66 | this.isti115ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
67 | this.meTwentyFiveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
68 | this.redRaptor93ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
69 | this.jendabekToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
70 | this.infoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
71 | this.readmeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
72 | this.jsonToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
73 | this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
74 | this.deleteJsonToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
75 | this.cMDArgsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
76 | this.label1 = new System.Windows.Forms.Label();
77 | this.infoPanel = new System.Windows.Forms.Panel();
78 | this.outFolderPathTextBox = new System.Windows.Forms.TextBox();
79 | this.label4 = new System.Windows.Forms.Label();
80 | this.infoNoScenes = new System.Windows.Forms.TextBox();
81 | this.infoActiveScene = new System.Windows.Forms.TextBox();
82 | this.label3 = new System.Windows.Forms.Label();
83 | this.label2 = new System.Windows.Forms.Label();
84 | this.activeWarn = new System.Windows.Forms.ToolTip(this.components);
85 | this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
86 | this.ajustOutDir = new System.Windows.Forms.CheckBox();
87 | this.label5 = new System.Windows.Forms.Label();
88 | this.label6 = new System.Windows.Forms.Label();
89 | this.line = new System.Windows.Forms.Label();
90 | this.line2 = new System.Windows.Forms.Label();
91 | this.mergeAudioButton = new System.Windows.Forms.Button();
92 | this.label7 = new System.Windows.Forms.Label();
93 | this.label8 = new System.Windows.Forms.Label();
94 | this.label9 = new System.Windows.Forms.Label();
95 | this.label10 = new System.Windows.Forms.Label();
96 | this.label11 = new System.Windows.Forms.Label();
97 | this.label12 = new System.Windows.Forms.Label();
98 | ((System.ComponentModel.ISupportInitialize)(this.startFrameNumericUpDown)).BeginInit();
99 | ((System.ComponentModel.ISupportInitialize)(this.endFrameNumericUpDown)).BeginInit();
100 | ((System.ComponentModel.ISupportInitialize)(this.totalFrameCountNumericUpDown)).BeginInit();
101 | ((System.ComponentModel.ISupportInitialize)(this.processCountNumericUpDown)).BeginInit();
102 | this.menuStrip1.SuspendLayout();
103 | this.infoPanel.SuspendLayout();
104 | this.SuspendLayout();
105 | //
106 | // renderSegmentButton
107 | //
108 | this.renderSegmentButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F);
109 | this.renderSegmentButton.Location = new System.Drawing.Point(276, 294);
110 | this.renderSegmentButton.Name = "renderSegmentButton";
111 | this.renderSegmentButton.Size = new System.Drawing.Size(127, 39);
112 | this.renderSegmentButton.TabIndex = 0;
113 | this.renderSegmentButton.Text = "Render segment";
114 | this.toolTip1.SetToolTip(this.renderSegmentButton, "Render current segment");
115 | this.renderSegmentButton.UseVisualStyleBackColor = true;
116 | this.renderSegmentButton.Click += new System.EventHandler(this.renderSegmentButton_Click);
117 | //
118 | // blendFileBrowseButton
119 | //
120 | this.blendFileBrowseButton.Location = new System.Drawing.Point(565, 69);
121 | this.blendFileBrowseButton.Name = "blendFileBrowseButton";
122 | this.blendFileBrowseButton.Size = new System.Drawing.Size(76, 27);
123 | this.blendFileBrowseButton.TabIndex = 1;
124 | this.blendFileBrowseButton.Text = "Browse";
125 | this.blendFileBrowseButton.UseVisualStyleBackColor = true;
126 | this.blendFileBrowseButton.Click += new System.EventHandler(this.blendFileBrowseButton_Click);
127 | //
128 | // renderProgressBar
129 | //
130 | this.renderProgressBar.Location = new System.Drawing.Point(37, 343);
131 | this.renderProgressBar.Name = "renderProgressBar";
132 | this.renderProgressBar.Size = new System.Drawing.Size(604, 23);
133 | this.renderProgressBar.Step = 1;
134 | this.renderProgressBar.TabIndex = 2;
135 | this.toolTip1.SetToolTip(this.renderProgressBar, "Progress bar");
136 | //
137 | // blendFilePathTextBox
138 | //
139 | this.blendFilePathTextBox.Location = new System.Drawing.Point(76, 72);
140 | this.blendFilePathTextBox.Name = "blendFilePathTextBox";
141 | this.blendFilePathTextBox.Size = new System.Drawing.Size(482, 20);
142 | this.blendFilePathTextBox.TabIndex = 3;
143 | //
144 | // startFrameNumericUpDown
145 | //
146 | this.startFrameNumericUpDown.Location = new System.Drawing.Point(86, 233);
147 | this.startFrameNumericUpDown.Maximum = new decimal(new int[] {
148 | 1000000,
149 | 0,
150 | 0,
151 | 0});
152 | this.startFrameNumericUpDown.Name = "startFrameNumericUpDown";
153 | this.startFrameNumericUpDown.Size = new System.Drawing.Size(78, 20);
154 | this.startFrameNumericUpDown.TabIndex = 4;
155 | this.toolTip1.SetToolTip(this.startFrameNumericUpDown, "Segment\'s starting frame");
156 | this.startFrameNumericUpDown.Value = new decimal(new int[] {
157 | 1,
158 | 0,
159 | 0,
160 | 0});
161 | //
162 | // endFrameNumericUpDown
163 | //
164 | this.endFrameNumericUpDown.Location = new System.Drawing.Point(86, 266);
165 | this.endFrameNumericUpDown.Maximum = new decimal(new int[] {
166 | 1000000,
167 | 0,
168 | 0,
169 | 0});
170 | this.endFrameNumericUpDown.Minimum = new decimal(new int[] {
171 | 1,
172 | 0,
173 | 0,
174 | 0});
175 | this.endFrameNumericUpDown.Name = "endFrameNumericUpDown";
176 | this.endFrameNumericUpDown.Size = new System.Drawing.Size(78, 20);
177 | this.endFrameNumericUpDown.TabIndex = 5;
178 | this.toolTip1.SetToolTip(this.endFrameNumericUpDown, "Segment\'s end frame");
179 | this.endFrameNumericUpDown.Value = new decimal(new int[] {
180 | 3000,
181 | 0,
182 | 0,
183 | 0});
184 | //
185 | // startFrameLabel
186 | //
187 | this.startFrameLabel.AutoSize = true;
188 | this.startFrameLabel.Location = new System.Drawing.Point(19, 235);
189 | this.startFrameLabel.Name = "startFrameLabel";
190 | this.startFrameLabel.Size = new System.Drawing.Size(61, 13);
191 | this.startFrameLabel.TabIndex = 6;
192 | this.startFrameLabel.Text = "Start frame:";
193 | this.toolTip1.SetToolTip(this.startFrameLabel, "Segment\'s starting frame");
194 | //
195 | // endFrameLabel
196 | //
197 | this.endFrameLabel.AutoSize = true;
198 | this.endFrameLabel.Location = new System.Drawing.Point(19, 268);
199 | this.endFrameLabel.Name = "endFrameLabel";
200 | this.endFrameLabel.Size = new System.Drawing.Size(58, 13);
201 | this.endFrameLabel.TabIndex = 7;
202 | this.endFrameLabel.Text = "End frame:";
203 | this.toolTip1.SetToolTip(this.endFrameLabel, "Segment\'s end frame");
204 | //
205 | // blendFileLabel
206 | //
207 | this.blendFileLabel.AutoSize = true;
208 | this.blendFileLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F);
209 | this.blendFileLabel.Location = new System.Drawing.Point(6, 73);
210 | this.blendFileLabel.Name = "blendFileLabel";
211 | this.blendFileLabel.Size = new System.Drawing.Size(61, 15);
212 | this.blendFileLabel.TabIndex = 8;
213 | this.blendFileLabel.Text = "Blend file:";
214 | //
215 | // partsFolderBrowseButton
216 | //
217 | this.partsFolderBrowseButton.Location = new System.Drawing.Point(564, 403);
218 | this.partsFolderBrowseButton.Name = "partsFolderBrowseButton";
219 | this.partsFolderBrowseButton.Size = new System.Drawing.Size(76, 27);
220 | this.partsFolderBrowseButton.TabIndex = 1;
221 | this.partsFolderBrowseButton.Text = "Browse";
222 | this.partsFolderBrowseButton.UseVisualStyleBackColor = true;
223 | this.partsFolderBrowseButton.Click += new System.EventHandler(this.partsFolderBrowseButton_Click);
224 | //
225 | // partsFolderPathTextBox
226 | //
227 | this.partsFolderPathTextBox.Location = new System.Drawing.Point(111, 406);
228 | this.partsFolderPathTextBox.Name = "partsFolderPathTextBox";
229 | this.partsFolderPathTextBox.Size = new System.Drawing.Size(447, 20);
230 | this.partsFolderPathTextBox.TabIndex = 3;
231 | this.partsFolderPathTextBox.TextChanged += new System.EventHandler(this.outFolderPathTextBox_TextChanged);
232 | //
233 | // partsFolderLabel
234 | //
235 | this.partsFolderLabel.AutoSize = true;
236 | this.partsFolderLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
237 | this.partsFolderLabel.Location = new System.Drawing.Point(33, 408);
238 | this.partsFolderLabel.Name = "partsFolderLabel";
239 | this.partsFolderLabel.Size = new System.Drawing.Size(72, 15);
240 | this.partsFolderLabel.TabIndex = 8;
241 | this.partsFolderLabel.Text = "Parts folder:";
242 | //
243 | // rendererLabel
244 | //
245 | this.rendererLabel.AutoSize = true;
246 | this.rendererLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
247 | this.rendererLabel.Location = new System.Drawing.Point(421, 264);
248 | this.rendererLabel.Name = "rendererLabel";
249 | this.rendererLabel.Size = new System.Drawing.Size(62, 15);
250 | this.rendererLabel.TabIndex = 9;
251 | this.rendererLabel.Text = "Renderer:";
252 | //
253 | // rendererComboBox
254 | //
255 | this.rendererComboBox.FormattingEnabled = true;
256 | this.rendererComboBox.Items.AddRange(new object[] {
257 | "BLENDER_EEVEE",
258 | "BLENDER_WORKBENCH",
259 | "BLENDER_RENDER",
260 | "CYCLES"});
261 | this.rendererComboBox.Location = new System.Drawing.Point(489, 263);
262 | this.rendererComboBox.Name = "rendererComboBox";
263 | this.rendererComboBox.Size = new System.Drawing.Size(134, 21);
264 | this.rendererComboBox.TabIndex = 10;
265 | this.rendererComboBox.Text = "";
266 | //
267 | // progressLabel
268 | //
269 | this.progressLabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
270 | this.progressLabel.Location = new System.Drawing.Point(170, 313);
271 | this.progressLabel.Name = "progressLabel";
272 | this.progressLabel.Size = new System.Drawing.Size(53, 23);
273 | this.progressLabel.TabIndex = 11;
274 | this.progressLabel.Text = "0/0";
275 | this.progressLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
276 | this.toolTip1.SetToolTip(this.progressLabel, "Progress");
277 | this.progressLabel.Visible = false;
278 | //
279 | // nextChunkButton
280 | //
281 | this.nextChunkButton.Location = new System.Drawing.Point(299, 259);
282 | this.nextChunkButton.Name = "nextChunkButton";
283 | this.nextChunkButton.Size = new System.Drawing.Size(74, 27);
284 | this.nextChunkButton.TabIndex = 12;
285 | this.nextChunkButton.Text = "Next chunk";
286 | this.toolTip1.SetToolTip(this.nextChunkButton, "Segment select");
287 | this.nextChunkButton.UseVisualStyleBackColor = true;
288 | this.nextChunkButton.Click += new System.EventHandler(this.nextChunkButton_Click);
289 | //
290 | // prevChunkButton
291 | //
292 | this.prevChunkButton.Location = new System.Drawing.Point(299, 226);
293 | this.prevChunkButton.Name = "prevChunkButton";
294 | this.prevChunkButton.Size = new System.Drawing.Size(74, 27);
295 | this.prevChunkButton.TabIndex = 12;
296 | this.prevChunkButton.Text = "Prev chunk";
297 | this.toolTip1.SetToolTip(this.prevChunkButton, "Segment select");
298 | this.prevChunkButton.UseVisualStyleBackColor = true;
299 | this.prevChunkButton.Click += new System.EventHandler(this.prevChunkButton_Click);
300 | //
301 | // totalFrameCountLabel
302 | //
303 | this.totalFrameCountLabel.AutoSize = true;
304 | this.totalFrameCountLabel.Location = new System.Drawing.Point(179, 246);
305 | this.totalFrameCountLabel.Name = "totalFrameCountLabel";
306 | this.totalFrameCountLabel.Size = new System.Drawing.Size(93, 13);
307 | this.totalFrameCountLabel.TabIndex = 13;
308 | this.totalFrameCountLabel.Text = "Total frame count:";
309 | this.toolTip1.SetToolTip(this.totalFrameCountLabel, "Project\'s end frame");
310 | //
311 | // totalFrameCountNumericUpDown
312 | //
313 | this.totalFrameCountNumericUpDown.Location = new System.Drawing.Point(182, 266);
314 | this.totalFrameCountNumericUpDown.Maximum = new decimal(new int[] {
315 | 1000000,
316 | 0,
317 | 0,
318 | 0});
319 | this.totalFrameCountNumericUpDown.Minimum = new decimal(new int[] {
320 | 1,
321 | 0,
322 | 0,
323 | 0});
324 | this.totalFrameCountNumericUpDown.Name = "totalFrameCountNumericUpDown";
325 | this.totalFrameCountNumericUpDown.Size = new System.Drawing.Size(90, 20);
326 | this.totalFrameCountNumericUpDown.TabIndex = 5;
327 | this.toolTip1.SetToolTip(this.totalFrameCountNumericUpDown, "Project\'s end frame");
328 | this.totalFrameCountNumericUpDown.Value = new decimal(new int[] {
329 | 3000,
330 | 0,
331 | 0,
332 | 0});
333 | //
334 | // processCountNumericUpDown
335 | //
336 | this.processCountNumericUpDown.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
337 | this.processCountNumericUpDown.Location = new System.Drawing.Point(514, 229);
338 | this.processCountNumericUpDown.Name = "processCountNumericUpDown";
339 | this.processCountNumericUpDown.Size = new System.Drawing.Size(44, 21);
340 | this.processCountNumericUpDown.TabIndex = 14;
341 | this.toolTip1.SetToolTip(this.processCountNumericUpDown, "N# of processes. For best results set acording to \r\nhow many logical cores you ha" +
342 | "ve.");
343 | this.processCountNumericUpDown.Value = new decimal(new int[] {
344 | 4,
345 | 0,
346 | 0,
347 | 0});
348 | //
349 | // processCountLabel
350 | //
351 | this.processCountLabel.AutoSize = true;
352 | this.processCountLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
353 | this.processCountLabel.Location = new System.Drawing.Point(421, 231);
354 | this.processCountLabel.Name = "processCountLabel";
355 | this.processCountLabel.Size = new System.Drawing.Size(87, 15);
356 | this.processCountLabel.TabIndex = 15;
357 | this.processCountLabel.Text = "Process count:";
358 | this.toolTip1.SetToolTip(this.processCountLabel, "N# of processes. For best results set acording to\r\nhow many logical cores you hav" +
359 | "e.");
360 | //
361 | // renderAllButton
362 | //
363 | this.renderAllButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.5F, System.Drawing.FontStyle.Bold);
364 | this.renderAllButton.Location = new System.Drawing.Point(470, 293);
365 | this.renderAllButton.Name = "renderAllButton";
366 | this.renderAllButton.Size = new System.Drawing.Size(171, 39);
367 | this.renderAllButton.TabIndex = 0;
368 | this.renderAllButton.Text = "Render all";
369 | this.toolTip1.SetToolTip(this.renderAllButton, "Render all segments");
370 | this.renderAllButton.UseVisualStyleBackColor = true;
371 | this.renderAllButton.Click += new System.EventHandler(this.renderAllButton_Click);
372 | //
373 | // concatenatePartsButton
374 | //
375 | this.concatenatePartsButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
376 | this.concatenatePartsButton.Location = new System.Drawing.Point(470, 436);
377 | this.concatenatePartsButton.Name = "concatenatePartsButton";
378 | this.concatenatePartsButton.Size = new System.Drawing.Size(173, 39);
379 | this.concatenatePartsButton.TabIndex = 16;
380 | this.concatenatePartsButton.Text = "Concatenate parts *";
381 | this.toolTip1.SetToolTip(this.concatenatePartsButton, "Combine segments in FFmpeg");
382 | this.concatenatePartsButton.UseVisualStyleBackColor = true;
383 | this.concatenatePartsButton.Click += new System.EventHandler(this.concatenatePartsButton_Click);
384 | //
385 | // ReadBlenderData
386 | //
387 | this.ReadBlenderData.Location = new System.Drawing.Point(566, 134);
388 | this.ReadBlenderData.Name = "ReadBlenderData";
389 | this.ReadBlenderData.Size = new System.Drawing.Size(75, 63);
390 | this.ReadBlenderData.TabIndex = 17;
391 | this.ReadBlenderData.Text = "Re-Read";
392 | this.toolTip1.SetToolTip(this.ReadBlenderData, "Re-read info from .blend");
393 | this.ReadBlenderData.UseVisualStyleBackColor = true;
394 | this.ReadBlenderData.Click += new System.EventHandler(this.ReadBlenderData_Click);
395 | //
396 | // MixdownAudio
397 | //
398 | this.MixdownAudio.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
399 | this.MixdownAudio.Location = new System.Drawing.Point(177, 500);
400 | this.MixdownAudio.Name = "MixdownAudio";
401 | this.MixdownAudio.Size = new System.Drawing.Size(99, 51);
402 | this.MixdownAudio.TabIndex = 18;
403 | this.MixdownAudio.Text = "MixDown audio";
404 | this.MixdownAudio.UseVisualStyleBackColor = true;
405 | this.MixdownAudio.Click += new System.EventHandler(this.MixdownAudio_Click);
406 | //
407 | // TotalTime
408 | //
409 | this.TotalTime.AutoSize = true;
410 | this.TotalTime.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.25F);
411 | this.TotalTime.Location = new System.Drawing.Point(37, 316);
412 | this.TotalTime.Name = "TotalTime";
413 | this.TotalTime.Size = new System.Drawing.Size(127, 16);
414 | this.TotalTime.TabIndex = 19;
415 | this.TotalTime.Text = "Total Time: 00:00:00";
416 | //
417 | // menuStrip1
418 | //
419 | this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
420 | this.aboutToolStripMenuItem,
421 | this.infoToolStripMenuItem,
422 | this.debugToolStripMenuItem});
423 | this.menuStrip1.Location = new System.Drawing.Point(0, 0);
424 | this.menuStrip1.Name = "menuStrip1";
425 | this.menuStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
426 | this.menuStrip1.Size = new System.Drawing.Size(655, 24);
427 | this.menuStrip1.TabIndex = 20;
428 | this.menuStrip1.Text = "menuStrip1";
429 | //
430 | // aboutToolStripMenuItem
431 | //
432 | this.aboutToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
433 | this.tipsToolStripMenuItem,
434 | this.autocombineToolStripMenuItem,
435 | this.debugShow,
436 | this.speToolStripMenuItem,
437 | this.visitGithubPageToolStripMenuItem});
438 | this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
439 | this.aboutToolStripMenuItem.Size = new System.Drawing.Size(61, 20);
440 | this.aboutToolStripMenuItem.Text = "Options";
441 | this.aboutToolStripMenuItem.TextDirection = System.Windows.Forms.ToolStripTextDirection.Horizontal;
442 | this.aboutToolStripMenuItem.ToolTipText = "Extra options";
443 | //
444 | // tipsToolStripMenuItem
445 | //
446 | this.tipsToolStripMenuItem.Checked = true;
447 | this.tipsToolStripMenuItem.CheckOnClick = true;
448 | this.tipsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
449 | this.tipsToolStripMenuItem.Name = "tipsToolStripMenuItem";
450 | this.tipsToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
451 | this.tipsToolStripMenuItem.Text = "Tooltips";
452 | this.tipsToolStripMenuItem.Click += new System.EventHandler(this.tipsToolStripMenuItem_Click);
453 | //
454 | // autocombineToolStripMenuItem
455 | //
456 | this.autocombineToolStripMenuItem.CheckOnClick = true;
457 | this.autocombineToolStripMenuItem.Name = "autocombineToolStripMenuItem";
458 | this.autocombineToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
459 | this.autocombineToolStripMenuItem.Text = "Auto-combine";
460 | this.autocombineToolStripMenuItem.ToolTipText = "Automatically combine parts when clicking \"Render all\"";
461 | this.autocombineToolStripMenuItem.Visible = false;
462 | //
463 | // debugShow
464 | //
465 | this.debugShow.CheckOnClick = true;
466 | this.debugShow.Name = "debugShow";
467 | this.debugShow.Size = new System.Drawing.Size(166, 22);
468 | this.debugShow.Text = "Debug menu";
469 | this.debugShow.Click += new System.EventHandler(this.debugMenuToolStripMenuItem_Click);
470 | //
471 | // speToolStripMenuItem
472 | //
473 | this.speToolStripMenuItem.Name = "speToolStripMenuItem";
474 | this.speToolStripMenuItem.Size = new System.Drawing.Size(163, 6);
475 | //
476 | // visitGithubPageToolStripMenuItem
477 | //
478 | this.visitGithubPageToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
479 | this.isti115ToolStripMenuItem,
480 | this.meTwentyFiveToolStripMenuItem,
481 | this.redRaptor93ToolStripMenuItem,
482 | this.jendabekToolStripMenuItem});
483 | this.visitGithubPageToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
484 | this.visitGithubPageToolStripMenuItem.ForeColor = System.Drawing.Color.CornflowerBlue;
485 | this.visitGithubPageToolStripMenuItem.Name = "visitGithubPageToolStripMenuItem";
486 | this.visitGithubPageToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
487 | this.visitGithubPageToolStripMenuItem.Text = "Visit GitHub page";
488 | //
489 | // isti115ToolStripMenuItem
490 | //
491 | this.isti115ToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
492 | this.isti115ToolStripMenuItem.ForeColor = System.Drawing.Color.CornflowerBlue;
493 | this.isti115ToolStripMenuItem.Name = "isti115ToolStripMenuItem";
494 | this.isti115ToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
495 | this.isti115ToolStripMenuItem.Text = "Isti115";
496 | this.isti115ToolStripMenuItem.Click += new System.EventHandler(this.isti115ToolStripMenuItem_Click);
497 | //
498 | // meTwentyFiveToolStripMenuItem
499 | //
500 | this.meTwentyFiveToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
501 | this.meTwentyFiveToolStripMenuItem.ForeColor = System.Drawing.Color.CornflowerBlue;
502 | this.meTwentyFiveToolStripMenuItem.Name = "meTwentyFiveToolStripMenuItem";
503 | this.meTwentyFiveToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
504 | this.meTwentyFiveToolStripMenuItem.Text = "MeTwentyFive";
505 | this.meTwentyFiveToolStripMenuItem.Click += new System.EventHandler(this.meTwentyFiveToolStripMenuItem_Click);
506 | //
507 | // redRaptor93ToolStripMenuItem
508 | //
509 | this.redRaptor93ToolStripMenuItem.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
510 | this.redRaptor93ToolStripMenuItem.ForeColor = System.Drawing.Color.CornflowerBlue;
511 | this.redRaptor93ToolStripMenuItem.Name = "redRaptor93ToolStripMenuItem";
512 | this.redRaptor93ToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
513 | this.redRaptor93ToolStripMenuItem.Text = "RedRaptor93";
514 | this.redRaptor93ToolStripMenuItem.Click += new System.EventHandler(this.redRaptor93ToolStripMenuItem_Click);
515 | //
516 | // jendabekToolStripMenuItem
517 | //
518 | this.jendabekToolStripMenuItem.ForeColor = System.Drawing.Color.CornflowerBlue;
519 | this.jendabekToolStripMenuItem.Name = "jendabekToolStripMenuItem";
520 | this.jendabekToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
521 | this.jendabekToolStripMenuItem.Text = "jendabek";
522 | this.jendabekToolStripMenuItem.Click += new System.EventHandler(this.jendabekToolStripMenuItem_Click);
523 | //
524 | // infoToolStripMenuItem
525 | //
526 | this.infoToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
527 | this.readmeToolStripMenuItem,
528 | this.jsonToolStripMenuItem});
529 | this.infoToolStripMenuItem.Name = "infoToolStripMenuItem";
530 | this.infoToolStripMenuItem.Size = new System.Drawing.Size(40, 20);
531 | this.infoToolStripMenuItem.Text = "Info";
532 | //
533 | // readmeToolStripMenuItem
534 | //
535 | this.readmeToolStripMenuItem.Name = "readmeToolStripMenuItem";
536 | this.readmeToolStripMenuItem.Size = new System.Drawing.Size(121, 22);
537 | this.readmeToolStripMenuItem.Text = "Readme";
538 | this.readmeToolStripMenuItem.ToolTipText = "Open readme (WIP)";
539 | //
540 | // jsonToolStripMenuItem
541 | //
542 | this.jsonToolStripMenuItem.Name = "jsonToolStripMenuItem";
543 | this.jsonToolStripMenuItem.Size = new System.Drawing.Size(121, 22);
544 | this.jsonToolStripMenuItem.Text = "Json info";
545 | this.jsonToolStripMenuItem.ToolTipText = "Show contents of Json file";
546 | this.jsonToolStripMenuItem.Click += new System.EventHandler(this.jsonToolStripMenuItem_Click);
547 | //
548 | // debugToolStripMenuItem
549 | //
550 | this.debugToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
551 | this.deleteJsonToolStripMenuItem,
552 | this.cMDArgsToolStripMenuItem});
553 | this.debugToolStripMenuItem.Name = "debugToolStripMenuItem";
554 | this.debugToolStripMenuItem.Size = new System.Drawing.Size(54, 20);
555 | this.debugToolStripMenuItem.Text = "Debug";
556 | this.debugToolStripMenuItem.Visible = false;
557 | //
558 | // deleteJsonToolStripMenuItem
559 | //
560 | this.deleteJsonToolStripMenuItem.Name = "deleteJsonToolStripMenuItem";
561 | this.deleteJsonToolStripMenuItem.Size = new System.Drawing.Size(132, 22);
562 | this.deleteJsonToolStripMenuItem.Text = "Delete json";
563 | this.deleteJsonToolStripMenuItem.Click += new System.EventHandler(this.deleteJsonToolStripMenuItem_Click);
564 | //
565 | // cMDArgsToolStripMenuItem
566 | //
567 | this.cMDArgsToolStripMenuItem.Name = "cMDArgsToolStripMenuItem";
568 | this.cMDArgsToolStripMenuItem.Size = new System.Drawing.Size(132, 22);
569 | this.cMDArgsToolStripMenuItem.Text = "CMD args";
570 | //
571 | // label1
572 | //
573 | this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
574 | this.label1.AutoSize = true;
575 | this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
576 | this.label1.Location = new System.Drawing.Point(10, 61);
577 | this.label1.Name = "label1";
578 | this.label1.Size = new System.Drawing.Size(101, 13);
579 | this.label1.TabIndex = 21;
580 | this.label1.Text = "Active scene name:";
581 | this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
582 | this.activeWarn.SetToolTip(this.label1, "This program will only render the ACTIVE scene, if you \r\nhave more then one scene" +
583 | " on your project sure you \r\nsave it with the scene you want OPEN.");
584 | //
585 | // infoPanel
586 | //
587 | this.infoPanel.BackColor = System.Drawing.SystemColors.Info;
588 | this.infoPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
589 | this.infoPanel.Controls.Add(this.outFolderPathTextBox);
590 | this.infoPanel.Controls.Add(this.label4);
591 | this.infoPanel.Controls.Add(this.infoNoScenes);
592 | this.infoPanel.Controls.Add(this.infoActiveScene);
593 | this.infoPanel.Controls.Add(this.label3);
594 | this.infoPanel.Controls.Add(this.label1);
595 | this.infoPanel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
596 | this.infoPanel.ForeColor = System.Drawing.SystemColors.InfoText;
597 | this.infoPanel.Location = new System.Drawing.Point(76, 106);
598 | this.infoPanel.Name = "infoPanel";
599 | this.infoPanel.Size = new System.Drawing.Size(482, 112);
600 | this.infoPanel.TabIndex = 22;
601 | //
602 | // outFolderPathTextBox
603 | //
604 | this.outFolderPathTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
605 | | System.Windows.Forms.AnchorStyles.Right)));
606 | this.outFolderPathTextBox.BackColor = System.Drawing.SystemColors.Window;
607 | this.outFolderPathTextBox.Cursor = System.Windows.Forms.Cursors.No;
608 | this.outFolderPathTextBox.Location = new System.Drawing.Point(9, 30);
609 | this.outFolderPathTextBox.Name = "outFolderPathTextBox";
610 | this.outFolderPathTextBox.ReadOnly = true;
611 | this.outFolderPathTextBox.Size = new System.Drawing.Size(464, 20);
612 | this.outFolderPathTextBox.TabIndex = 28;
613 | this.outFolderPathTextBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
614 | this.activeWarn.SetToolTip(this.outFolderPathTextBox, "Render outputs will go here, must be changed in Blender.");
615 | this.outFolderPathTextBox.TextChanged += new System.EventHandler(this.outFolderPathTextBox_TextChanged);
616 | //
617 | // label4
618 | //
619 | this.label4.AutoSize = true;
620 | this.label4.Location = new System.Drawing.Point(6, 14);
621 | this.label4.Name = "label4";
622 | this.label4.Size = new System.Drawing.Size(110, 13);
623 | this.label4.TabIndex = 27;
624 | this.label4.Text = ".blend\'s Output folder:";
625 | this.activeWarn.SetToolTip(this.label4, "Render outputs will go here, must be changed in Blender.");
626 | //
627 | // infoNoScenes
628 | //
629 | this.infoNoScenes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
630 | this.infoNoScenes.BackColor = System.Drawing.SystemColors.Window;
631 | this.infoNoScenes.Cursor = System.Windows.Forms.Cursors.No;
632 | this.infoNoScenes.Location = new System.Drawing.Point(351, 78);
633 | this.infoNoScenes.Name = "infoNoScenes";
634 | this.infoNoScenes.ReadOnly = true;
635 | this.infoNoScenes.Size = new System.Drawing.Size(116, 20);
636 | this.infoNoScenes.TabIndex = 26;
637 | this.infoNoScenes.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
638 | this.toolTip1.SetToolTip(this.infoNoScenes, "Number of scenes in project.");
639 | //
640 | // infoActiveScene
641 | //
642 | this.infoActiveScene.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
643 | this.infoActiveScene.BackColor = System.Drawing.SystemColors.Window;
644 | this.infoActiveScene.Cursor = System.Windows.Forms.Cursors.No;
645 | this.infoActiveScene.Location = new System.Drawing.Point(13, 80);
646 | this.infoActiveScene.Name = "infoActiveScene";
647 | this.infoActiveScene.ReadOnly = true;
648 | this.infoActiveScene.Size = new System.Drawing.Size(122, 20);
649 | this.infoActiveScene.TabIndex = 25;
650 | this.infoActiveScene.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
651 | this.activeWarn.SetToolTip(this.infoActiveScene, "This program will only render the ACTIVE scene, if you \r\nhave more then one scene" +
652 | " on your project sure you \r\nsave it with the scene you want OPEN.");
653 | //
654 | // label3
655 | //
656 | this.label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
657 | this.label3.AutoSize = true;
658 | this.label3.Location = new System.Drawing.Point(348, 61);
659 | this.label3.Name = "label3";
660 | this.label3.Size = new System.Drawing.Size(96, 13);
661 | this.label3.TabIndex = 23;
662 | this.label3.Text = "Number of scenes:";
663 | this.activeWarn.SetToolTip(this.label3, "Number of scenes in project.");
664 | //
665 | // label2
666 | //
667 | this.label2.AutoSize = true;
668 | this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.5F, System.Drawing.FontStyle.Underline);
669 | this.label2.Location = new System.Drawing.Point(28, 141);
670 | this.label2.Name = "label2";
671 | this.label2.Size = new System.Drawing.Size(39, 16);
672 | this.label2.TabIndex = 23;
673 | this.label2.Text = "Infos:";
674 | //
675 | // activeWarn
676 | //
677 | this.activeWarn.AutomaticDelay = 1000;
678 | this.activeWarn.IsBalloon = true;
679 | this.activeWarn.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Warning;
680 | this.activeWarn.ToolTipTitle = "Caution";
681 | //
682 | // toolTip1
683 | //
684 | this.toolTip1.ToolTipIcon = System.Windows.Forms.ToolTipIcon.Info;
685 | //
686 | // ajustOutDir
687 | //
688 | this.ajustOutDir.AutoSize = true;
689 | this.ajustOutDir.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
690 | this.ajustOutDir.Location = new System.Drawing.Point(111, 447);
691 | this.ajustOutDir.Name = "ajustOutDir";
692 | this.ajustOutDir.Size = new System.Drawing.Size(155, 19);
693 | this.ajustOutDir.TabIndex = 27;
694 | this.ajustOutDir.Text = "Remove FILE from path";
695 | this.toolTip1.SetToolTip(this.ajustOutDir, "If path ends in a file insted of a folder, use this to \r\npoint to intended direct" +
696 | "ory");
697 | this.ajustOutDir.UseVisualStyleBackColor = true;
698 | this.ajustOutDir.CheckedChanged += new System.EventHandler(this.ajustOutDir_CheckedChanged);
699 | //
700 | // label5
701 | //
702 | this.label5.AutoSize = true;
703 | this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.25F, System.Drawing.FontStyle.Underline);
704 | this.label5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
705 | this.label5.Location = new System.Drawing.Point(33, 374);
706 | this.label5.Name = "label5";
707 | this.label5.Size = new System.Drawing.Size(80, 20);
708 | this.label5.TabIndex = 24;
709 | this.label5.Text = "2. Joining";
710 | //
711 | // label6
712 | //
713 | this.label6.AutoSize = true;
714 | this.label6.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.25F, System.Drawing.FontStyle.Underline);
715 | this.label6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
716 | this.label6.Location = new System.Drawing.Point(33, 41);
717 | this.label6.Name = "label6";
718 | this.label6.Size = new System.Drawing.Size(103, 20);
719 | this.label6.TabIndex = 25;
720 | this.label6.Text = "1. Rendering";
721 | //
722 | // line
723 | //
724 | this.line.BackColor = System.Drawing.Color.Silver;
725 | this.line.ForeColor = System.Drawing.Color.Silver;
726 | this.line.Location = new System.Drawing.Point(142, 51);
727 | this.line.Margin = new System.Windows.Forms.Padding(0);
728 | this.line.Name = "line";
729 | this.line.Size = new System.Drawing.Size(494, 5);
730 | this.line.TabIndex = 28;
731 | this.line.Text = "███";
732 | //
733 | // line2
734 | //
735 | this.line2.BackColor = System.Drawing.Color.Silver;
736 | this.line2.ForeColor = System.Drawing.Color.Silver;
737 | this.line2.Location = new System.Drawing.Point(119, 384);
738 | this.line2.Margin = new System.Windows.Forms.Padding(0);
739 | this.line2.Name = "line2";
740 | this.line2.Size = new System.Drawing.Size(517, 5);
741 | this.line2.TabIndex = 29;
742 | this.line2.Text = "███";
743 | //
744 | // mergeAudioButton
745 | //
746 | this.mergeAudioButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
747 | this.mergeAudioButton.Location = new System.Drawing.Point(314, 500);
748 | this.mergeAudioButton.Name = "mergeAudioButton";
749 | this.mergeAudioButton.Size = new System.Drawing.Size(93, 51);
750 | this.mergeAudioButton.TabIndex = 30;
751 | this.mergeAudioButton.Text = "Merge audio *";
752 | this.mergeAudioButton.UseVisualStyleBackColor = true;
753 | this.mergeAudioButton.Click += new System.EventHandler(this.mergeAudioButton_Click);
754 | //
755 | // label7
756 | //
757 | this.label7.AutoSize = true;
758 | this.label7.Font = new System.Drawing.Font("Microsoft Sans Serif", 12.25F, System.Drawing.FontStyle.Underline);
759 | this.label7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
760 | this.label7.Location = new System.Drawing.Point(33, 468);
761 | this.label7.Name = "label7";
762 | this.label7.Size = new System.Drawing.Size(69, 20);
763 | this.label7.TabIndex = 24;
764 | this.label7.Text = "3. Audio";
765 | //
766 | // label8
767 | //
768 | this.label8.BackColor = System.Drawing.Color.Silver;
769 | this.label8.ForeColor = System.Drawing.Color.Silver;
770 | this.label8.Location = new System.Drawing.Point(119, 478);
771 | this.label8.Margin = new System.Windows.Forms.Padding(0);
772 | this.label8.Name = "label8";
773 | this.label8.Size = new System.Drawing.Size(517, 5);
774 | this.label8.TabIndex = 29;
775 | this.label8.Text = "███";
776 | //
777 | // label9
778 | //
779 | this.label9.AutoSize = true;
780 | this.label9.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
781 | this.label9.Location = new System.Drawing.Point(283, 516);
782 | this.label9.Name = "label9";
783 | this.label9.Size = new System.Drawing.Size(27, 18);
784 | this.label9.TabIndex = 31;
785 | this.label9.Text = "-->";
786 | //
787 | // label10
788 | //
789 | this.label10.AutoSize = true;
790 | this.label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
791 | this.label10.Location = new System.Drawing.Point(413, 490);
792 | this.label10.Name = "label10";
793 | this.label10.Size = new System.Drawing.Size(234, 64);
794 | this.label10.TabIndex = 31;
795 | this.label10.Text = "This button will replace the existing\r\naudio in concat_output.mp4 with\r\nthe mixed" +
796 | " down ac3 track and write the\r\nresult to audio_output.mp4";
797 | //
798 | // label11
799 | //
800 | this.label11.AutoSize = true;
801 | this.label11.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
802 | this.label11.Location = new System.Drawing.Point(9, 490);
803 | this.label11.Name = "label11";
804 | this.label11.Size = new System.Drawing.Size(162, 64);
805 | this.label11.TabIndex = 31;
806 | this.label11.Text = "This button will export only\r\nthe audio track from the\r\nblend file into a\r\nsepara" +
807 | "te ac3 file.";
808 | this.label11.TextAlign = System.Drawing.ContentAlignment.TopRight;
809 | //
810 | // label12
811 | //
812 | this.label12.AutoSize = true;
813 | this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
814 | this.label12.Location = new System.Drawing.Point(58, 571);
815 | this.label12.Name = "label12";
816 | this.label12.Size = new System.Drawing.Size(532, 36);
817 | this.label12.TabIndex = 32;
818 | this.label12.Text = "*: A console window may pop up asking for confirmation if the file already exists" +
819 | ".\r\nIn this case type in the letter y and press Enter if you wish to overwrite it" +
820 | ".";
821 | this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
822 | //
823 | // MainForm
824 | //
825 | this.AllowDrop = true;
826 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
827 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
828 | this.ClientSize = new System.Drawing.Size(655, 616);
829 | this.Controls.Add(this.label12);
830 | this.Controls.Add(this.label11);
831 | this.Controls.Add(this.label10);
832 | this.Controls.Add(this.label9);
833 | this.Controls.Add(this.mergeAudioButton);
834 | this.Controls.Add(this.label8);
835 | this.Controls.Add(this.line2);
836 | this.Controls.Add(this.line);
837 | this.Controls.Add(this.ajustOutDir);
838 | this.Controls.Add(this.label7);
839 | this.Controls.Add(this.label6);
840 | this.Controls.Add(this.label5);
841 | this.Controls.Add(this.label2);
842 | this.Controls.Add(this.infoPanel);
843 | this.Controls.Add(this.TotalTime);
844 | this.Controls.Add(this.MixdownAudio);
845 | this.Controls.Add(this.ReadBlenderData);
846 | this.Controls.Add(this.concatenatePartsButton);
847 | this.Controls.Add(this.processCountLabel);
848 | this.Controls.Add(this.processCountNumericUpDown);
849 | this.Controls.Add(this.totalFrameCountLabel);
850 | this.Controls.Add(this.prevChunkButton);
851 | this.Controls.Add(this.nextChunkButton);
852 | this.Controls.Add(this.progressLabel);
853 | this.Controls.Add(this.rendererComboBox);
854 | this.Controls.Add(this.rendererLabel);
855 | this.Controls.Add(this.partsFolderLabel);
856 | this.Controls.Add(this.blendFileLabel);
857 | this.Controls.Add(this.endFrameLabel);
858 | this.Controls.Add(this.startFrameLabel);
859 | this.Controls.Add(this.totalFrameCountNumericUpDown);
860 | this.Controls.Add(this.endFrameNumericUpDown);
861 | this.Controls.Add(this.partsFolderPathTextBox);
862 | this.Controls.Add(this.startFrameNumericUpDown);
863 | this.Controls.Add(this.blendFilePathTextBox);
864 | this.Controls.Add(this.partsFolderBrowseButton);
865 | this.Controls.Add(this.renderProgressBar);
866 | this.Controls.Add(this.blendFileBrowseButton);
867 | this.Controls.Add(this.renderAllButton);
868 | this.Controls.Add(this.renderSegmentButton);
869 | this.Controls.Add(this.menuStrip1);
870 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
871 | this.MainMenuStrip = this.menuStrip1;
872 | this.MaximizeBox = false;
873 | this.MinimumSize = new System.Drawing.Size(480, 280);
874 | this.Name = "MainForm";
875 | this.Text = "Blender Render Controller";
876 | this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.MainForm_Close);
877 | this.Load += new System.EventHandler(this.MainForm_Load);
878 | this.DragDrop += new System.Windows.Forms.DragEventHandler(this.MainForm_DragDrop);
879 | this.DragEnter += new System.Windows.Forms.DragEventHandler(this.MainForm_DragEnter);
880 | ((System.ComponentModel.ISupportInitialize)(this.startFrameNumericUpDown)).EndInit();
881 | ((System.ComponentModel.ISupportInitialize)(this.endFrameNumericUpDown)).EndInit();
882 | ((System.ComponentModel.ISupportInitialize)(this.totalFrameCountNumericUpDown)).EndInit();
883 | ((System.ComponentModel.ISupportInitialize)(this.processCountNumericUpDown)).EndInit();
884 | this.menuStrip1.ResumeLayout(false);
885 | this.menuStrip1.PerformLayout();
886 | this.infoPanel.ResumeLayout(false);
887 | this.infoPanel.PerformLayout();
888 | this.ResumeLayout(false);
889 | this.PerformLayout();
890 |
891 | }
892 |
893 | #endregion
894 |
895 | private System.Windows.Forms.Button renderSegmentButton;
896 | private System.Windows.Forms.Button blendFileBrowseButton;
897 | private System.Windows.Forms.ProgressBar renderProgressBar;
898 | private System.Windows.Forms.TextBox blendFilePathTextBox;
899 | private System.Windows.Forms.NumericUpDown startFrameNumericUpDown;
900 | private System.Windows.Forms.NumericUpDown endFrameNumericUpDown;
901 | private System.Windows.Forms.Label startFrameLabel;
902 | private System.Windows.Forms.Label endFrameLabel;
903 | private System.Windows.Forms.Label blendFileLabel;
904 | private System.Windows.Forms.Button partsFolderBrowseButton;
905 | private System.Windows.Forms.TextBox partsFolderPathTextBox;
906 | private System.Windows.Forms.Label partsFolderLabel;
907 | private System.Windows.Forms.Label rendererLabel;
908 | private System.Windows.Forms.ComboBox rendererComboBox;
909 | private System.Windows.Forms.Label progressLabel;
910 | private System.Windows.Forms.Button nextChunkButton;
911 | private System.Windows.Forms.Button prevChunkButton;
912 | private System.Windows.Forms.Label totalFrameCountLabel;
913 | private System.Windows.Forms.NumericUpDown totalFrameCountNumericUpDown;
914 | private System.Windows.Forms.NumericUpDown processCountNumericUpDown;
915 | private System.Windows.Forms.Label processCountLabel;
916 | private System.Windows.Forms.Button renderAllButton;
917 | private System.Windows.Forms.Button concatenatePartsButton;
918 | private System.Windows.Forms.Button ReadBlenderData;
919 | private System.Windows.Forms.Button MixdownAudio;
920 | private System.Windows.Forms.Label TotalTime;
921 | private System.Windows.Forms.MenuStrip menuStrip1;
922 | private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
923 | private System.Windows.Forms.Label label1;
924 | private System.Windows.Forms.Panel infoPanel;
925 | private System.Windows.Forms.Label label3;
926 | private System.Windows.Forms.Label label2;
927 | private System.Windows.Forms.TextBox infoNoScenes;
928 | private System.Windows.Forms.TextBox infoActiveScene;
929 | private System.Windows.Forms.ToolTip activeWarn;
930 | private System.Windows.Forms.ToolTip toolTip1;
931 | private System.Windows.Forms.ToolStripMenuItem tipsToolStripMenuItem;
932 | private System.Windows.Forms.ToolStripMenuItem visitGithubPageToolStripMenuItem;
933 | private System.Windows.Forms.ToolStripMenuItem isti115ToolStripMenuItem;
934 | private System.Windows.Forms.ToolStripMenuItem meTwentyFiveToolStripMenuItem;
935 | private System.Windows.Forms.ToolStripMenuItem redRaptor93ToolStripMenuItem;
936 | private System.Windows.Forms.ToolStripMenuItem jendabekToolStripMenuItem;
937 | private System.Windows.Forms.ToolStripMenuItem infoToolStripMenuItem;
938 | private System.Windows.Forms.ToolStripMenuItem jsonToolStripMenuItem;
939 | private System.Windows.Forms.ToolStripSeparator speToolStripMenuItem;
940 | private System.Windows.Forms.ToolStripMenuItem readmeToolStripMenuItem;
941 | private System.Windows.Forms.TextBox outFolderPathTextBox;
942 | private System.Windows.Forms.Label label4;
943 | private System.Windows.Forms.Label label5;
944 | private System.Windows.Forms.Label label6;
945 | private System.Windows.Forms.CheckBox ajustOutDir;
946 | private System.Windows.Forms.Label line;
947 | private System.Windows.Forms.Label line2;
948 | private System.Windows.Forms.ToolStripMenuItem autocombineToolStripMenuItem;
949 | private System.Windows.Forms.ToolStripMenuItem debugShow;
950 | private System.Windows.Forms.ToolStripMenuItem debugToolStripMenuItem;
951 | private System.Windows.Forms.ToolStripMenuItem deleteJsonToolStripMenuItem;
952 | private System.Windows.Forms.ToolStripMenuItem cMDArgsToolStripMenuItem;
953 | private System.Windows.Forms.Button mergeAudioButton;
954 | private System.Windows.Forms.Label label7;
955 | private System.Windows.Forms.Label label8;
956 | private System.Windows.Forms.Label label9;
957 | private System.Windows.Forms.Label label10;
958 | private System.Windows.Forms.Label label11;
959 | private System.Windows.Forms.Label label12;
960 | }
961 | }
962 |
963 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/MainForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Diagnostics;
6 | using System.Drawing;
7 | using System.IO;
8 | using System.Linq;
9 | using System.Text;
10 | using System.Text.RegularExpressions;
11 | using System.Threading.Tasks;
12 | using System.Windows.Forms;
13 |
14 | using System.Web.Script.Serialization;
15 |
16 | namespace BlenderRenderController
17 | {
18 |
19 | public partial class MainForm : Form
20 | {
21 | string blendFilePath;
22 | string outFolderPath;
23 | string blendProjectName = "concat_output.mp4";
24 | DateTime startTime = DateTime.MaxValue;
25 |
26 | string ScriptsPath;
27 |
28 | Timer renderAllTimer;
29 | int runningRenderProcessCount;
30 |
31 | int ErrorCode;
32 | string AltDir;
33 | // Lenth of segments, TEST
34 | int SeqFrame = 1000;
35 |
36 | public class BlenderData
37 | {
38 | public int StartFrame;
39 | public int EndFrame;
40 | public string OutputDirectory;
41 | public string ProjectName;
42 | // new
43 | public string NumScenes;
44 | public string ActiveScene;
45 | public string AltDir;
46 | public int ErrorCode;
47 | //public int SegFrame = 1000;
48 | public string RenderingEngine;
49 | }
50 |
51 |
52 | string[] args = Environment.GetCommandLineArgs();
53 |
54 |
55 | public MainForm()
56 | {
57 | InitializeComponent();
58 |
59 | //string execPath = Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().CodeBase );
60 | string execPath = new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath;
61 |
62 | ScriptsPath = Path.Combine(Path.GetDirectoryName(execPath), "Scripts");
63 | Trace.WriteLine(String.Format("Scripts Path: '{0}'", ScriptsPath));
64 | }
65 |
66 | // Deletes json on form close
67 | private void MainForm_Close(object sender, FormClosedEventArgs e)
68 | {
69 | jsonDel();
70 | }
71 |
72 | private void MainForm_Load(object sender, EventArgs e)
73 | {
74 | // Arguments
75 | if (args.Length > 1)
76 | {
77 | //test arguments
78 | //for (int i = 0; i < args.Length; i++)
79 | //{
80 | // string teste = string.Format("Arg[{0}] = [{1}] \r\n", i, args[i]);
81 | // MessageBox.Show(teste);
82 | //}
83 |
84 | // arg 1 = .blend path
85 | blendFilePath = args[1];
86 | blendFilePathTextBox.Text = blendFilePath;
87 | DoReadBlenderData();
88 | }
89 |
90 | blendFilePath = "";
91 | outFolderPath = "";
92 |
93 | renderAllTimer = new Timer();
94 | renderAllTimer.Interval = 2500;
95 | renderAllTimer.Tick += new EventHandler(updateProcessManagement);
96 |
97 | runningRenderProcessCount = 0;
98 | }
99 |
100 | private void blendFileBrowseButton_Click(object sender, EventArgs e)
101 | {
102 | var blendFileBrowseDialog = new OpenFileDialog();
103 | blendFileBrowseDialog.Filter = "Blend|*.blend";
104 |
105 | var result = blendFileBrowseDialog.ShowDialog();
106 |
107 | if (result == DialogResult.OK)
108 | {
109 | blendFilePath = blendFileBrowseDialog.FileName;
110 | blendFilePathTextBox.Text = blendFilePath;
111 | DoReadBlenderData();
112 | }
113 | }
114 |
115 | private void partsFolderBrowseButton_Click(object sender, EventArgs e)
116 | {
117 | var partsFolderBrowseDialog = new FolderBrowserDialog();
118 | //outFileBrowseDialog.Filter = "Blend|*.blend";
119 |
120 | var result = partsFolderBrowseDialog.ShowDialog();
121 |
122 | if (result == DialogResult.OK)
123 | {
124 | outFolderPath = partsFolderBrowseDialog.SelectedPath;
125 | partsFolderPathTextBox.Text = outFolderPath;
126 | }
127 | }
128 |
129 | private void outFolderPathTextBox_TextChanged(object sender, EventArgs e)
130 | {
131 | outFolderPath = partsFolderPathTextBox.Text;
132 | }
133 |
134 | private void renderSegmentButton_Click(object sender, EventArgs e)
135 | {
136 | Process p = new Process();
137 |
138 | p.StartInfo.WorkingDirectory = outFolderPath;
139 | p.StartInfo.FileName = "blender";
140 | p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
141 |
142 | //p.StartInfo.Arguments = String.Format("-b \"{0}\" -E {1} -s {2} -e {3} {4} -a ",
143 | p.StartInfo.Arguments = String.Format("-b \"{0}\" -E {1} -s {2} -e {3} -a ",
144 | blendFilePathTextBox.Text,
145 | rendererComboBox.Text,
146 | startFrameNumericUpDown.Value,
147 | endFrameNumericUpDown.Value
148 | );
149 |
150 | Trace.WriteLine(String.Format("CEW: {0}", p.StartInfo.Arguments));
151 |
152 | p.EnableRaisingEvents = true;
153 | p.Exited += new EventHandler(chunk_Finished);
154 |
155 | p.Start();
156 | runningRenderProcessCount++;
157 | }
158 |
159 | private void chunk_Finished(object sender, EventArgs e)
160 | {
161 | runningRenderProcessCount--;
162 | }
163 |
164 | private void prevChunkButton_Click(object sender, EventArgs e)
165 | {
166 | var difference = endFrameNumericUpDown.Value - startFrameNumericUpDown.Value;
167 | //difference = SegFrame;
168 | //var step = endFrameNumericUpDown.Value = startFrameNumericUpDown.Value + SegFrame;
169 | if (startFrameNumericUpDown.Value - difference < 1)
170 | {
171 | startFrameNumericUpDown.Value = 1;
172 | endFrameNumericUpDown.Value = 1 + difference;
173 | }
174 | else
175 | {
176 | endFrameNumericUpDown.Value = startFrameNumericUpDown.Value - 1;
177 | startFrameNumericUpDown.Value = endFrameNumericUpDown.Value - difference;
178 | }
179 | }
180 |
181 | private void nextChunkButton_Click(object sender, EventArgs e)
182 | {
183 | var difference = endFrameNumericUpDown.Value - startFrameNumericUpDown.Value;
184 | startFrameNumericUpDown.Value = endFrameNumericUpDown.Value + 1;
185 |
186 | if (endFrameNumericUpDown.Value + difference + 1 > totalFrameCountNumericUpDown.Value)
187 | {
188 | endFrameNumericUpDown.Value = totalFrameCountNumericUpDown.Value;
189 | }
190 | else
191 | {
192 | endFrameNumericUpDown.Value = startFrameNumericUpDown.Value + difference;
193 | }
194 | }
195 |
196 | private void renderAllButton_Click(object sender, EventArgs e)
197 | {
198 | //Becuase "clever" coding before us
199 | if (startTime == DateTime.MaxValue)
200 | {
201 | //First time, set start time
202 | startTime = DateTime.Now;
203 | TotalTime.Text = "Total Time: 00:00:00";
204 | }
205 | else
206 | {
207 | //Stopping whether finished or user intervention so show time run
208 | TimeSpan runTime = DateTime.Now - startTime;
209 | TotalTime.Text = String.Format("Total Time: {0,2:D2}:{1,2:D2}:{2,2:D2}", (int)runTime.TotalHours, runTime.Minutes, runTime.Seconds);
210 | startTime = DateTime.MaxValue;
211 | }
212 |
213 | renderAllTimer.Enabled = !renderAllTimer.Enabled;
214 | renderAllButton.Text = renderAllTimer.Enabled ? "Stop" : "Render all";
215 | }
216 |
217 | private void updateProcessManagement(object sender, EventArgs e)
218 | {
219 | if (!(startFrameNumericUpDown.Value < totalFrameCountNumericUpDown.Value))
220 | {
221 | renderAllButton_Click(sender, e);
222 | return;
223 | }
224 |
225 | renderProgressBar.Value = (int)((endFrameNumericUpDown.Value / totalFrameCountNumericUpDown.Value) * 100);
226 |
227 | TimeSpan runTime = DateTime.Now - startTime;
228 | TotalTime.Text = String.Format("Total Time: {0,2:D2}:{1,2:D2}:{2,2:D2}", (int)runTime.TotalHours, runTime.Minutes, runTime.Seconds);
229 |
230 | if (runningRenderProcessCount < processCountNumericUpDown.Value)
231 | {
232 | renderSegmentButton_Click(null, EventArgs.Empty);
233 | nextChunkButton_Click(null, EventArgs.Empty);
234 | }
235 | }
236 |
237 | private List findFiles(string folderPath, string fileSearch)
238 | {
239 | string[] partList = Directory.GetFiles(folderPath, fileSearch);
240 | Regex filePatern = new Regex(@"\d+-\d+" + Path.GetExtension(fileSearch));
241 |
242 | return partList.Where(file => filePatern.IsMatch(file)).ToList();
243 | }
244 |
245 | private void concatenatePartsButton_Click(object sender, EventArgs e)
246 | {
247 | string ffmpeg_dir = "...";
248 |
249 | switch (ajustOutDir.CheckState)
250 | {
251 | case CheckState.Checked:
252 | ffmpeg_dir = AltDir;
253 | break;
254 | case CheckState.Unchecked:
255 | ffmpeg_dir = outFolderPath;
256 | break;
257 | case CheckState.Indeterminate:
258 | break;
259 | default:
260 | ffmpeg_dir = outFolderPath;
261 | break;
262 | }
263 |
264 | if (!Directory.Exists(ffmpeg_dir))
265 | {
266 | errorMsgs(-100);
267 | return;
268 | }
269 |
270 | StreamWriter partListWriter = new StreamWriter(ffmpeg_dir + "\\partList.txt");
271 | List stringPartList = findFiles(ffmpeg_dir, "*.avi");
272 | string fileExtension = "avi";
273 | string audioFile = Path.GetFileNameWithoutExtension(blendFilePathTextBox.Text);
274 | string audioSettings = string.Empty;//"-c:a aac -b:a 256k";
275 |
276 | if (stringPartList == null || stringPartList.Count == 0)
277 | {
278 | stringPartList = findFiles(ffmpeg_dir, "*.mp4");
279 | fileExtension = "mp4";
280 | }
281 |
282 | if (File.Exists(Path.Combine(ffmpeg_dir, audioFile + ".ac3")))
283 | {
284 | audioFile = " -i " + audioFile + ".ac3";
285 | }
286 | else
287 | {
288 | audioFile = string.Empty;
289 | audioSettings = string.Empty;
290 | }
291 |
292 | stringPartList.Sort(compareParts);
293 |
294 | foreach (var currentPart in stringPartList)
295 | {
296 | partListWriter.WriteLine("file '{0}'", Path.GetFileName(currentPart));
297 | }
298 |
299 | partListWriter.Close();
300 |
301 |
302 | Process p = new Process();
303 |
304 | p.StartInfo.WorkingDirectory = ffmpeg_dir;
305 | //p.StartInfo.WorkingDirectory = AltDir;
306 | p.StartInfo.FileName = "ffmpeg";
307 | p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
308 |
309 | p.StartInfo.Arguments = String.Format("-f concat -i partList.txt {0} -c:v copy {1} concat_output.{2}",
310 | audioFile,
311 | audioSettings,
312 | fileExtension
313 | );
314 |
315 | p.Start();
316 | }
317 |
318 | public int compareParts(string a, string b)
319 | {
320 | Regex pattern = new Regex(@".*-(.*)\.(mp4|avi)");
321 |
322 | int aEnd = Convert.ToInt32(pattern.Match(a).Groups[1].Value);
323 | int bEnd = Convert.ToInt32(pattern.Match(b).Groups[1].Value);
324 |
325 | return aEnd.CompareTo(bEnd);
326 | }
327 |
328 | private void DoReadBlenderData()
329 | {
330 |
331 | if (!File.Exists(blendFilePathTextBox.Text))
332 | {
333 | // file does not exist
334 | errorMsgs(-104);
335 | return;
336 | }
337 |
338 | if (!Directory.Exists(ScriptsPath))
339 | {
340 | // Error scriptsfolder not found
341 | errorMsgs(-404);
342 | return;
343 | }
344 |
345 | Process p = new Process();
346 | //p.StartInfo.WorkingDirectory = outFolderPath;
347 | p.StartInfo.WorkingDirectory = ScriptsPath;
348 | p.StartInfo.FileName = "blender";
349 | p.StartInfo.RedirectStandardOutput = true;
350 | p.StartInfo.CreateNoWindow = true;
351 | p.StartInfo.UseShellExecute = false;
352 |
353 | p.StartInfo.Arguments = String.Format("-b \"{0}\" -P \"{1}\"",
354 | blendFilePathTextBox.Text,
355 | Path.Combine(ScriptsPath, "get_project_info.py")
356 | );
357 |
358 | try
359 | {
360 | p.Start();
361 | }
362 | catch (Exception ex)
363 | {
364 | Trace.WriteLine(ex);
365 | }
366 |
367 | StringBuilder jsonInfo = new StringBuilder();
368 | bool jsonStarted = false;
369 | int curlyStack = 0;
370 |
371 | while (!p.StandardOutput.EndOfStream)
372 | {
373 | string line = p.StandardOutput.ReadLine();
374 |
375 | if (line.Contains("{"))
376 | {
377 | jsonStarted = true;
378 | curlyStack++;
379 | }
380 |
381 | if (jsonStarted)
382 | {
383 |
384 | if (!line.ToLower().Contains("blender quit") && curlyStack > 0)
385 | {
386 | jsonInfo.AppendLine(line);
387 | }
388 |
389 | if (line.Contains("}"))
390 | {
391 |
392 | curlyStack--;
393 |
394 | if (curlyStack == 0)
395 | {
396 | jsonStarted = false;
397 | }
398 |
399 | }
400 |
401 | }
402 |
403 | }
404 |
405 | BlenderData blendData = null;
406 | if (jsonInfo.Length > 0)
407 | {
408 | JavaScriptSerializer serializer = new JavaScriptSerializer();
409 | blendData = serializer.Deserialize(jsonInfo.ToString());
410 | }
411 |
412 | if (blendData != null)
413 | {
414 |
415 | startFrameNumericUpDown.Value = blendData.StartFrame;
416 | totalFrameCountNumericUpDown.Value = blendData.EndFrame;
417 |
418 | rendererComboBox.Text = blendData.RenderingEngine;
419 |
420 | //endFrameNumericUpDown.Value = startFrameNumericUpDown.Value + endFrameNumericUpDown.Value;
421 |
422 | // Remove last bit from file path, if checked
423 | if (ajustOutDir.Checked == true)
424 | {
425 | partsFolderPathTextBox.Text = blendData.AltDir;
426 | }
427 | else
428 | {
429 | partsFolderPathTextBox.Text = outFolderPath = blendData.OutputDirectory;
430 | }
431 |
432 | outFolderPathTextBox.Text = outFolderPath = blendData.OutputDirectory;
433 | infoActiveScene.Text = blendData.ActiveScene;
434 | infoNoScenes.Text = blendData.NumScenes;
435 | AltDir = blendData.AltDir;
436 | ErrorCode = blendData.ErrorCode;
437 | //blendProjectName = blendData.ProjectName;
438 |
439 | if (blendData.EndFrame < endFrameNumericUpDown.Value)
440 | {
441 | endFrameNumericUpDown.Value = blendData.EndFrame;
442 | }
443 |
444 | }
445 | // Error checker
446 | errorMsgs(ErrorCode);
447 |
448 | //outFolderPathTextBox.Text = string.Empty;
449 |
450 | Trace.WriteLine("Json data = " + jsonInfo.ToString());
451 |
452 | //Trace.WriteLine( String.Format( "CEW: {0}", p.StartInfo.Arguments ) );
453 |
454 | }
455 |
456 | ///
457 | /// Error central, displays message and does actions
458 | /// according to given code, then returns
459 | ///
460 | ///
461 | /// same as er
462 | void errorMsgs(int er)
463 | {
464 | int input = er;
465 | // Actions
466 |
467 | // disable buttons if invalid
468 | var invalid_list = new List { -1, -2, -3, -104 };
469 | var isbad = invalid_list.Contains(input);
470 | if (isbad == true)
471 | {
472 | renderAllButton.Enabled = false;
473 | renderSegmentButton.Enabled = false;
474 | concatenatePartsButton.Enabled = false;
475 | MixdownAudio.Enabled = false;
476 | }
477 | else
478 | {
479 | renderAllButton.Enabled = true;
480 | renderSegmentButton.Enabled = true;
481 | concatenatePartsButton.Enabled = true;
482 | MixdownAudio.Enabled = true;
483 | }
484 |
485 | // Messages
486 | string message;
487 | string caption = string.Format("Error ({0})", input);
488 |
489 | if (input == -1)
490 | {
491 | message = "Output file path empty, please set a valid path in project";
492 | MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
493 | return;
494 | }
495 | else if (input == -2)
496 | {
497 | message = "Invalid Output path";
498 | MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
499 | return;
500 | }
501 | else if (input == -3)
502 | {
503 | message = "Output path is relative, you MUST use absolute paths ONLY";
504 | MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
505 | return;
506 | }
507 | else if (input == -100)
508 | {
509 | message = "FFmpeg can't find working folder";
510 | MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
511 | return;
512 | }
513 | else if (input == -104)
514 | {
515 | message = "Invalid project";
516 | MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
517 | return;
518 | }
519 | else if (input == -404)
520 | {
521 | // Error scriptsfolder not found
522 | message = "Scripts folder not found. Separate audio mixdown and automatic project info detection will not work, but you can still use the basic rendering functionality.";
523 | MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
524 | return;
525 | }
526 | else
527 | {
528 | // no problems, don't show error message
529 | return;
530 | }
531 |
532 | }
533 |
534 | private void ReadBlenderData_Click(object sender, EventArgs e)
535 | {
536 | DoReadBlenderData();
537 | }
538 |
539 | private void MixdownAudio_Click(object sender, EventArgs e)
540 | {
541 | if (!File.Exists(blendFilePathTextBox.Text))
542 | {
543 | return;
544 | }
545 |
546 | if (!Directory.Exists(ScriptsPath))
547 | {
548 | errorMsgs(-404);
549 | return;
550 | }
551 |
552 | if (!Directory.Exists(partsFolderPathTextBox.Text))
553 | {
554 | Directory.CreateDirectory(partsFolderPathTextBox.Text);
555 | }
556 |
557 | Process p = new Process();
558 |
559 | p.StartInfo.FileName = "blender";
560 | p.StartInfo.RedirectStandardOutput = true;
561 | p.StartInfo.UseShellExecute = false;
562 | //Using minimized instead so we get feedback
563 | //p.StartInfo.CreateNoWindow = true;
564 | p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
565 |
566 | p.StartInfo.Arguments = String.Format("-b \"{0}\" -P \"{1}\"",
567 | blendFilePathTextBox.Text,
568 | Path.Combine(ScriptsPath, "mixdown_audio.py")
569 | );
570 |
571 | p.Start();
572 |
573 | p.WaitForExit((int)TimeSpan.FromMinutes(5).TotalMilliseconds);
574 |
575 | Trace.WriteLine("MixDown Completed");
576 | }
577 |
578 | private void mergeAudioButton_Click(object sender, EventArgs e)
579 | {
580 | string ffmpeg_dir;
581 | if (ajustOutDir.Checked == true)
582 | {
583 | ffmpeg_dir = AltDir;
584 | }
585 | else
586 | {
587 | ffmpeg_dir = outFolderPath;
588 | }
589 | if (!Directory.Exists(ffmpeg_dir))
590 | {
591 | errorMsgs(-100);
592 | return;
593 | }
594 |
595 | string audioFile = Path.GetFileNameWithoutExtension(blendFilePathTextBox.Text);
596 |
597 | if (File.Exists(Path.Combine(ffmpeg_dir, audioFile + ".ac3")))
598 | {
599 | Process p = new Process();
600 |
601 | p.StartInfo.WorkingDirectory = ffmpeg_dir;
602 | //p.StartInfo.WorkingDirectory = AltDir;
603 | p.StartInfo.FileName = "ffmpeg";
604 | //p.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
605 |
606 | p.StartInfo.Arguments = String.Format("-i concat_output.mp4 -i {0}.ac3 -map 0:v -map 1:a -c copy -shortest audio_output.mp4", audioFile);
607 |
608 | p.Start();
609 |
610 | //p.StandardInput.WriteLine('y');
611 | }
612 | }
613 |
614 | /* About this app
615 | private void creditsToolStripMenuItem_Click(object sender, EventArgs e)
616 | {
617 | About about = new About();
618 | about.Show();
619 | }
620 | */
621 |
622 | private void tipsToolStripMenuItem_Click(object sender, EventArgs e)
623 | {
624 | // show / hide tooltips
625 | if (tipsToolStripMenuItem.Checked == false)
626 | {
627 | activeWarn.Active = false;
628 | toolTip1.Active = false;
629 | //toolTip.Active = false;
630 | }
631 | else if (tipsToolStripMenuItem.Checked == true)
632 | {
633 | activeWarn.Active = true;
634 | toolTip1.Active = true;
635 | }
636 |
637 | }
638 |
639 | private void isti115ToolStripMenuItem_Click(object sender, EventArgs e)
640 | {
641 | Process.Start("https://github.com/Isti115/BlenderRenderController");
642 | }
643 |
644 | private void meTwentyFiveToolStripMenuItem_Click(object sender, EventArgs e)
645 | {
646 | Process.Start("https://github.com/MeTwentyFive/BlenderRenderController");
647 | }
648 |
649 | private void redRaptor93ToolStripMenuItem_Click(object sender, EventArgs e)
650 | {
651 | Process.Start("https://github.com/RedRaptor93/BlenderRenderController");
652 | }
653 | private void jendabekToolStripMenuItem_Click(object sender, EventArgs e)
654 | {
655 | Process.Start("https://github.com/jendabek/BlenderRenderController");
656 | }
657 |
658 | private void jsonToolStripMenuItem_Click(object sender, EventArgs e)
659 | {
660 | json_info op = new json_info();
661 | op.Show();
662 | }
663 |
664 | private void ajustOutDir_CheckedChanged(object sender, EventArgs e)
665 | {
666 | DoReadBlenderData();
667 | }
668 |
669 | // DEBUG OPTIONS
670 | private void debugMenuToolStripMenuItem_Click(object sender, EventArgs e)
671 | {
672 | if (debugShow.Checked == false)
673 | {
674 | debugToolStripMenuItem.Visible = false;
675 | }
676 | else if (debugShow.Checked == true)
677 | {
678 | debugToolStripMenuItem.Visible = true;
679 | }
680 | }
681 |
682 | void jsonDel()
683 | {
684 | // delete json
685 | string jsonfile = Path.Combine(ScriptsPath, "blend_info.json");
686 | if (File.Exists(jsonfile))
687 | {
688 | File.Delete(jsonfile);
689 | //MessageBox.Show("Json deleted", "Ok");
690 | }
691 | else
692 | {
693 | //MessageBox.Show("Json not found", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
694 | return;
695 | }
696 |
697 | }
698 |
699 | private void deleteJsonToolStripMenuItem_Click(object sender, EventArgs e)
700 | {
701 | jsonDel();
702 | }
703 |
704 | private void MainForm_DragEnter(object sender, DragEventArgs e)
705 | {
706 | if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy;
707 | }
708 |
709 | private void MainForm_DragDrop(object sender, DragEventArgs e)
710 | {
711 | string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
712 |
713 | this.blendFilePath = files[0];
714 | this.blendFilePathTextBox.Text = this.blendFilePath;
715 |
716 | DoReadBlenderData();
717 | }
718 | }
719 | }
720 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/MainForm.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 |
121 | 244, 17
122 |
123 |
124 | 17, 17
125 |
126 |
127 | 132, 17
128 |
129 |
130 | 46
131 |
132 |
133 |
134 |
135 | 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
756 |
757 |
758 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Threading.Tasks;
5 | using System.Windows.Forms;
6 |
7 | namespace BlenderRenderController
8 | {
9 | static class Program
10 | {
11 | ///
12 | /// The main entry point for the application.
13 | ///
14 | [STAThread]
15 | static void Main()
16 | {
17 | Application.EnableVisualStyles();
18 | Application.SetCompatibleTextRenderingDefault(false);
19 | Application.Run(new MainForm());
20 | }
21 |
22 | //string[] Args = Environment.GetCommandLineArgs();
23 | //public static class ArgHolder
24 | //{
25 | // public static Args { get; set; }
26 | //}
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using 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 | [assembly: AssemblyTitle("BlenderRenderController")]
9 | [assembly: AssemblyDescription("Contributors:")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("BlenderRenderController")]
13 | [assembly: AssemblyCopyright("Copyright © 2016")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("b050dd69-b2be-4f42-8d4e-23b7a7eff2e5")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("0.5.0.0")]
36 | [assembly: AssemblyFileVersion("0.5.0.0")]
37 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.34209
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace BlenderRenderController.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
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 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BlenderRenderController.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/Properties/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 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.34209
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace BlenderRenderController.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/Scripts/get_project_info.py:
--------------------------------------------------------------------------------
1 | import os
2 | import json
3 | import bpy
4 | import re
5 | from bpy import context
6 | from bpy import ops
7 | from bpy import data
8 |
9 | blendPath = bpy.context.blend_data.filepath;
10 | projName = bpy.path.display_name_from_filepath( blendPath );
11 |
12 | # get number of Scenes and active scene name
13 | n_data = bpy.data.scenes
14 | a_data = bpy.context.scene
15 |
16 | # get values from strings
17 | N_of_Scenes = str(n_data).partition('[')[-1].rpartition(']')[0]
18 | ActiveScene = str(a_data).partition('("')[-1].rpartition('")')[0]
19 |
20 | # set infos acording to active Scene
21 | startFrame = bpy.data.scenes[ActiveScene].frame_start
22 | endFrame = bpy.data.scenes[ActiveScene].frame_end
23 | outputPath = bpy.data.scenes[ActiveScene].render.filepath
24 |
25 | # get rendering engine
26 | renderingEngine = bpy.context.scene.render.engine
27 |
28 | """
29 | Error code table:
30 | 0: no errors
31 | -1: output unset, lenth = 0
32 | -2: output invalid, no slashes in path
33 | -3: output is relative, has // at start
34 | """
35 |
36 | # check if relative
37 | rel_chk = outputPath[0:2]
38 |
39 | if len(outputPath) == 0:
40 | errorcode = -1
41 |
42 | elif outputPath.count("\\") == 0:
43 | errorcode = -2
44 |
45 | elif rel_chk == "//":
46 | errorcode = -3
47 |
48 | else:
49 | errorcode = 0
50 |
51 | # os.path.isabs(my_path) | true = absolute, false = relative
52 |
53 | # get output dir minus file name
54 | altdir = str(outputPath).rpartition('\\')[:-1][0]
55 |
56 | #print( "Proj Name: %s\n" % (projName) )
57 | #print( "Start: %s\n" % (startFrame) )
58 | #print( "end: %s\n" % (endFrame) )
59 |
60 | data = { 'ProjectName': projName, 'StartFrame': startFrame, 'EndFrame': endFrame, 'OutputDirectory': outputPath,
61 | 'NumScenes': N_of_Scenes, 'ActiveScene': ActiveScene, 'AltDir': altdir, 'ErrorCode': errorcode,
62 | 'RenderingEngine': renderingEngine };
63 |
64 | jsonData = json.dumps(data, indent=4, skipkeys=True, sort_keys=True);
65 |
66 |
67 | with open('blend_info.json', 'w') as f:
68 | print(jsonData, file=f)
69 |
70 | print(jsonData);
71 |
72 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/Scripts/mixdown_audio.py:
--------------------------------------------------------------------------------
1 | import os
2 | import json
3 | import bpy
4 | from bpy import context
5 | from bpy import ops
6 |
7 | blendPath = bpy.context.blend_data.filepath;
8 | projName = bpy.path.display_name_from_filepath( blendPath );
9 |
10 | # get active scene name
11 | a_data = bpy.context.scene
12 | ActiveScene = str(a_data).partition('("')[-1].rpartition('")')[0]
13 |
14 | outputPath = bpy.data.scenes[ActiveScene].render.filepath
15 |
16 | #outputPath = bpy.data.scenes["Scene"].render.filepath
17 |
18 | bpy.ops.sound.mixdown( filepath=outputPath + "\\" + projName + ".ac3",
19 | container='AC3',
20 | codec='AC3',
21 | accuracy=1024,
22 | bitrate=512,
23 | format="F32",
24 | split_channels=False);
25 |
26 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/Settings.cs:
--------------------------------------------------------------------------------
1 | namespace BlenderRenderController.Properties {
2 |
3 |
4 | // This class allows you to handle specific events on the settings class:
5 | // The SettingChanging event is raised before a setting's value is changed.
6 | // The PropertyChanged event is raised after a setting's value is changed.
7 | // The SettingsLoaded event is raised after the setting values are loaded.
8 | // The SettingsSaving event is raised before the setting values are saved.
9 | internal sealed partial class Settings {
10 |
11 | public Settings() {
12 | // // To add event handlers for saving and changing settings, uncomment the lines below:
13 | //
14 | // this.SettingChanging += this.SettingChangingEventHandler;
15 | //
16 | // this.SettingsSaving += this.SettingsSavingEventHandler;
17 | //
18 | }
19 |
20 | private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
21 | // Add code to handle the SettingChangingEvent event here.
22 | }
23 |
24 | private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
25 | // Add code to handle the SettingsSaving event here.
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/json_info.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace BlenderRenderController
2 | {
3 | partial class json_info
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.label1 = new System.Windows.Forms.Label();
32 | this.textBox1 = new System.Windows.Forms.TextBox();
33 | this.button1 = new System.Windows.Forms.Button();
34 | this.SuspendLayout();
35 | //
36 | // label1
37 | //
38 | this.label1.AutoSize = true;
39 | this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
40 | this.label1.Location = new System.Drawing.Point(14, 10);
41 | this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
42 | this.label1.Name = "label1";
43 | this.label1.Size = new System.Drawing.Size(137, 20);
44 | this.label1.TabIndex = 0;
45 | this.label1.Text = "Json file contents:";
46 | //
47 | // textBox1
48 | //
49 | this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
50 | | System.Windows.Forms.AnchorStyles.Left)
51 | | System.Windows.Forms.AnchorStyles.Right)));
52 | this.textBox1.Location = new System.Drawing.Point(14, 37);
53 | this.textBox1.Margin = new System.Windows.Forms.Padding(4);
54 | this.textBox1.Multiline = true;
55 | this.textBox1.Name = "textBox1";
56 | this.textBox1.ReadOnly = true;
57 | this.textBox1.Size = new System.Drawing.Size(302, 207);
58 | this.textBox1.TabIndex = 1;
59 | this.textBox1.TabStop = false;
60 | this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
61 | //
62 | // button1
63 | //
64 | this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
65 | | System.Windows.Forms.AnchorStyles.Right)));
66 | this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
67 | this.button1.Location = new System.Drawing.Point(108, 251);
68 | this.button1.Margin = new System.Windows.Forms.Padding(4);
69 | this.button1.Name = "button1";
70 | this.button1.Size = new System.Drawing.Size(94, 36);
71 | this.button1.TabIndex = 2;
72 | this.button1.Text = "Refresh";
73 | this.button1.UseVisualStyleBackColor = true;
74 | this.button1.Click += new System.EventHandler(this.button1_Click);
75 | //
76 | // json_info
77 | //
78 | this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
79 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
80 | this.ClientSize = new System.Drawing.Size(332, 301);
81 | this.Controls.Add(this.button1);
82 | this.Controls.Add(this.textBox1);
83 | this.Controls.Add(this.label1);
84 | this.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
85 | this.Margin = new System.Windows.Forms.Padding(4);
86 | this.Name = "json_info";
87 | this.Text = "Json";
88 | this.Load += new System.EventHandler(this.debug_Load);
89 | this.ResumeLayout(false);
90 | this.PerformLayout();
91 |
92 | }
93 |
94 | #endregion
95 |
96 | private System.Windows.Forms.Label label1;
97 | private System.Windows.Forms.Button button1;
98 | public System.Windows.Forms.TextBox textBox1;
99 | }
100 | }
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/json_info.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Data;
5 | using System.Drawing;
6 | using System.IO;
7 | using System.Linq;
8 | using System.Text;
9 | using System.Threading.Tasks;
10 | using System.Windows.Forms;
11 |
12 | namespace BlenderRenderController
13 | {
14 | public partial class json_info : Form
15 | {
16 | string ScriptsPath;
17 | string jsonfile;
18 |
19 | public class BlenderData
20 | {
21 | public int StartFrame;
22 | public int EndFrame;
23 | public string OutputDirectory;
24 | public string ProjectName;
25 | public string NumScenes;
26 | public string ActiveScene;
27 | }
28 |
29 | public json_info()
30 | {
31 | InitializeComponent();
32 |
33 | string execPath = new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath;
34 | ScriptsPath = Path.Combine(Path.GetDirectoryName(execPath), "Scripts");
35 | jsonfile = Path.Combine(ScriptsPath, "blend_info.json");
36 | }
37 |
38 | private void debug_Load(object sender, EventArgs e)
39 | {
40 |
41 | if (!File.Exists(jsonfile))
42 | {
43 | textBox1.Text = "Json file not found!";
44 | }
45 | else
46 | {
47 | textBox1.Text = File.ReadAllText(jsonfile);
48 | }
49 | }
50 |
51 | private void button1_Click(object sender, EventArgs e)
52 | {
53 |
54 | if (!File.Exists(jsonfile))
55 | {
56 | return;
57 | }
58 | else
59 | {
60 | textBox1.Text = File.ReadAllText(jsonfile);
61 | }
62 | //textBox1.Text = File.ReadAllText(jsonfile);
63 | }
64 |
65 | private void textBox1_TextChanged(object sender, EventArgs e)
66 | {
67 |
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/json_info.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 |
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/resources/blender-icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/isti115/BlenderRenderController/9f3434326ea9b0f223934d354762ccb417253340/BlenderRenderController/BlenderRenderController/resources/blender-icon.ico
--------------------------------------------------------------------------------
/BlenderRenderController/BlenderRenderController/resources/icon.txt:
--------------------------------------------------------------------------------
1 | Icon source:
2 | http://www.iconarchive.com/show/real-vista-electrical-appliances-icons-by-iconshock/blender-icon.html
3 |
4 | re-color by RedRaptor93
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 István Donkó
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Blender Render Controller
2 |
3 | Original post by me on Blender StackExchange: http://blender.stackexchange.com/a/44906/20611
4 |
5 | ## UPDATE:
6 |
7 | This program has been more or less deprecated, since **multithreaded rendering is now natively implemented in blender for the video sequence editor**, but since this project allows a more granular approach for setting up chunks and the number of threads, it could still be useful for:
8 | * Rendering on multiple machines and stitching the results together afterwards (for which copying them into a single folder and using this program's functionality is enough)
9 | * Rendering in the background without using up all the resources of the computer
10 |
11 | Because of these I will still leave it up here, but won't necessarily provide updates / support for it. The latest version I have tested with is Blender 2.9, for which the installation path has changed a little bit, but after updating the environmental variables it seems to work perfectly fine.
12 |
13 | ### Warning! This repository is not really well maintained, I recommend checking out mikeycal's script instead for a more active project:
14 | https://github.com/mikeycal/the-video-editors-render-script-for-blender
15 |
16 | If you would still like to use this app instead, I've implemented a quick fix in v0.5 for blender 2.8 (tested on the 2.83 LTS release) to get the rendering engine from the project `.blend` file, as in 2.8 the `BLENDER_RENDERER` was removed and `EEVEE` was introduced.
17 |
18 | ## Thanks to
19 |
20 | * [MeTwentyFive](https://github.com/MeTwentyFive/BlenderRenderController) for the initial update.
21 | * [RedRaptor93](https://github.com/RedRaptor93/BlenderRenderController/) for adding features and writing the first version of this README.
22 | * [jendabek](https://github.com/jendabek/BlenderRenderController) for the separate development. His changes are not merged into the release, so make sure to check them out as well at his repository!
23 |
24 | # Below is the README written by RedRaptor93 and modified by me (Isti115) for `Release v0.4`
25 |
26 | ## What is this?
27 | Blender Render Controller is a tool to help speed up the render process in Blender's Video Sequence Editor(VSE).
28 |
29 | VSE is pretty good for editing videos, it's precise and relatively easy to learn, making it a compelling choice next to other free video editing tools. There are some downsides too, main of which been that the renderer is SINGLE THREADED. Meaning that it won't take full advantage of all logical cores in your system, so rendering your finished project is SUPER SLOW compared to other video editors.
30 |
31 | This tool offers a work-around until the Blender developers make a better renderer for VSE,
32 |
33 | This tool offers a work-around by calling multiple instances of `blender.exe`, each rendering a different segment of the project at the same time, making use of processing power that would otherwise go unused. After all parts are rendered, join them together and BAM, your video is ready much faster then previously possible.
34 |
35 | ## How much difference does it make?
36 | Quite a lot! I did some testing shown below (Blender Render Controller shown in orange):
37 |
38 | 
39 |
40 | 
41 |
42 | PC used: i7 4790, 16GB DDR3 RAM @ 1600Mhz
43 |
44 | Really shows the importance of those extra cores huh? Even if you don't use Blender VSE often, that’s a LOT of time saved. And the time added by joining the videos together is negligible (less then 1min).
45 |
46 | ## HOW TO USE
47 |
48 | ### Dependencies
49 | - Blender, obviously
50 | - FFmpeg, required for joining the parts together.
51 |
52 | 1. Save your .blend file with the settings you want (output path, resolution, etc)
53 |
54 | - Make sure the "output path" is an ABSOLUTE path and not relative, you can change the default kind of path in Blender's user settings, BRC WON'T work w/ relative paths
55 |
56 | 2. Open BlenderRenderController, browse for the desired blend file
57 |
58 | - Alternatively, you can drop the .blend file onto the window or specify it as a command line argument:
59 | `> BlenderRenderController.exe "myProjectFile.blend"`
60 |
61 | 3. Select the chunk of the segment you want to render and press "render segment" to render a single segment or select "render all" to render the project in segments.
62 |
63 | - The length of each segment is controlled by the difference between the "Start Frame" and "End frame" values.
64 | [Only in RedRaptor's version: The default length when you open or re-read a file can be adjusted ("segment length" in Options => Settings)]
65 |
66 | 4. When all the parts are done, click "Concatenate parts" to join all parts together
67 |
68 | - If you get a "Can't find working folder error", try "remove file from path" option below, "parts folder" must point to a FOLDER, not a FILE.
69 |
70 | 5. If you find that the sound glitches at the concatenation points you should export the audio separately and then merge it with the video file afterwards with the labeled buttons in section __3. Audio__ of the program.
71 |
72 | 6. That's it! Hopefully you found this useful!
73 | If so, don't forget to star the repository and upvote the [StackExchange answer](http://blender.stackexchange.com/a/44906/20611) so more people can find it! :)
74 | ---
75 | ### Cross-platform alternative
76 | Mikeycal Meyers wrote his own python script as a cross-platform solution for the problem.
77 | You can find his explanation about it here:
78 | https://youtu.be/rgwP5L1bICk
79 | and the actual project here:
80 | https://github.com/mikeycal/the-video-editors-render-script-for-blender
81 | Make sure to check his work out as well, and help him improve it if you know some python! ;)
82 |
--------------------------------------------------------------------------------