-
-
Save howiemnet/8784cf04568c849271730965eaf35159 to your computer and use it in GitHub Desktop.
# Ultra quick'n'hacky AE camera animation importer for Houdini. | |
# Create a new shelf, create a new tool, paste this into the script box. | |
# | |
# In AE, select the Orientation and/or Position keyframes, and Ctrl/Cmd-C them to the clipboard | |
# Open a new text file (Notepad or Textedit) and paste the clipboard contents in. There's your keyframes. | |
# Save the text file somewhere and amend the filename line below to suit | |
# In Houdini, create a camera (it's up to you to set the same zoom / aperture as the AE one). | |
# ... and run this script (well, press the shelf button you stuck this on) | |
import hou | |
# amend the next two lines as required | |
h = hou.node("/obj/cam1") | |
filename = "cameraKeyFrameData.txt" | |
state = "crap" | |
ignoreLine = False | |
with open (filename,"rU") as ff: | |
for theLine in ff: | |
elements = theLine.strip().split("\t") | |
ignoreLine = False | |
if len(elements) == 0: | |
state = "crap" | |
ignoreLine = True | |
else: | |
if elements.count("X degrees") > 0: | |
state = "orientation" | |
ignoreLine = True | |
if elements.count("X pixels") > 0: | |
state = "translate" | |
ignoreLine = True | |
if ignoreLine == False: | |
if len(elements) == 4: | |
theFrame = elements[0] | |
theXValue = elements[1] | |
theYValue = elements[2] | |
theZValue = elements[3] | |
if state == "translate": | |
print ("At frame "+theFrame+" translate to: "+theXValue) | |
setKey = hou.Keyframe() | |
setKey.setFrame(int(theFrame)) | |
setKey.setValue(float(theXValue)*0.01) | |
testCh = hou.parm("obj/cam1/tx") | |
testCh.setKeyframe(setKey) | |
setKey = hou.Keyframe() | |
setKey.setFrame(int(theFrame)) | |
setKey.setValue(-float(theYValue)*0.01) | |
testCh = hou.parm("obj/cam1/ty") | |
testCh.setKeyframe(setKey) | |
setKey = hou.Keyframe() | |
setKey.setFrame(int(theFrame)) | |
setKey.setValue(-float(theZValue)*0.01) | |
testCh = hou.parm("obj/cam1/tz") | |
testCh.setKeyframe(setKey) | |
if state == "orientation": | |
print ("At frame "+theFrame+" orient to: "+theXValue) | |
setKey = hou.Keyframe() | |
setKey.setFrame(int(theFrame)) | |
setKey.setValue(float(theXValue)) | |
testCh = hou.parm("obj/cam1/rx") | |
testCh.setKeyframe(setKey) | |
setKey = hou.Keyframe() | |
setKey.setFrame(int(theFrame)) | |
setKey.setValue(-float(theYValue)) | |
testCh = hou.parm("obj/cam1/ry") | |
testCh.setKeyframe(setKey) | |
setKey = hou.Keyframe() | |
setKey.setFrame(int(theFrame)) | |
setKey.setValue(-float(theZValue)) | |
testCh = hou.parm("obj/cam1/rz") | |
testCh.setKeyframe(setKey) | |
Hi friend. With your permission, I have a little finalized your idea. Now you do not need to save the txt file. The camera animation is immediately copied from the buffer.
Heh - nice - but makes it platform dependent though. I'll try and get round to doing something a bit better. Tidiest solution would be to just grab the clipboard contents straight into a string and deal with it there.
Heh - nice - but makes it platform dependent though. I'll try and get round to doing something a bit better. Tidiest solution would be to just grab the clipboard contents straight into a string and deal with it there.
I didn’t quite manage to do this, because the buffer encoding adds extra tabs. But it will be very nice to look at your option
Houdini shows me an error when i run this code, that is- "ValueError: invalid literal for int() with base 10: ''.
I found that replacing "setKey.setFrame(int(theFrame))" with "setKey.setFrame(int(float(theFrame)))" solves the problem.
Hey!! my camera was in the wrong direction and i don't understand how to correct it
https://pastebin.com/0wxHe9e2