add generic templates

This commit is contained in:
ChristopheSeux
2024-04-16 14:28:02 +02:00
parent 2960bab63d
commit 0055e0f39e
11 changed files with 343 additions and 116 deletions
+28 -13
View File
@@ -8,9 +8,10 @@ import bpy
from bpy.types import Operator
from bpy.props import BoolProperty
from vse_toolbox.sequencer_utils import (get_strips, render_strip, render_sound, render_scene)
from vse_toolbox.sequencer_utils import (get_strips, render_strip, render_sound,
render_scene, get_render_attributes)
from vse_toolbox.bl_utils import (get_scene_settings, background_render)
from vse_toolbox.file_utils import install_module
from vse_toolbox.file_utils import install_module, expand
@@ -116,53 +117,67 @@ class VSETB_OT_render(Operator):
settings = get_scene_settings()
project = settings.active_project
project_templates = {t.name: t.value for t in project.templates}
format_data = {**settings.format_data, **project.format_data}
single_file = False
sequence_strips = []
shot_strips = []
render_attrs = get_render_attributes()
start_time = time.perf_counter()
if project.render_single_file:
single_file = True
if project.render_video:
video_template = os.path.expandvars(project.render_video_template)
video_template = expand(project.render_video_template, **project_templates)
video_path = video_template.format(**format_data)
render_scene(video_path)
render_scene(video_path, attributes=render_attrs)
#background_render(output=video_path)
if project.render_audio:
audio_template = os.path.expandvars(project.render_audio_template)
audio_template = expand(project.render_audio_template, **project_templates)
audio_path = audio_template.format(**format_data)
bpy.ops.sound.mixdown(filepath=audio_path)
if project.render_sequence:
print('Render Sequences...')
for strip in get_strips(channel='Sequences', selected_only=project.render_selected_only):
sequence_strips = get_strips(channel='Sequences', selected_only=project.render_selected_only)
for strip in sequence_strips:
#print(strip.name)
strip_settings = strip.vsetb_strip_settings
strip_data = {**format_data, **strip_settings.format_data}
if project.render_sequence and project.render_video_per_sequence:
video_sequence_template = os.path.expandvars(project.render_video_sequence_template)
video_sequence_template = expand(project.render_video_sequence_template, **project_templates)
sequence_render_path = video_sequence_template.format(**strip_data)
render_strip(strip, sequence_render_path)
render_strip(strip, sequence_render_path, attributes=render_attrs)
if project.render_shot and project.render_audio_per_sequence:
audio_sequence_template = os.path.expandvars(project.render_audio_sequence_template)
audio_sequence_template = expand(project.render_audio_sequence_template, **project_templates)
audio_render_path = audio_sequence_template.format(**strip_data)
render_sound(strip, audio_render_path)
if project.render_shot:
for strip in get_strips(channel='Shots', selected_only=project.render_selected_only):
shot_strips = get_strips(channel='Shots', selected_only=project.render_selected_only)
for strip in shot_strips:
strip_settings = strip.vsetb_strip_settings
strip_data = {**format_data, **strip_settings.format_data}
if project.render_video_per_strip:
video_strip_template = os.path.expandvars(project.render_video_strip_template)
video_strip_template = expand(project.render_video_strip_template, **project_templates)
strip_render_path = video_strip_template.format(**strip_data)
render_strip(strip, strip_render_path)
render_strip(strip, strip_render_path, attributes=render_attrs)
if project.render_audio_per_strip:
audio_strip_template = os.path.expandvars(project.render_audio_strip_template)
audio_strip_template = expand(project.render_audio_strip_template, **project_templates)
audio_render_path = audio_strip_template.format(**strip_data)
render_sound(strip, audio_render_path)
if not single_file and not sequence_strips and not shot_strips:
self.report({"ERROR"}, f'No strips rendered, select sequence or shot strips')
return {"CANCELLED"}
self.report({"INFO"}, f'Strips rendered in {time.perf_counter()-start_time} seconds')
return {"FINISHED"}