设为首页收藏本站

AboutNuke|核武视效,Nuke、NukeX、NukeStudio、Mari、Hiero、Katana、Modo

 找回密码
 加入我们
查看: 1147|回复: 0

[其它] [Nuke]写一个自动保存脚本 [复制链接]

Rank: 8Rank: 8

在线时间
176 小时
核弹
60
最后登录
2017-9-27
阅读权限
150
主题
306
帖子
307
发表于 2017-9-27 23:07:08 |显示全部楼层

转自:VFXnews


原文链接:http://www.vfxnews.org/news/news-show.php?id=543


作者:邢欢(AboutNUKE版主)

VFXnews.net原创插件  转载请注明作者及出处




Nuke自身是有自动保存的功能的,当关闭一个工程文件而没有保存的话,nuke会自动在工程文件旁边保存一个后缀名为autosave的文件,下次再打开工程会提示是否打开自动保存的文件,如果是的话就会将autosave文件加载进来。




一般情况下这样子是足够的,就算是突然断电或者死机,都不会造成太大损失。但是,以前遇到一个问题,打开一个工程时候报错,忘了什么错,反正是百度不到的那种,然后发现工程里面一大块的节点没有了,没有了!




关了重新开!没用!




Holy shit!




什么情况!




啊!还好有上一版的,抱着死而复生的心情打开上一版的工程...发现是昨天保存的...今天画的roto啊!K的帧啊!没啦!@#¥%……&*




问别人,没有这情况




然后最近同事的nuke也出了个毛病,做着做着节点就没了...是的,就是普通的调调参数,拽上去准备调别的节点时候,发现节点不见了...




总之当nuke工程坏掉的时候,自动保存就不管用了,所以这里要讲的是自动另存为的脚本,在ctrl s保存工程时候自动另存为一个文件到别的文件夹。

首先定义两个参数,一个是自动保存的文件夹"backup_dir",这里定义为了用户文件夹.nuke下的"nuke_backups"文件夹;另一个是自动保存的上限"number_of_backups",不能让它无限量保存,否则太占地方了。





然后看下怎么另存为,nuke有个函数nuke.scriptSave(file),可以将当前工程保存为file文件,这里的file应当是"/**/**/**.nk"的格式,比如这里测试保存为test01.nk,提前给file赋值,选择这两行ctrl+enter执行,就能看到路径下有了一个test02.nk的文件了。




然后我希望保存时候带上当前的时间信息,这样也就不会重复了,查找也方便,使用time模块的time.strftime()函数,例如获取当前时间并且以"年月日_时分秒"的格式显示,可以使用以下方法,返回"170917_171815"





先来写一个获取当前工程名字的函数get_script_name(),使用nuke.root().name()获取工程文件的路径,用os.path.basename()函数获取工程文件的名称"test.nk",最后用os.path.splitext()来获取不带.nk的文件名,记得在之前添加import os语句。




然后就可以写保存的主函数了,获取工程名,在保存的文件夹下面创建一个工程名的文件夹,使用os.makedirs()函数,然后保存,顺便打印出保存的路径,使用try,except防止中间报错,如果保存失败比如权限问题,就显示一个"Couldn't write a backup file"的信息框




然后写删除多余的文件函数,如果自动保存文件夹里面的文件多余之前定义的上限时,就将最早的文件删除,删除使用os.remove()函数。把这个函数添加到之前的make_backup()函数里




再写一个打开自动保存文件夹的函数,在windows系统上,先把"/"都转换成"\",使用os.system("explorer.exe %s" % path)就能打开path这个路径了。




最后使用nuke.addOnScriptSave()函数,让nuke在保存文件的时候执行make_backup函数,需要注意要在自动保存的函数里提前把这个功能用nuke.removeOnScriptSave()删掉,否则会陷入死循环中,保存后再添加回去。



全选,执行,然后保存工程,就能在自动保存的文件夹看到带有时间信息的工程文件了




为了使这个函数在每个工程里都有效,把这些代码保存为autoBackup.py,addOnScriptSave()函数在menu.py里面调用,并且在nuke的工具栏添加一个标签来打开自动保存的文件夹。



把这两个py文件放到.nuke一个文件夹里,在init里加载,打开nuke就能在上面看到了



虽然不能完全解决工程损坏的问题,但至少不用返回上一版重新开始,多多保存多多益善。老板再也不用担心我的工程坏掉啦...





哈~老板才不管你工程坏不坏,只要你做完...



我爱工作





工作使我快乐













Rank: 2

在线时间
12 小时
核弹
2
最后登录
2018-4-18
阅读权限
20
主题
0
帖子
17
发表于 2017-11-3 20:11:15 |显示全部楼层
好长……
可以试试把坏掉的和上一版没问题的工程的.nk改成.txt。
打开txt对比两版工程查看在哪一行出错,然后复制替换掉错误部分,应该就可以了。
这样roto可能会少几个最近操作过的几步关键帧,但不会丢太多甚至全丢掉。
您需要登录后才可以回帖 登录 | 加入我们

VFXnews|Archiver|Copyright © 2009-2017 AboutNUKE All rights reserved ( 苏ICP备11087149号 )    

GMT+8, 2018-10-15 18:14 , Processed in 0.014916 second(s), 6 queries , Eaccelerator On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部