bpy_render.py 2.25 KB
# -*- coding: UTF-8 -*-

import bpy
import json
import os
import shutil
import sys

def configure_output():
    bpy.context.scene.frame_start = 0
    bpy.context.scene.frame_current = 0
    bpy.context.scene.render.resolution_x = 640
    bpy.context.scene.render.resolution_y = 480
    bpy.context.scene.render.resolution_percentage = 100
    bpy.context.scene.render.image_settings.file_format = 'H264'
    bpy.context.scene.render.ffmpeg.format = 'MPEG4'
    bpy.context.scene.render.ffmpeg.codec = 'H264'
    bpy.context.scene.render.use_shadows = False
    bpy.context.scene.render.use_raytrace = False
    bpy.context.scene.render.use_envmaps = False
    bpy.context.scene.render.use_motion_blur = False
    bpy.context.scene.render.use_shadows = False
    return

def file_rename(file_full_path):
    file_path = os.path.dirname(os.path.abspath(file_full_path))
    filename = os.path.basename(os.path.splitext(file_full_path)[0])
    extension = os.path.splitext(file_full_path)[1]
    filename_reversed = ""
    valid_char = False
    for char in reversed(filename):
        if (valid_char == True):
            filename_reversed += char
        if (char == "_"):
            valid_char = True
    try:
        filename_reversed = filename_reversed[::-1]
        new_filename = os.path.join(file_path, "%s%s" % (filename_reversed, extension))
        shutil.move(file_full_path, new_filename)
        return new_filename
    except Exception:
        return ""

def render_video(upload_dir, sign_name):
    bpy.context.scene.render.filepath = os.path.join(upload_dir, sign_name + "_")
    try:
        bpy.ops.render.render(animation = True, write_still = False, layer = "", scene = "")
        return str("%s%0.4i-%0.4i.mp4" % (bpy.context.scene.render.filepath, bpy.context.scene.frame_start, bpy.context.scene.frame_end))
    except:
        return ""

def main():
    if (len(sys.argv) == 8):
        json_obj = json.loads(sys.argv[7])
        try:
            upload_dir = json_obj["upload_dir"]
            sign_name = json_obj["sign_name"]
        except:
            sys.exit(3)
        try:
            configure_output()
            file_rename(render_video(upload_dir, sign_name))
        except:
            sys.exit(4)
    else:
        sys.exit(5)

if __name__ == "__main__":
    main()