首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >After Effects:如何启动外部进程并将其分离

After Effects:如何启动外部进程并将其分离
EN

Stack Overflow用户
提问于 2020-01-26 22:59:29
回答 1查看 781关注 0票数 1

我有一个After Effects脚本问题,但我不确定它是否会用AE知识来解决,也许更多的是独立开发。

我想从After Effects启动一个外部进程,实际上我想用After Effects提供的aerender.exe启动打开的AEP文件的渲染,同时保持它的可用性。

代码语言:javascript
复制
var projectFile = app.project.file;
var aeRender = "C:\\Program Files\\Adobe\\Adobe After Effects CC 2018\\Support Files\\aerender.exe";
var myCommand = "-project" + " " + projectFile.fsName;
system.callSystem("cmd /c \""+aeRender+"\"" + " " + myCommand);

所以我写了这个简单的JSX代码,它可以正确地渲染场景渲染队列。但是After Effects是冻结的,它等待过程的结束。我想让它保持可用。

所以我试着写一个.cmd文件并用AE system.callSystem启动它,我得到了同样的问题,我试着检查一个.exe文件(用pyInstaller从一个简单的python编译而来),同样的问题:

代码语言:javascript
复制
import sys
import subprocess

arg = sys.argv
pythonadress = arg[0]
aeRender = arg[1]
projectFileFSname = arg[2]

myCommand = "-project" + " " +projectFileFSname
callSystem = "cmd /c \""+aeRender +"\"" + " " + myCommand
subprocess.run(callSystem)

我甚至尝试了"cmd /c start ",它似乎更糟糕,因为在过程完成后,After Effects继续冻结。

有没有办法让AE相信这个过程已经完成了,而实际上它还没有完成?

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-27 01:19:06

system.callSystem()将冻结脚本的执行,因此,您可以动态创建一个.bat文件并使用.execute()运行它。

下面是一个示例.js:

代码语言:javascript
复制
var path = {
  "join": function ()
  {
    if (arguments.length === 0) return null;

    var args = [];

    for (var i = 0, iLen = arguments.length; i < iLen; i++)
    {
      args.push(arguments[i]);
    }

    return args.join(String($.os.toLowerCase().indexOf('win') > -1 ? '\\' : '/'));
  }
};

if (app.project.file !== null && app.project.renderQueue.numItems > 0)
{
  var
  // aeRenderPath = path.join(new File($._ADBE_LIBS_CORE.getHostAppPathViaBridgeTalk()).parent.fsName, 'aerender.exe'), // works only in CC 2018 and earlier
  aeRenderPath = path.join(new File(BridgeTalk.getAppPath(BridgeTalk.appName)).parent.fsName, 'aerender.exe'),
  batFile = new File(path.join(new File($.fileName).parent.fsName, 'render.bat')),
  batFileContent = [
    '"' + aeRenderPath + '"',
    "-project",
    '"' + app.project.file.fsName + '"'
  ];

  batFile.open('w', undefined, undefined);
  batFile.encoding = 'UTF-8';
  batFile.lineFeed = 'Unix';
  batFile.write(batFileContent.join(' '));
  batFile.close();

  // system.callSystem('explorer ' + batFile.fsName);
  batFile.execute();

  $.sleep(1000); // Delay the script so that the .bat file can be executed before it's being deleted
  batFile.remove();
}

当然,您可以进一步开发它,使其与OSX兼容,向其.etc添加更多功能,但这是主要的想法。

下面是一个列表,其中包含了所有的生成器选项(如果您还不知道它们的话):https://helpx.adobe.com/after-effects/using/automated-rendering-network-rendering.html

顺便说一句,$._ADBE_LIBS_CORE.getHostAppPathViaBridgeTalk()会给你"AfterFX.exe“文件路径,这样你就可以更容易地得到"aerender.exe”路径。

编辑: CC2019中删除了$._ADBE_LIBS_CORE,因此您可以在CC 2019及更高版本中直接使用BridgeTalk

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59919529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档