C++和Adobe扩展脚本(After Effects)[已关闭]

3htmauhk  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(105)

**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。

这个问题似乎与help center中定义的范围内的编程无关。
3天前关闭。
Improve this question
我如何从我的C应用程序内部运行Adobe Extend Scripts?我有一个工作JSX文件,如果我打开After Effects项目并运行脚本,它可以完成我需要的工作。
我基本上是在使用C
的after effects项目上调用JSX脚本。
我问了ChatGPT这个问题(多么现代的我),它提到了以下代码:

#include <iostream>
#include "extendscript.h"

int main()
{
    // Create an instance of the ExtendScript object
    ExtendScript script;

    // Load the ExtendScript script file
    if (!script.LoadScriptFile("myscript.jsx"))
    {
        std::cerr << "Failed to load script file" << std::endl;
        return 1;
    }

    // Set the 'this' property of the ExtendScript object to the current After Effects project
    script.SetThisProperty(app.project);

    // Execute the script
    if (!script.EvaluateScript())
    {
        std::cerr << "Failed to evaluate script" << std::endl;
        return 1;
    }

    // Retrieve the project name from the script
    ExtendScriptValue result = script.GetGlobalProperty("projectName");

    // Print the project name
    std::cout << "The project name is: " << result.ToString() << std::endl;

    return 0;
}

这看起来很酷,但我在网上找不到任何与上述API调用匹配的东西,也找不到任何方法来找到这个难以捉摸的“extendscript. h”文件。
这完全有可能是ChatGPT编造的,给了我虚假的希望。

dsekswqp

dsekswqp1#

因此,我找到了一个解决方法,即在C++代码中运行两个终端命令,并在第二个命令上执行条件执行(&&)。
第一个terminal命令打开.aep文件:

open -b com.adobe.AfterEffects --args /Users/ExampleUser/ExampleFolder/TestProject.aep

第二个终端命令(使用AppleScripts)运行JSX文件:

osascript -l JavaScript -e "ae = Application('Adobe After Effects 2023'); ae.activate(); ae.doscriptfile('/Users/ExampleUser/ExampleFolder/TestScript.jsx');"

因此,要在C++内部运行它们:

#include <iostream>
int main() {

    std::string command = "open -b com.adobe.AfterEffects --args /Users/ExampleUser/ExampleFolder/TestProject.aep && osascript -l JavaScript -e \"ae = Application('Adobe After Effects 2023'); ae.activate(); ae.doscriptfile('/Users/ExampleUser/ExampleFolder/TestScript.jsx');\"";

    system(command.c_str());
    return 0;
}

它打开AE项目,等待该操作完成,然后在该项目上运行脚本。
我相信你还可以补充:

app.project.close(CloseOptions.SAVE_CHANGES);
app.quit();

如果您希望AE在脚本运行后关闭,请将其添加到JSX。
也可能有一个--noui标记,可以在某个地方使用,这样您就不需要“看到”它被打开和运行,但我还没有弄清楚这一点。
如果有人有更好的解决办法,请告诉我!

相关问题