후디니 플립북 저장과 mp4컨버트

반투50·2022년 1월 14일
0

#!/usr/bin/python
#encoding=utf-8

#version:1.1
#lastedit:2022.01.14
#creator:Kim dae uk
#houdiniversion:18.5
#캔슬 누르면 에러



import hou
import os
import re
import sys
import glob
import toolutils
import shutil
import subprocess
import platform

class Preview:
    def __init__(self):
        self.value_name, self.start, self.end, self.resx, self.resy = self.get_multiName()
        self.in_seq_name, self.out_seq_name,self.out_name = self.get_dir()


    def get_multiName(self):    #hipfile name
        #hipfile name
        hip_path = os.path.dirname(hou.hipFile.path())
        hip_name = os.path.basename(hou.hipFile.path())[:-4]
        
        #viewport name
        desktop = hou.ui.curDesktop()
        scene_view = toolutils.sceneViewer()
        viewport = scene_view.curViewport()
        view = desktop.name() + "." + scene_view.name() + ".world." + viewport.name()

        #camera set
        if viewport.camera() != None:
            cam = hou.node(viewport.camera().path())
            cam_name = viewport.camera().name()
            resx = cam.parm("resx").eval()
            resy = cam.parm("resy").eval()

        else:
            cam_name = 'viewport'
            resx = 1280
            resy = 720

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


        value = hou.ui.readMultiInput("Camara  : %s\nSize       : %d %d\nName     : %s" %(cam_name,resx,resy,hip_name),
                input_labels=('Add Name','Start Frame','End Frame','Size_X', 'Size_Y'),
                buttons=('Ok','Cencle'),
                title="Flipbook",
                initial_contents=("_ver0","%d" %start ,"%d" %end , "%d" %resx, "%d" %resy))
                
        ##ver_name, start_frame, end_frame, size_x, size_y###
        if value[0] == 0:
            value_name          = value[1][0]
            value_start_frame   = value[1][1]
            value_end_frame     = value[1][2]
            value_size_x          = value[1][3]
            value_size_y          = value[1][4]

            if value_name !='':
                sq_name = hip_name + "_" + value_name
            else:
                sq_name = hip_name

            if value_start_frame !='': start = int(value_start_frame)
            if value_end_frame !='': end = int(value_end_frame)
            if value_size_x !='':
                _resx = resx
                _resy = resy
                resx = int(value_size_x)
                resy = int(value_size_y)

        return value_name, start, end, resx, resy
        
        
    def get_dir(self):
        cur_desktop = hou.ui.curDesktop()
        scene = cur_desktop.paneTabOfType(hou.paneTabType.SceneViewer)
        flipbook_options = scene.flipbookSettings().stash()
        playbar_options = hou.playbar
        hip_file = hou.hipFile
        path_name = hip_file.name() #hip PathName
        
        dir, file_name = os.path.split(path_name)
        file_name = file_name[:-4] + self.value_name + '_'                ####sequence&&mp4 Name ##VERSION
        
        pre_dir = dir+"/preview" 
        if not os.path.isdir(pre_dir):
                os.mkdir(pre_dir) 
        seq_dir = pre_dir+"/seq" #sequenceDirectoryPath
        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)
        
        in_seq_name = seq_dir+"/"+file_name+".$F4.jpg"        
        out_seq_name = seq_dir+"/"+file_name+".%04d.jpg"
        out_name = mp4_dir+"/"+file_name+".mp4"
        return in_seq_name, out_seq_name, out_name
        
    def make_flipbook(self):
        cur_desktop = hou.ui.curDesktop()
        scene = cur_desktop.paneTabOfType(hou.paneTabType.SceneViewer)
        flipbook_options = scene.flipbookSettings().stash()
        playbar_options = hou.playbar

        frame_range = playbar_options.frameRange()
        flipbook_options.frameRange( (self.start, self.end) )


        flipbook_options.output(self.in_seq_name)
        flipbook_options.outputZoom(100)
        flipbook_options.useResolution(1)
        flipbook_options.resolution((self.resx, self.resy))
        flipbook_options.cropOutMaskOverlay(1)
        scene.flipbook(scene.curViewport(), flipbook_options)
        self.convert_mp4() #convert mp4
        
    def convert_mp4(self):
        frame_rate = 24
        start_num = 180
        cmd = 'ffmpeg -y -framerate {} -start_number {} -i "{}" "{}"'.format(frame_rate, self.start, self.out_seq_name, self.out_name)
        subprocess.check_output(cmd, shell=True)
        
        
        
       
profile
취미로 개발

0개의 댓글