후디니 프리뷰 v1.01

반투50·2022년 1월 18일
0
#encoding=utf-8

#version:1.1
#lastedit:2022.01.18
#creator:Kim dae uk
#houdiniversion:18.5

import hou, os, toolutils, subprocess
#version name
if 'ver_name' in globals():
    pass
else:
    ver_name = "ver01"

class P():
    #hipfile name
    hip_path = os.path.dirname(hou.hipFile.path())
    hip_name = os.path.basename(hou.hipFile.path())[:-4]


    #time range
    start = int(hou.expandString('$RFSTART'))
    end = int(hou.expandString('$RFEND'))

    #viewport name
    desktop = hou.ui.curDesktop()
    scene_view = toolutils.sceneViewer()
    viewport = scene_view.curViewport()
    view = desktop.name() + "." + scene_view.name() + ".world." + viewport.name()
    
    #make directory preview, seq, mp4
    def make_dir(self):
        pre_dir = self.hip_path+"/preview" 
        if not os.path.isdir(pre_dir):
            os.mkdir(pre_dir) 
        seq_dir = pre_dir+"/seq" 
        mp4_dir = pre_dir+"/mp4"
        if not os.path.isdir(seq_dir):
            os.mkdir(seq_dir)
        if not os.path.isdir(mp4_dir):
            os.mkdir(mp4_dir)
        return seq_dir, mp4_dir
    
    #make preview    
    def make_preview(self, in_seq_name, start, end, resx, resy):
        scene = self.desktop.paneTabOfType(hou.paneTabType.SceneViewer)
        flipbook_options = scene.flipbookSettings().stash()
        playbar_options = hou.playbar
        
        flipbook_options.output(in_seq_name)
        
        flipbook_options.frameRange((start, end))
        flipbook_options.resolution((resx, resy))
        flipbook_options.cropOutMaskOverlay(1)
        scene.flipbook(scene.curViewport(), flipbook_options)
        
    #convert mp4    
    def convert_mp4(self, frame_rate, start, in_seq_name, out_mp4_name):
        seq_name = in_seq_name.replace("$F4", "%04d", 1)
        frame_rate = frame_rate
        start_num = start
        cmd = 'ffmpeg -y -framerate {} -start_number {} -i "{}" "{}"'.format(frame_rate, start, seq_name, out_mp4_name)
        subprocess.check_output(cmd, shell=True)     

    #get multiInput set value
    def get_value(self):
        global ver_name
        if self.viewport.camera() != None:
            cam = hou.node(self.viewport.camera().path())
            cam_name = self.viewport.camera().name()
            resx = cam.parm("resx").eval()
            resy = cam.parm("resy").eval()
        
        else:
            cam_name = 'viewport'
            resx = 1280
            resy = 720
        
            
        value = hou.ui.readMultiInput("Camara  : %s\nSize       : %d %d\nName     : %s" %(cam_name,resx,resy,self.hip_name),
                input_labels=('Add Name','Start Frame','End Frame','Size_X', 'Size_Y'),
                buttons=('Ok','Cencle'),
                title="Flipbook",
                initial_contents=("%s" %ver_name,"%d" %self.start ,"%d" %self.end , "%d" %resx, "%d" %resy))
                

        if value[0] == 0: ver_name = str(value[1][0])
        return value
        
    #make_preview, make_mp4    
    def do(self, value):
        if value[0] == 0:
            #hou.ui.displayMessage('OK')
            
            #set flipbook option
            start = int(value[1][1])
            end =   int(value[1][2])
            resx =  int(value[1][3])
            resy =  int(value[1][4])
        
            #make_dir, set sequence_file_name
            seq_dir, mp4_dir = self.make_dir()
            file_name = self.hip_name+'_'+value[1][0]    
            in_seq_name = seq_dir+"/"+file_name+".$F4.jpg"
            
            #set out_mp4_name
            out_mp4_name = mp4_dir+"/"+file_name+".mp4"
            
            #make_preview
            self.make_preview(in_seq_name, start, end, resx, resy)
            
            #make_mp4
            frame_rate = hou.fps()
            self.convert_mp4(frame_rate, start, in_seq_name, out_mp4_name)

후디니 shelftool

import auto_pree

p = auto_pree.P()
value = p.get_value()
p.do(value)
profile
취미로 개발

0개의 댓글