Skip to content

Commit 6dbcaea

Browse files
committed
Blender: Trigger rendering from command line
1 parent 7281835 commit 6dbcaea

21 files changed

+115
-211
lines changed

src/blender/scripts/blinds.py

+2-10
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ def load_font(font_path):
8282
# ----------------------------------------------------------------------------
8383

8484
# Modify Text / Curve settings
85-
#print (bpy.data.curves.keys())
8685
text_object = bpy.data.curves["Title"]
8786
text_object.extrude = params["extrude"]
8887
text_object.bevel_depth = params["bevel_depth"]
@@ -141,12 +140,5 @@ def load_font(font_path):
141140
bpy.context.scene.render.frame_map_new = length_multiplier
142141

143142
# Set render length/position
144-
if "preview_frame" in params:
145-
bpy.context.scene.frame_start = params["preview_frame"]
146-
bpy.context.scene.frame_end = params["preview_frame"]
147-
else:
148-
bpy.context.scene.frame_start = params["start_frame"]
149-
bpy.context.scene.frame_end = new_length
150-
151-
# Render the current animation to the params["output_path"] folder
152-
bpy.ops.render.render(animation=params["animation"])
143+
bpy.context.scene.frame_start = params["start_frame"]
144+
bpy.context.scene.frame_end = new_length

src/blender/scripts/blur.py

+2-10
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ def load_font(font_path):
8484
# ----------------------------------------------------------------------------
8585

8686
# Modify Text / Curve settings
87-
#print (bpy.data.curves.keys())
8887
text_object = bpy.data.curves["Text"]
8988
text_object.extrude = params["extrude"]
9089
text_object.bevel_depth = params["bevel_depth"]
@@ -138,12 +137,5 @@ def load_font(font_path):
138137
bpy.context.scene.render.frame_map_new = length_multiplier
139138

140139
# Set render length/position
141-
if "preview_frame" in params:
142-
bpy.context.scene.frame_start = params["preview_frame"]
143-
bpy.context.scene.frame_end = params["preview_frame"]
144-
else:
145-
bpy.context.scene.frame_start = params["start_frame"]
146-
bpy.context.scene.frame_end = new_length
147-
148-
# Render the current animation to the params["output_path"] folder
149-
bpy.ops.render.render(animation=params["animation"])
140+
bpy.context.scene.frame_start = params["start_frame"]
141+
bpy.context.scene.frame_end = new_length

src/blender/scripts/colors.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -261,12 +261,5 @@ def load_font(font_path):
261261
bpy.context.scene.render.frame_map_new = length_multiplier
262262

263263
# Set render length/position
264-
if "preview_frame" in params:
265-
bpy.context.scene.frame_start = params["preview_frame"]
266-
bpy.context.scene.frame_end = params["preview_frame"]
267-
else:
268-
bpy.context.scene.frame_start = params["start_frame"]
269-
bpy.context.scene.frame_end = new_length
270-
271-
# Render the current animation to the params["output_path"] folder
272-
bpy.ops.render.render(animation=params["animation"])
264+
bpy.context.scene.frame_start = params["start_frame"]
265+
bpy.context.scene.frame_end = new_length

src/blender/scripts/dissolve.py

+14-11
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
# run from the context of Blender. Blender contains its own version of Python
2222
# with this library pre-installed.
2323
import bpy
24-
from bpy.props import *
2524

2625
from math import pi
2726

@@ -115,8 +114,8 @@ def createDissolveText(title, extrude, bevel_depth, spacemode, textsize, width,
115114
# Particle parameters
116115
ActiveObjectText.particle_systems[0].settings.count = NbQuads
117116
ActiveObjectText.particle_systems[0].settings.frame_start = 10
118-
ActiveObjectText.particle_systems[0].settings.frame_end = int(frame_count * 0.75 - 10)
119-
ActiveObjectText.particle_systems[0].settings.lifetime = int(frame_count * 0.25 + 10)
117+
ActiveObjectText.particle_systems[0].settings.frame_end = 60
118+
ActiveObjectText.particle_systems[0].settings.lifetime = 80
120119
ActiveObjectText.particle_systems[0].point_cache.frame_step = 1
121120
ActiveObjectText.particle_systems[0].settings.normal_factor = 0.0
122121
# not useful
@@ -307,13 +306,17 @@ def createDissolveText(title, extrude, bevel_depth, spacemode, textsize, width,
307306
# Unbake particle cache
308307
bpy.ops.ptcache.free_bake_all()
309308

309+
# Animation Speed (use Blender's time remapping to slow or speed up animation)
310+
length_multiplier = int(params["length_multiplier"]) # time remapping multiplier
311+
new_length = int(params["end_frame"]) * length_multiplier # new length (in frames)
312+
bpy.context.scene.render.frame_map_old = 1
313+
bpy.context.scene.render.frame_map_new = length_multiplier
314+
310315
# Set render length/position
311-
if "preview_frame" in params:
312-
bpy.context.scene.frame_start = params["preview_frame"]
313-
bpy.context.scene.frame_end = params["preview_frame"]
314-
else:
315-
bpy.context.scene.frame_start = params["start_frame"]
316-
bpy.context.scene.frame_end = frame_count
316+
bpy.context.scene.frame_start = params["start_frame"]
317+
bpy.context.scene.frame_end = new_length
317318

318-
# Render the current animation to the params["output_path"] folder
319-
bpy.ops.render.render(animation=params["animation"])
319+
# Set render length/position
320+
if "preview_frame" not in params:
321+
# bake dynamics : take time but needed before rendering animation
322+
bpy.ops.ptcache.bake_all()

src/blender/scripts/earth.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -284,12 +284,5 @@ def check_longitude(depart_longitude, arrive_longitude):
284284
bpy.context.scene.render.frame_map_new = length_multiplier
285285

286286
# Set render length/position
287-
if "preview_frame" in params:
288-
bpy.context.scene.frame_start = params["preview_frame"]
289-
bpy.context.scene.frame_end = params["preview_frame"]
290-
else:
291-
bpy.context.scene.frame_start = params["start_frame"]
292-
bpy.context.scene.frame_end = new_length
293-
294-
# Render the current animation to the params["output_path"] folder
295-
bpy.ops.render.render(animation=params["animation"])
287+
bpy.context.scene.frame_start = params["start_frame"]
288+
bpy.context.scene.frame_end = new_length

src/blender/scripts/explode.py

+30-28
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,16 @@ def load_font(font_path):
4141
return None
4242

4343

44-
def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, textsize, width, font, ground):
44+
def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode,
45+
textsize, width, font, ground, frame_count):
4546
""" Create aned animate the exploding texte """
4647

4748
newText = title
4849
# create text
49-
bpy.ops.object.text_add(radius=1.0, enter_editmode=False, align='WORLD', location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0))
50+
bpy.ops.object.text_add(
51+
radius=1.0, enter_editmode=False, align='WORLD',
52+
location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0)
53+
)
5054
newtext = bpy.context.view_layer.objects.active
5155

5256
# modifying the text
@@ -66,7 +70,11 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
6670

6771
# rotating text
6872
# angles are in radians
69-
#bpy.ops.transform.rotate(value=(pi/2,), axis=(1.0, 0.0, 0.0), constraint_axis=(False, False, False), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False, snap_normal=(0, 0, 0), release_confirm=False)
73+
# bpy.ops.transform.rotate(value=(pi/2,), axis=(1.0, 0.0, 0.0), constraint_axis=(False, False, False),
74+
# constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH',
75+
# proportional_size=1, snap=False, snap_target='CLOSEST', snap_point=(0, 0, 0), snap_align=False,
76+
# snap_normal=(0, 0, 0), release_confirm=False)
77+
7078
# second solution
7179
newtext.rotation_euler[0] = pi / 2 # xaxis
7280
newtext.rotation_euler[1] = 0.0 # yaxis
@@ -86,15 +94,18 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
8694
bpy.ops.object.modifier_add(type='SOLIDIFY')
8795

8896
# apply quick explode
89-
bpy.ops.object.quick_explode(style='EXPLODE', amount=100, frame_duration=50, frame_start=1, frame_end=51, velocity=1, fade=True)
97+
bpy.ops.object.quick_explode(
98+
style='EXPLODE', amount=100, frame_duration=50,
99+
frame_start=1, frame_end=51, velocity=1, fade=True
100+
)
90101

91102
# modifying Particle System
92103
# emitfrom
93104
newtext.particle_systems[0].settings.emit_from = 'VERT'
94105
# particle number
95106
newtext.particle_systems[0].settings.count = particle_number
96107
# particle lifetime
97-
newtext.particle_systems[0].settings.lifetime = 200 # 200 +48 > 150 ;-)z
108+
newtext.particle_systems[0].settings.lifetime = 200 # 200 + 48 > 150
98109
# start/end explosion
99110
newtext.particle_systems[0].settings.frame_end = 48
100111
newtext.particle_systems[0].settings.frame_start = 48
@@ -134,15 +145,12 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
134145
bpy.ops.object.modifier_remove(modifier="Collision")
135146
bpy.data.objects['Ground'].hide_render = True
136147

137-
bpy.ops.ptcache.free_bake_all() # erase baked dynamics
138-
bpy.ops.ptcache.bake_all() # bake dynamics : take time but needed before rendering animation
139-
140-
141148
# Debug Info:
142149
# ./blender -b test.blend -P demo.py
143150
# -b = background mode
144151
# -P = run a Python script within the context of the project file
145152

153+
146154
# Init all of the variables needed by this script. Because Blender executes
147155
# this script, OpenShot will inject a dictionary of the required parameters
148156
# before this script is executed.
@@ -182,16 +190,7 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
182190
# ----------------------------------------------------------------------------
183191

184192
# Modify Text / Curve settings
185-
#print (bpy.data.curves.keys())
186-
187-
188-
#text_object = bpy.data.curves["txtName1"]
189-
#text_object.extrude = params["extrude"]
190-
#text_object.bevel_depth = params["bevel_depth"]
191-
#text_object.body = params["title"]
192-
#text_object.align = params["spacemode"]
193-
#text_object.size = params["text_size"]
194-
#text_object.space_character = params["width"]
193+
# print (bpy.data.curves.keys())
195194

196195
# Get font object
197196
font = None
@@ -202,10 +201,14 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
202201
# Get default font
203202
font = bpy.data.fonts["Bfont"]
204203

204+
# Compute animation length
205+
length_multiplier = int(params["length_multiplier"]) # time remapping multiplier
206+
frame_count = int(params["end_frame"]) * length_multiplier # new length (in frames)
207+
205208
createExplodeTxt(
206209
params["title"], params["particle_number"], params["extrude"],
207210
params["bevel_depth"], params["spacemode"], params["text_size"],
208-
params["width"], font, params["ground_on_off"]
211+
params["width"], font, params["ground_on_off"], frame_count
209212
)
210213

211214
# Change the material settings (color, alpha, etc...)
@@ -230,19 +233,18 @@ def createExplodeTxt(title, particle_number, extrude, bevel_depth, spacemode, te
230233
bpy.context.scene.render.resolution_y = params["resolution_y"]
231234
bpy.context.scene.render.resolution_percentage = params["resolution_percentage"]
232235

236+
bpy.ops.ptcache.free_bake_all() # erase baked dynamics
237+
233238
# Animation Speed (use Blender's time remapping to slow or speed up animation)
234239
length_multiplier = int(params["length_multiplier"]) # time remapping multiplier
235240
new_length = int(params["end_frame"]) * length_multiplier # new length (in frames)
236241
bpy.context.scene.render.frame_map_old = 1
237242
bpy.context.scene.render.frame_map_new = length_multiplier
238243

239244
# Set render length/position
240-
if "preview_frame" in params:
241-
bpy.context.scene.frame_start = params["preview_frame"]
242-
bpy.context.scene.frame_end = params["preview_frame"]
243-
else:
244-
bpy.context.scene.frame_start = params["start_frame"]
245-
bpy.context.scene.frame_end = new_length
245+
bpy.context.scene.frame_start = params["start_frame"]
246+
bpy.context.scene.frame_end = new_length
246247

247-
# Render the current animation to the params["output_path"] folder
248-
bpy.ops.render.render(animation=params["animation"])
248+
if "preview_frame" not in params:
249+
# bake dynamics : take time but needed before rendering animation
250+
bpy.ops.ptcache.bake_all()

src/blender/scripts/fly_by_1.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,5 @@ def load_font(font_path):
131131
bpy.context.scene.render.frame_map_new = length_multiplier
132132

133133
# Set render length/position
134-
if "preview_frame" in params:
135-
bpy.context.scene.frame_start = params["preview_frame"]
136-
bpy.context.scene.frame_end = params["preview_frame"]
137-
else:
138-
bpy.context.scene.frame_start = params["start_frame"]
139-
bpy.context.scene.frame_end = new_length
140-
141-
# Render the current animation to the params["output_path"] folder
142-
bpy.ops.render.render(animation=params["animation"])
134+
bpy.context.scene.frame_start = params["start_frame"]
135+
bpy.context.scene.frame_end = new_length

src/blender/scripts/fly_by_two_titles.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,5 @@ def load_font(font_path):
140140
bpy.context.scene.render.frame_map_new = length_multiplier
141141

142142
# Set render length/position
143-
if "preview_frame" in params:
144-
bpy.context.scene.frame_start = params["preview_frame"]
145-
bpy.context.scene.frame_end = params["preview_frame"]
146-
else:
147-
bpy.context.scene.frame_start = params["start_frame"]
148-
bpy.context.scene.frame_end = new_length
149-
150-
# Render the current animation to the params["output_path"] folder
151-
bpy.ops.render.render(animation=params["animation"])
143+
bpy.context.scene.frame_start = params["start_frame"]
144+
bpy.context.scene.frame_end = new_length

src/blender/scripts/glare.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,5 @@ def load_font(font_path):
135135
bpy.context.scene.render.frame_map_new = length_multiplier
136136

137137
# Set render length/position
138-
if "preview_frame" in params:
139-
bpy.context.scene.frame_start = params["preview_frame"]
140-
bpy.context.scene.frame_end = params["preview_frame"]
141-
else:
142-
bpy.context.scene.frame_start = params["start_frame"]
143-
bpy.context.scene.frame_end = new_length
144-
145-
# Render the current animation to the params["output_path"] folder
146-
bpy.ops.render.render(animation=params["animation"])
138+
bpy.context.scene.frame_start = params["start_frame"]
139+
bpy.context.scene.frame_end = new_length

src/blender/scripts/glass_slider.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -162,12 +162,5 @@ def load_font(font_path):
162162
bpy.context.scene.render.frame_map_new = length_multiplier
163163

164164
# Set render length/position
165-
if "preview_frame" in params:
166-
bpy.context.scene.frame_start = params["preview_frame"]
167-
bpy.context.scene.frame_end = params["preview_frame"]
168-
else:
169-
bpy.context.scene.frame_start = params["start_frame"]
170-
bpy.context.scene.frame_end = new_length
171-
172-
# Render the current animation to the params["output_path"] folder
173-
bpy.ops.render.render(animation=params["animation"])
165+
bpy.context.scene.frame_start = params["start_frame"]
166+
bpy.context.scene.frame_end = new_length

src/blender/scripts/lens_flare.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,5 @@
132132
bpy.context.scene.render.frame_map_new = length_multiplier
133133

134134
# Set render length/position
135-
if "preview_frame" in params:
136-
bpy.context.scene.frame_start = params["preview_frame"]
137-
bpy.context.scene.frame_end = params["preview_frame"]
138-
else:
139-
bpy.context.scene.frame_start = params["start_frame"]
140-
bpy.context.scene.frame_end = new_length
141-
142-
# Render the current animation to the params["output_path"] folder
143-
bpy.ops.render.render(animation=params["animation"])
135+
bpy.context.scene.frame_start = params["start_frame"]
136+
bpy.context.scene.frame_end = new_length

src/blender/scripts/magic_wand.py

+8-9
Original file line numberDiff line numberDiff line change
@@ -128,19 +128,18 @@
128128
bpy.context.scene.render.resolution_y = params["resolution_y"]
129129
bpy.context.scene.render.resolution_percentage = params["resolution_percentage"]
130130

131+
# Clear particle cache before remapping
132+
bpy.ops.ptcache.free_bake_all()
133+
131134
# Animation Speed (use Blender's time remapping to slow or speed up animation)
132135
length_multiplier = int(params["length_multiplier"]) # time remapping multiplier
133136
new_length = int(params["end_frame"]) * length_multiplier # new length (in frames)
134137
bpy.context.scene.render.frame_map_old = 1
135138
bpy.context.scene.render.frame_map_new = length_multiplier
136139

137140
# Set render length/position
138-
if "preview_frame" in params:
139-
bpy.context.scene.frame_start = params["preview_frame"]
140-
bpy.context.scene.frame_end = params["preview_frame"]
141-
else:
142-
bpy.context.scene.frame_start = params["start_frame"]
143-
bpy.context.scene.frame_end = new_length
144-
145-
# Render the current animation to the params["output_path"] folder
146-
bpy.ops.render.render(animation=params["animation"])
141+
bpy.context.scene.frame_start = params["start_frame"]
142+
bpy.context.scene.frame_end = new_length
143+
144+
if "preview_frame" not in params:
145+
bpy.ops.ptcache.bake_all()

src/blender/scripts/neon_curves.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,5 @@ def load_font(font_path):
150150
bpy.context.scene.render.frame_map_new = length_multiplier
151151

152152
# Set render length/position
153-
if "preview_frame" in params:
154-
bpy.context.scene.frame_start = params["preview_frame"]
155-
bpy.context.scene.frame_end = params["preview_frame"]
156-
else:
157-
bpy.context.scene.frame_start = params["start_frame"]
158-
bpy.context.scene.frame_end = new_length
159-
160-
# Render the current animation to the params["output_path"] folder
161-
bpy.ops.render.render(animation=params["animation"])
153+
bpy.context.scene.frame_start = params["start_frame"]
154+
bpy.context.scene.frame_end = new_length

src/blender/scripts/picture_frames_4.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,5 @@ def get_scale_values(height, width):
166166
bpy.context.scene.render.frame_map_new = length_multiplier
167167

168168
# Set render length/position
169-
if "preview_frame" in params:
170-
bpy.context.scene.frame_start = params["preview_frame"]
171-
bpy.context.scene.frame_end = params["preview_frame"]
172-
else:
173-
bpy.context.scene.frame_start = params["start_frame"]
174-
bpy.context.scene.frame_end = new_length
175-
176-
# Render the current animation to the params["output_path"] folder
177-
bpy.ops.render.render(animation=params["animation"])
169+
bpy.context.scene.frame_start = params["start_frame"]
170+
bpy.context.scene.frame_end = new_length

src/blender/scripts/rotate_360.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,5 @@ def load_font(font_path):
131131
bpy.context.scene.render.frame_map_new = length_multiplier
132132

133133
# Set render length/position
134-
if "preview_frame" in params:
135-
bpy.context.scene.frame_start = params["preview_frame"]
136-
bpy.context.scene.frame_end = params["preview_frame"]
137-
else:
138-
bpy.context.scene.frame_start = params["start_frame"]
139-
bpy.context.scene.frame_end = new_length
140-
141-
# Render the current animation to the params["output_path"] folder
142-
bpy.ops.render.render(animation=params["animation"])
134+
bpy.context.scene.frame_start = params["start_frame"]
135+
bpy.context.scene.frame_end = new_length

0 commit comments

Comments
 (0)