去年我有一个项目,给了我一个用户信息数据库。
对于每个条目,我为每个条目创建了一个动画。他们的名字渐渐消失。相当简单。但这是单调的,因为我每次都要加载一个文件,更改文本并重新呈现为输出。
有没有方法可以使用mysql/excel数据库作为批处理脚本来完成这个过程?
所以我可以录制一个宏,加载一个链接数据库的脚本,然后按go键-为每个条目创建动画,节省了大量时间。
在玛雅有解决这个问题的办法吗,后效?
最佳答案
介绍
这里有几个问题,如果没有访问您的计算机设置和场景,这个问题就不能得到很好的回答。我可以很容易地想到20个不同的变化为AE和50为玛雅。但总的来说可能有上百种方法。
数据库
因为您的数据库的路径可以改变,您可能需要能够切换数据库。因此,只需将表导出为每行一组名称、制表符分隔或逗号分隔的文件。这样就不需要详细讨论数据库处理。现在,您的fronted可以很容易地成为excel甚至oracles数据库。
后遗症
在数据库条目上循环可以通过很多方式完成。Adobe附带了2-4个不同的API来实现这一点。你使用什么取决于你想要的结果是什么,一个连续的序列,个别的帧或个别的动画文件(我强烈建议分别制作渲染,然后分别压缩与生产相关的原因)。
最简单的方法是使用扩展工具包脚本文件来驱动AE,脚本手册可以找到here和here。首先假设您的项目具有:
一个名为“comp 1”的comp
Comp有一个文本层“Text 1”
现在可以按如下方式访问和更改扩展脚本中的文本层:
var firstComp = app.project.item(1);
var textLayer = firstComp.layers[1];
textLayer.property("Source Text").setValue("John Doe");
您要做的是遍历名称并更改文本和呈现
var dataPath = "D:\\temp\\test.txt";
var outPath = "/d/temp/";
var firstComp = app.project.item(1);
var textLayer = firstComp.layers[1];
var fileObject = File ( dataPath ) ;
fileObject.open ('r');
while ( ! fileObject.eof ) {
var name = fileObject.readln() ;
textLayer.property("Source Text").setValue(name);
name = name.replace(" ","_");
renderJob = app.project.renderQueue.items.add(firstComp);
OM = renderJob.outputModule(1);
OM.file= new File(outPath+name+".avi");
app.project.renderQueue.render();
}
如果运行此命令,并且场景条目的相对位置如所述,则它将在文件中的每个名称上循环并完成此操作。
玛雅
在Maya中,我将使用稍微不同的策略,而不是在Maya中填充和调用render,而是在命令行的render调用中修改场景。这样既安全又好。虽然windows中的命令行功能相对较差,但它在这里工作得很好。
因此,假设使用bevel节点bevel1生成文本,并调用以下相当长的命令行,则会交换输出文件的名称和文本并呈现输出:
render -preRender "setAttr ""defaultRenderGlobals.imageFilePrefix"" -type ""string"" ""foos""; setAttr -type ""string"" textForBevel1.text ""foos""; " test.ma
现在要把它打包成一批循环
echo off
set code="setAttr ""defaultRenderGlobals.imageFilePrefix"" -type ""string"" ""%%G""; setAttr -type ""string"" textForBevel1.text ""%%G"";"
for /f "tokens=*" %%G IN (test.txt) DO (
render -preRender %code% test.ma
)
为什么成批?这很简单,但是还有另一个原因,玛雅会在错误的一条线上退出,剩下的一条线会继续。将其包装到任何呈现管理器中都是很简单的。
还有其他方法