Hiero 导出的 xml 导入达芬奇会崩
- Hiero
- Nuke Studio
- 视效剪辑
Hiero 导出的 xml 导入达芬奇会崩
背景
公司的视效剪辑发来求救信息:
纳闷
Hiero
导出的一个xml
,导入达芬奇后,达芬奇直接崩了,其他的 xml
都没事。
那肯定是这个 xml
有问题呗,要来了出问题的 xml
和 没毛病的 xml
。
还原犯罪现场
在达芬奇里右键 import > xml
,指定有问题的 xml 文件,然后鼠标变圈圈,几秒后然后达芬奇就直接退出了。
然后导入那个没毛病的 xml
,恩,果然没毛病。
这个过程我称之为还原犯罪现场,验证一下提问者描述的信息是不是准确,是不是在我的环境下也出现。
这并不是怀疑提问者骗我什么的,而是先排除最傻瓜情况的可能。
初步排查
打开问题 xml
,大致浏览一下,是不是有一看就不对头的信息,比如乱码啦,xml
标签格式不匹配没关闭等。
并没有,那是不是有跟其他xml
很不一样的地方呢?
我使用 beyond compare
软件,把两个 xml
拽进来对比一下。
有问题的 xml
并没有特殊的标签块。
抽丝剥茧
只要来最笨的一招,逐段排查。
删掉绝大部分 clip
,只保留 一个 track
,其中里面只包含一个 clip
,保存,导入,还是崩。
这时候就很开心啦,xml
文件由原来的 80kb
,变成了 1kb
,犯罪嫌疑人的范围大大缩小了。
把一个正常 xml
的里面的一个 clip
复制,粘贴并替换掉出错文件中那个唯一的 clip
段,保存,导入,正常!
也就是说犯罪嫌疑人窝藏在 clip
标签里面。
然后对 clip
标签里面的内容进行逐一排查(方法还是上面说的),你可以二分法,可以黄金分割法。
总之,最后我定位到了 <file id="piantou">
这一行中的 “piantou”。
难道这里暗藏什么玄机?不能 u
结尾?不能 p
打头?(这是另一个故事,某个nuke文件提交渲染农场总是报错)
但也没听说过 Final Cut Pro 7
的 xml
有这种规定啊。
测试验证:
- 改成“hahaha” √
- 改成“iantou” √
- 改成“piantoa” √
- 改成“piantou1” √
改成任何字符串都没问题,只是不能叫“piantou”。太神奇了!简直匪夷所思。
警告
《片头有鬼》正在热映中...
于是先把出问题的 xml
查找 <file id="piantou">
并全部替换为 <file id="_piantou">
。
导入成功,先发给那个视效剪辑应应急,她还在线等着.....
小黄鸭调试法
燃眉之急解了后,就必须揪出凶手了。
我叫来了张来吃,把上述过程描述了一遍,然后说:
一脸懵逼的来吃看着我
这个 “piantou” 字符串出现在 xml
哪儿哪儿都是,media 文件名字是,clip
名字也是,文件名字也是,连(滚动文件到最上面)sequence
也叫“piantou”!
啊咧,等一下,这个 sequence
也有个 id
,(<sequence id="piantou">
), 直觉告诉我,id
嘛,肯定得独一无二啊,但一个是 file
, 一个是 sequence
,类型不一样,难道 id
也不能冲突吗??
试了一下,修改 sequence
的 id
为 "hahaha",保存,导入,正常!
果了个然!破案了!Hiero
的锅!
好了,来吃你可以走了。
这里,来吃就充当了程序员口中的“小黄鸭”。
小黄鸭调试法
总结陈词
Hiero
在导出 xml
的时候,会将 sequence
的名字,直接作为 id
值,同样,clip file
的名字,直接作为 id
值,Hiero
并没有去判断它生成的 id
是否有撞车情况。
但是达芬奇读取 xml
的过程使用了 id
信息。
证据如下
我把这段话发给了视效剪辑,让她以后注意,并建议她 sequence
换个名字(代价最小)。
什么?让我魔改 Hiero
导出 xml
的代码?
告辞,我和 Hiero
何必互相伤害,你等它更新就行了......
Hiero
是太年轻,但达芬奇您老人家也不够健壮啊,就不能给点提示,直接崩也是颜面扫地。
至于说类型不同的,为何 id 也必须唯一,没啥好纠结的,只是一种选择和约定而已,靠左行驶还是靠右行驶,Final Cut Pro 7
规定是啥就是啥(我也不知道白皮书有没有规定)。
尾声
有些人好奇 TD 每天都干啥。
视效剪辑问我怎么这么神奇,每次都能找到问题答案,而且还看起来还好简单的样子,只用记事本notepad++
就能解决问题,能不能教两招。
招式学了也不能生搬硬套,我就如实记录一下日常工作和解决的思路。希望可以对碰到同样问题的读者,或者类似问题的读者有帮助。