2 votes

Le processus de lancement utilisant aerender sort prématurément

J'essaie d'exécuter aerender (le moteur de rendu en ligne de commande d'After Effects) par l'intermédiaire de launchd pour rendre une vidéo à un intervalle de temps donné. La commande fonctionne bien dans le Terminal. Dans launchd - même lorsque j'utilise screen -d -m ... - il sort toujours prématurément. Voici ma configuration.

Passez au bas de la page pour les choses que j'ai déjà essayées.

plist pour launchd :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.home.VideoGenerator</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Users/home/Developer/VideoGenerator/exec/render.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <false/>
    <key>StartInterval</key>
    <integer>300</integer>
    <key>StandardErrorPath</key>
    <string>/var/log/com.home.VideoGenerator.err.log</string>
    <key>StandardOutPath</key>
    <string>/var/log/com.home.VideoGenerator.out.log</string>
</dict>
</plist>

render.sh script :

#!/bin/bash
/Applications/Adobe\ After\ Effects\ CC\ 2018/aerender -project /Users/home/Developer/VideoGenerator/resource/video.aep -comp ExportMe -output /Users/home/Developer/VideoGenerator/output/video.mov -OMtemplate Output

Sortie :

Voici à quoi ressemble la sortie normale, lorsque j'exécute ./render.sh à partir de la ligne de commande :

aerender version 15.0.1x73
PROGRESS: Launching After Effects...
PROGRESS: ...After Effects successfully launched
PROGRESS: Adding specified comp to Render Queue
PROGRESS:  4/2/18 8:41:57 AM PDT: Starting composition ExportMe.
...

C'est tronqué. Il sort également les paramètres de composition et la progression du rendu, toujours avec succès. Rien d'utile pour cet usage.

Voici la sortie enregistrée lorsque je l'exécute à partir de launchd :

aerender version 15.0.1x73
PROGRESS: Launching After Effects...
PROGRESS: ...After Effects successfully launched

Et c'est tout. (En réalité, je l'exécute dans un contexte où je peux enregistrer le code de sortie et c'est toujours 0. Dans ce but, j'ai radicalement simplifié le projet à ce que vous voyez ici, et il ne fonctionne toujours pas).

Des choses que j'ai essayées :

  • Définir KeepAlive a true dans la liste
    • Cela relance juste le processus après qu'il soit sorti.
  • Añadir /dev/null comme le StandardInPath dans le plist (comme dans ce poste )
    • Sortir encore tôt
  • Añadir -i y -c au début de ProgramArguments (de la même poste que ci-dessus )
    • La commande ne s'exécute pas
  • Définir AbandonProcessGroup a true dans la liste
    • Sortir encore tôt
  • Ajouter & pour mettre la tâche en arrière-plan
    • Silence dans la sortie
  • Lancement aerender avec screen -d -m ...
    • En utilisant l'indicateur -L et en vérifiant le journal, la sortie est la même ; elle s'arrête après aerender lance After Effects, puis quitte avant le rendu.

Running ps aux | grep aerender montre plus de 20 processus en cours d'exécution (probablement en raison de toutes les fois où j'ai exécuté le script), la plupart d'entre eux aerendercore . Mais pas de sortie, pas de vidéo.

Qu'est-ce que je fais de mal ?

2voto

Bill_Stewart Points 1132

(Modifié/mis à jour)

Selon ce fil de discussion sur StudioSysAdmins Le problème auquel je suis confronté est le suivant. aerender La dépendance à l'égard du gestionnaire de fenêtres.

Aerender est un hack qui enveloppe l'interface entièrement graphique d'After Effects. avec une interface de rendu basique en ligne de commande. Le noyau AE lui-même dépend toujours directement du gestionnaire de fenêtres. ...

- Robin Scher

J'ai fini par contourner ce problème en utilisant AppleScript ( osascript ) dans la liste des propriétés comme suit :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    ...
    <key>ProgramArguments</key>
    <array>
      <string>/usr/bin/osascript</string>
      <string>/absolute/path/to/run.applescript</string>
    </array>
    <key>KeepAlive</key>
    <false/>
</dict>
</plist>

Voici ce que run.applescript ressemble :

tell app "/Applications/Utilities/Terminal.app"
  set w to do script "/Users/home/Developer/VideoGenerator/exec/render.sh; exit 0"
  repeat
    delay 1
    if busy of w is false then exit repeat
  end repeat
  #display dialog "finished"
end tell

Je dis launchd à utiliser osascript à exécuter aerender dans le contexte d'une fenêtre Terminal. Un peu alambiqué, mais ça marche !

2voto

Graham Miln Points 39606

Comme vous l'avez découvert, aerender nécessite un accès au Window Manager . Vous pourriez essayer de mettre votre travail dans ~/Library/LaunchAgents qui s'exécute dans la session de l'utilisateur, ou utilisez un autre outil de planification.

Lancement de l'alternative

Si un utilisateur est connecté ou même si un utilisateur rapide est déconnecté, vous pouvez utiliser un outil comme Gestionnaire d'énergie pour exécuter votre Window Manager nécessitant des scripts et des applications.

Power Manager on macOS

J'ai écrit Power Manager, alors n'hésitez pas à poser des questions techniques. Je le suggère dans ce cas, car ce que vous voulez est possible grâce à l'architecture de l'outil.

Accès par utilisateur et par gestionnaire de fenêtres

Power Manager exécute un processus par utilisateur appelé pmuser . Ce processus vous permet d'exécuter des scripts et des tâches planifiées en tant qu'utilisateur spécifié ou en tant que Utilisateur actif - l'utilisateur le plus en avant.

Dans votre événement Power Manager, recherchez l'élément Environnement pop-up. Ceci contrôle l'environnement utilisateur dans lequel votre script s'exécutera. Utilisateur actif est la session utilisateur graphique la plus en vue et a accès au gestionnaire de fenêtres.

Power Manager scripting within the graphical user session

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X