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)