[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