Houdini

파이썬 코드로 플립북 mp4 생성

Tedd_Kim 2023. 5. 15. 10:20

Post Render Script나 Python SOP으로 하면 플립북 자체는 mPlay에 들어가지만, jpg가 매프레임 생성되지 않는다.

따라서 Source Editor로 실행하거나, 다른 방법을 찾아야할듯

 

import os
import subprocess
import hou
node = hou.pwd()

class genFlipbook:
	def __init(self)__:
    	self.resx = 1280 
        self.resy = 720
        self.start = 1
        self.end = 24
        self.cam = hou.node('/obj/work_cam') #경로 주의
        self.fps = 24
        
    def makeDir(self):
    	path = hou.hipFile.name()
        dir, file_name = os.path.split(path)
        
        pre_dir = dir+'/preview'
        
        if not os.path.isDir(pre_dir):
        	os.mkdir(pre_dir) #경로가 존재하지 않는다면 경로 만들기
            
        out_path = pre_dir + '/' + 'seq_$F4.jpg'
        read_path = pre_dir + '/' + 'seq_%04d.jpg' # %04d 주의
        convert_path = pre_dir + '/' + 'video.mp4'
        
        return out_path, read_path, convert_path
        
    def flipInfo(self):
    	desktop = hou.ui.curDesktop()
        scenes = desktop.currentPaneTabs() #현재 데스크탑의 pane tab 튜플을 리턴
        
        for scene in scenes:
        	if scene.type().name() == 'SceneViewer': # 씬뷰(현재 뷰포트)에 한해서
            	viewport = scene.viewports()[-1] # perspective뷰를 가져옴
               	viewport.setCamera(self.cam) # 시점을 카메라로 바꿈
                
                flipbook_options = scene.flipbookSettings().stash()
                flipbook_options.frameRange((self.start, self.end))
                flipbook_options.resolution((self.resx, self.resy))
                
                a,b,c = self.makeDir() # 편의상 경로명 a,b,c로 대입
                
                flipbook_options.output(a) # 플립북 jpg로 export할 경로 설정
                
                return scene, viewport, flipbook_options
                
                
	def convert_mp4(self):
    	a,b,c = self.makeDir()
        
        cmd = 'ffmpeg -y -framerate {} -start_number {} -i "{}" "{}"'.format(self.fps, self.start, b, c)
        subprocess.check_output(cmd, shell=True)
        
    def execute(self):
    	scene, view, info = self.flipInfo()
        
        scene.flipbook(view, info) # 플립북 생성
        self.convert_mp4() # mp4 변환
        
flip = genFlipbook() # 객체 생성
flip.execute() # 실행

 

https://velog.io/@thissa/%ED%9B%84%EB%94%94%EB%8B%88-%ED%94%8C%EB%A6%BD%EB%B6%81-%EC%A0%80%EC%9E%A5%EA%B3%BC-mp4%EC%BB%A8%EB%B2%84%ED%8A%B8

 

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

import houimport osimport reimport sysimport globimport toolutilsimport shutilimport subprocessimport platformclass Preview: def init(self):

velog.io

 

대략적인 아이디어는 이 분의 블로그에서 얻었고, 개인적으로 wedge를 생성하는 방법으로 살짝 변형했다.

문제는 팜에서 돌아갈까인데 (curDesktop() 때문에..), 나중에 다시 업데이트 하는 걸로