diff options
author | Campbell Barton <ideasman42@gmail.com> | 2008-01-30 19:16:38 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2008-01-30 19:16:38 +0300 |
commit | 746522a0ad3753c7922ca77567d9e7886f13da99 (patch) | |
tree | 684942c89003f1387d6bd541bed086ed947fa483 /release/scripts/bpymodules | |
parent | 7acb6ed10cbb255b3de3474ff2f9dce34b0a99fa (diff) |
Standalone reads a list of scene, start frame, end frame from blend files without having to load them in blender.
Scenes must be tagged to render, (old render daemon button) but selecting scenes in the data browser (shoft+f4) sets this also.
Using this script to generate jobs for the renderfarm much faster then loading blender.
Diffstat (limited to 'release/scripts/bpymodules')
-rw-r--r-- | release/scripts/bpymodules/blend2renderinfo.py | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/release/scripts/bpymodules/blend2renderinfo.py b/release/scripts/bpymodules/blend2renderinfo.py new file mode 100644 index 00000000000..1b9dec58d55 --- /dev/null +++ b/release/scripts/bpymodules/blend2renderinfo.py @@ -0,0 +1,95 @@ +#!/usr/bin/python + +# -------------------------------------------------------------------------- +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ***** END GPL LICENCE BLOCK ***** +# -------------------------------------------------------------------------- + +import struct + +# In Blender, selecting scenes in the databrowser (shift+f4) will tag for rendering. + +# This struct wont change according to ton. +# Note that the size differs on 32/64bit +''' +typedef struct BHead { + int code, len; + void *old; + int SDNAnr, nr; +} BHead; +''' + + +def read_blend_rend_chunk(path): + file = open(path, 'rb') + + if file.read(len('BLENDER')) != 'BLENDER': + return [] + + # + if file.read(1) == '-': + is64bit = True + else: # '_' + is64bit = False + + if file.read(1) == 'V': + isBigEndian = True # ppc + else: # 'V' + isBigEndian = False # x86 + + + # Now read the bhead chunk!!! + file.read(3) # skip the version + + scenes = [] + + while file.read(4) == 'REND': + + if is64bit: sizeof_bhead = sizeof_bhead_left = 24 # 64bit + else: sizeof_bhead = sizeof_bhead_left = 20 # 32bit + + sizeof_bhead_left -= 4 + + if isBigEndian: rend_length = struct.unpack('>i', file.read(4))[0] + else: rend_length = struct.unpack('<i', file.read(4))[0] + + sizeof_bhead_left -= 4 + + # We dont care about the rest of the bhead struct + file.read(sizeof_bhead_left) + + # Now we want the scene name, start and end frame. this is 32bites long + + if isBigEndian: start_frame, end_frame = struct.unpack('>2i', file.read(8)) + else: start_frame, end_frame = struct.unpack('<2i', file.read(8)) + + scene_name = file.read(24) + scene_name = scene_name[ : scene_name.index('\0') ] + + scenes.append( (start_frame, end_frame, scene_name) ) + return scenes + +def main(): + import sys + for arg in sys.argv[1:]: + if arg.lower().endswith('.blend'): + print read_blend_rend_chunk(arg) + +if __name__ == '__main__': + main() + |