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

import bpy
import json
import os
import sys
import shutil

def configure_output():
    bpy.context.scene.frame_start = 0
    bpy.context.scene.frame_current = bpy.context.scene.frame_start
    bpy.context.scene.frame_end = bpy.context.scene.frame_start
    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(video_output = ""):
    getcwd = os.path.dirname(os.path.abspath(__file__))
    base_path = os.path.join(getcwd, video_output)
    bpy.context.scene.render.filepath =  base_path + "_"
    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:
            video_output = json_obj["video_output"]
            convert_to_webm = json_obj["convert_to_webm"]
        except:
            sys.exit(3)
        try:
            configure_output()
            renamed_video = file_rename(render_video(video_output))
            base_path = os.path.splitext(renamed_video)[0]
            if (convert_to_webm):
                subprocess.call(["avconv", "-loglevel", "0", "-y", "-i", renamed_video, "-r", "24", "-vcodec", "libvpx", base_path + ".webm"])
                subprocess.call(["rm", renamed_video])
        except:
            sys.exit(4)
    else:
        sys.exit(5)

if __name__ == "__main__":
    main()