후디니 프리뷰1.2

반투50·2022년 1월 28일
0

makedirs를 써서 코드를 약간 간략화

파일을 만든후 hou.ui.displayMessage의 detail 패널에 정보가 나오게 수정
만약 imageMagic 디렉토리를 확인해서 없으면 경고 메시치를 출력

flipbook_options.useResolution(True)이구문이 있어야 플립북에서
Resolution항목이 체크되고 사이즈를 입력된 값으로 정한다

#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 = "fx_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"
        seq_dir = pre_dir+"/seq"
        mp4_dir = pre_dir+"/mp4"

        if not os.path.isdir(seq_dir):
            os.makedirs(seq_dir)
        if not os.path.isdir(mp4_dir):  
            os.makedirs(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))

        resy = int(resx / 1.7777)
        flipbook_options.resolution((resx, resy))
        flipbook_options.useResolution(True)
        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
        out  = out_mp4_name.split('/')[-1]
        out1 = in_seq_name.split('/')[-1]

        #Check installed ImageMagic and it is TRUE then make mp4
        try:
            cmd = 'ffmpeg -y -framerate {} -start_number {} -i "{}" "{}"'.format(frame_rate, start, seq_name, out_mp4_name)
            subprocess.check_output(cmd, shell=True)
            hou.ui.displayMessage('MP4 : '+out+'\nSEQ : '+out1, details='mp4 file directory:\n '+out_mp4_name+'\nseq file directory:\n '+in_seq_name , details_expanded=False, default_choice=1, title='DONE MP4&SEQENCE')
        except:
            hou.ui.displayMessage('Please check installed ImageMagick!', severity=hou.severityType.Warning, default_choice=1, title='Do not make MP4' ) 


    #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)
profile
취미로 개발

0개의 댓글