#!/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)