[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [3463] trunk/py/scripts/tools/bi_farm: scripts for avi generation
Campbell Barton
ideasman42 at gmail.com
Wed Jun 6 09:44:18 CEST 2012
Revision: 3463
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=3463
Author: campbellbarton
Date: 2012-06-06 07:44:05 +0000 (Wed, 06 Jun 2012)
Log Message:
-----------
scripts for avi generation
Modified Paths:
--------------
trunk/py/scripts/tools/bi_farm/render_dirs.py
Added Paths:
-----------
trunk/py/scripts/tools/bi_farm/blender_exr_to_avi.py
trunk/py/scripts/tools/bi_farm/master_avi_gen.py
Added: trunk/py/scripts/tools/bi_farm/blender_exr_to_avi.py
===================================================================
--- trunk/py/scripts/tools/bi_farm/blender_exr_to_avi.py (rev 0)
+++ trunk/py/scripts/tools/bi_farm/blender_exr_to_avi.py 2012-06-06 07:44:05 UTC (rev 3463)
@@ -0,0 +1,37 @@
+import bpy
+import sys
+import os
+
+sys.path.append("/shared/software/render_farm/")
+
+import new_blend_2_frames
+
+image_dir = sys.argv[-2]
+blendfile = sys.argv[-1]
+
+if not image_dir.endswith("/"):
+ image_dir += "/"
+
+frames = new_blend_2_frames.blend_2_frames(blendfile)
+files = []
+
+print(frames, blendfile)
+
+for f_nr, f_name in frames:
+ f_dir, f_fname = os.path.split(f_name)
+ files += [{"name": f_fname}]
+
+bpy.ops.sequencer.image_strip_add(directory=image_dir, frame_start=1, channel=1, replace_sel=True, files=files)
+
+# render
+bpy.context.scene.frame_start = 1
+bpy.context.scene.frame_end = len(files)
+bpy.context.scene.render.use_sequencer = True
+bpy.context.scene.render.resolution_percentage = 50
+bpy.context.scene.render.resolution_x = 2048
+bpy.context.scene.render.resolution_y = 872
+bpy.context.scene.render.image_settings.file_format = 'AVI_JPEG'
+bpy.context.scene.render.image_settings.quality = 95
+bpy.context.scene.render.filepath = os.path.join(image_dir, os.path.basename(image_dir[:-1])) + ".avi"
+
+bpy.ops.render.render(animation=True)
Property changes on: trunk/py/scripts/tools/bi_farm/blender_exr_to_avi.py
___________________________________________________________________
Added: svn:executable
+ *
Added: trunk/py/scripts/tools/bi_farm/master_avi_gen.py
===================================================================
--- trunk/py/scripts/tools/bi_farm/master_avi_gen.py (rev 0)
+++ trunk/py/scripts/tools/bi_farm/master_avi_gen.py 2012-06-06 07:44:05 UTC (rev 3463)
@@ -0,0 +1,119 @@
+# runs on a node, generates avis, last arg is dir full of exrs
+
+import os
+import time
+import new_blend_2_frames
+from render_dirs import FARM_DIR
+from render_dirs import REND_DIR
+from render_dirs import GEN_AVI_IP
+from render_dirs import GEN_AVI_USER
+import time
+
+
+
+# assume guest
+BIN = os.path.join(FARM_DIR, "blender_farm.sh")
+SCRIPT = os.path.join(FARM_DIR, "blender_exr_to_avi.py")
+
+def file_date(path):
+ #currtime = (year, month, day, hour, min, sec)
+ # year, month, day, hour, minute, second, weekday, yearday, daylight = now
+ return time.localtime(os.stat(path)[8])[0:6]
+
+def find_file(dir, filename):
+ for root, dirs, files in os.walk(dir):
+ if filename in files:
+ return os.path.join(root, filename)
+
+ return None
+
+def generate(ip, user=GEN_AVI_USER):
+ frame_dir = os.path.join(REND_DIR)
+ frame_dirs = os.listdir(frame_dir)
+ frame_dirs.sort()
+
+ commit_avis = []
+
+ for fdir in frame_dirs:
+ image_dir = os.path.join(frame_dir, fdir)
+ if not os.path.isdir(image_dir):
+ continue
+
+ # find number of frames
+ blendfile = find_file(os.path.join(FARM_DIR, "mango_svn"), fdir + ".blend")
+ if not blendfile:
+ continue
+
+ #os.system("svn up %s > /dev/null" % blendfile)
+ frames = new_blend_2_frames.blend_2_frames(blendfile)
+
+ # find avis and exrs
+ files = os.listdir(image_dir)
+
+ exrs = []
+ avi = None
+ if fdir + ".avi" in files:
+ avi = fdir + ".avi"
+
+ for frame_nr, frame_path in frames:
+ f_dir, f_fname = os.path.split(frame_path)
+ if f_fname in files:
+ exrs += [f_fname]
+
+ #if len(exrs) != len([f for f in files if f.endswith(".exr")]):
+ # print("frames mismatch %s %d vs %d" % (fdir, len(exrs), len([f for f in files if f.endswith(".exr")])))
+
+ skip = False
+ if len(exrs) == 0 or len(exrs) != len(frames):
+ print("frames not complete (%d/%d): %s" % (len(exrs), len(frames), image_dir))
+ if avi:
+ commit_avis += [(image_dir, avi)]
+ skip = True
+ elif avi:
+ exr_date = max([file_date(os.path.join(image_dir, f)) for f in exrs])
+ avi_date = file_date(os.path.join(image_dir, avi))
+
+ commit_avis += [(image_dir, avi)]
+
+ # avi is newer
+ if avi_date > exr_date:
+ print("avi up to date: %s" % image_dir)
+ skip = True
+
+ if not skip:
+ cmd = "ssh -p 22 %s@%s '%s -b -P %s -- %s %s; sync'" % (user, ip, BIN, SCRIPT, image_dir, blendfile)
+
+ print(cmd)
+ try:
+ os.system(cmd)
+ except:
+ os.system("rm %s" % os.path.join(image_dir, avi))
+
+ # wait for nfs, sync command above also helps hopefully
+ time.sleep(10)
+
+ # disabled auto commit for now
+ """
+ os.system("svn up " + os.path.join(FARM_DIR, "ani/render"))
+
+ commit_files = ""
+ for dir, avi in commit_avis:
+ from_file = os.path.join(dir, avi)
+ to_file = os.path.join(FARM_DIR, "ani/render", avi)
+ if os.path.exists(to_file):
+ print(to_file, file_date(to_file))
+ if os.path.exists(from_file):
+ print(from_file, file_date(from_file))
+ if not os.path.exists(to_file) or (os.path.exists(from_file) and file_date(from_file) > file_date(to_file)):
+ print("copying " + from_file)
+ os.system("cp %s %s" % (from_file, to_file))
+ commit_files += " \"%s\"" % to_file
+
+ print("committing " + commit_files)
+ os.system("svn add " + commit_files)
+ os.system("svn status " + commit_files)
+ os.system("svn commit -m \"Updated .avi's from the farm.\" " + commit_files)
+ """
+
+if __name__ == '__main__':
+ generate(GEN_AVI_IP)
Modified: trunk/py/scripts/tools/bi_farm/render_dirs.py
===================================================================
--- trunk/py/scripts/tools/bi_farm/render_dirs.py 2012-06-06 07:35:16 UTC (rev 3462)
+++ trunk/py/scripts/tools/bi_farm/render_dirs.py 2012-06-06 07:44:05 UTC (rev 3463)
@@ -1,4 +1,8 @@
+# note: this is mainly used for dirs
+# but is also a general config file for the farm
+# ==============================================
+
# the path to this file (could use __file__)
FARM_DIR = "/shared/software/render_farm"
@@ -8,3 +12,6 @@
# avi log paths
GEN_AVI_LOG = "logs/generate_avi.log"
GEN_AVI_BUSY = "logs/generate_avi.busy"
+# who generates the avis
+GEN_AVI_IP = "192.168.4.71"
+GEN_AVI_USER = "guest"
\ No newline at end of file
More information about the Bf-extensions-cvs
mailing list