не видит в системе установленного blender
На самом деле он сказал, что не найдено ни одного файла после завершения работы blender. Это и есть тот эффект, о котором я писал:
продолжаю воевать с новым движком blender, который называется BLENDER_EEVEE
Как только его внедрили, с версии 2.80, openshot, будучи сориентирован на старый движок BLENDER_RENDER, перестал работать, т.к. не может вызвать blender с корректными параметрами. А blender, не понимая такого вызова, падает где-то в фоне с ошибкой, не генерируя выходную последовательность изображений, что в итоге и пишет OpenShotQT. Вышеприведенный blender_listview.py учитывает эту особенность, подставляя вызываемый рендер в зависимости от версии blender:
...
#regular expressions to pars output of render
regulars_dict = {
#Fra:25 Mem:91.85M (0.00M, Peak 103.24M) | Time:00:00.02 | Rendering 1 / 5 samples
'BLENDER_EEVEE': r"Fra:([0-9,]*).*Mem:(.*?) .*Rendering ([0-9,]*) / ([0-9,]*) samples",
#Fra:39 Mem:39.02M (0.00M, Peak 63.08M) | Time:00:00.37 | Remaining:00:00.09 | Mem:9.66M, Peak:10.16M | Scene, RenderLayer | Rendered 40/60 Tiles
'CYCLES': r"Fra:([0-9,]*).*Mem:(.*?) \(.*Rendered ([0-9,]*)/([0-9,]*) Tiles",
#Fra:25 Mem:55.82M (0.00M, Peak 101.25M) | Time:00:01.51 | Scene, Part 1055-1056
'BLENDER_RENDER': r"Fra:([0-9,]*).*Mem:(.*?) .*Part ([0-9,]*)-([0-9,]*)",
}
...
try:
# Shell the blender command to create the image sequence
command_get_version = [self.blender_exec_path, '-v']
#option factory-startup is nessusary for non-english users, wich have hoosen own lnguage in blender UI settings
command_render = [str(self.blender_exec_path), '--factory-startup', '-b', self.blend_file_path, '-P', self.target_script]
self.process = subprocess.Popen(command_get_version, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo)
# Check the version of Blender
self.version = self.blender_version.findall(str(self.process.stdout.readline()))
if self.version:
if float(self.version[0]) < 2.76:
# change cursor to "default" and stop running blender command
self.is_running = False
# Wrong version of Blender. Must be 2.76+:
self.blender_version_error.emit(float(self.version[0]))
return
if float(self.version[0]) < 2.78:
self.blender_saved_expression = re.compile(r"Saved: (.*.png)(.*)")
else:
#from 2.78 and upper
self.blender_saved_expression = re.compile(r"Saved: '(.*.png)(.*)'")
# debug info
log.info(
"Blender command: {} {} {} '{}' {} '{}'".format(command_render[0], command_render[1], command_render[2],
command_render[3], command_render[4], command_render[5]))
...
# Wrong version of Blender. Must be 2.76+:
self.blender_version_error.emit(float(self.version[0]))
return
if float(self.version[0]) < 2.78:
self.blender_saved_expression = re.compile(r"Saved: (.*.png)(.*)")
else:
#from 2.78 and upper
self.blender_saved_expression = re.compile(r"Saved: '(.*.png)(.*)'")
...
"Blender command: {} {} {} '{}' {} '{}'".format(command_render[0], command_render[1], command_render[2],
command_render[3], command_render[4], command_render[5]))
...
# Run real command to render Blender project
self.process = subprocess.Popen(command_render, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo)
...
log.info(line)
#check render
try:
used_render = self.used_render_expression.findall(line)
except:
used_render=[]
if used_render:
log.info(used_render[0])
#regular expression in depends of used render:
self.blender_frame_expression = re.compile(regulars_dict[used_render[0]])
try:
output_frame = self.blender_frame_expression.findall(line)
except:
output_frame=[]
...
#debug info
log.info("Frame info:")
log.info(output_frame)
log.info("Saved:")
log.info(output_saved)
Однако для его корректного применения нужно править все питоновские скрипты, что я сделать пока не успел (пока более-менее работают blinds.py, colors.py, defocus.py, dissolve.py, explode.py, glass_slider.py, wireframe_text.py, rotate_360.py, spacemovie_intro.py, fly_by_two_titles.py, neon_curves.py, halo_zoom_out.py, snow.py, trees.py. Еще исправлять и исправлять. К тому же, в новом движке без использования шейдеров цвета выглядят блеклыми. Для использования шейдеров приходится переписывать скрипты чуть ли не с нуля, как это сделано было с тем же dissolve.py. С учетом того, что я занимаюсь этим в свободное время, и python (да и blender) знаю крайне плохо - получается все это люто медленно. Так что не обессудьте. Как только будет готово - обязательно поделюсь результатом.