AE finally managed to fully utilise my CPU

…and this is what it took. Since Adobe removed multi-processing from After Effects I’ve been using the shell to run multiple instances of the aerender application. This can lead to massive performance gains – the screenshot below shows a 4,000% improvement in speed.

For projects such as this one, which wasn’t heavy on memory, I wanted to make the most of the 40 physical cores on this machine (it’s a dual Xeon E5-2690 with 20 cores on each CPU). As a single instance aerender was doing one frame every 3 seconds, and hardly using any resources. Adding another 39 instances hardly changed the per-frame render time for each instance, meaning that it was roughly 40 times as fast.

2016-11-02-11_25_29

Of course you have to match the number of instances to the available system resources. If you use up all the available RAM, even if the CPU isn’t fully utilised, it won’t help to add more instances. In fact as soon as you exceed the available RAM things will start to crawl r e a l l y s l o w. Also, if you’re rendering high resolution projects that use GPU effects, like Lumetri, you might run into problems if the GPU runs out of RAM. So it’s best to have a task monitor going to keep an eye on things—I recommend CPU-Z and GPU-Z.

For powershell users the Start-Process command comes in handy here:

$numberOfInstances = 40;
for ($i = 0 ; $i -lt $numberOfInstances; $i++ ){
    Start-Process 'C:\Program Files\Adobe\Adobe After Effects <<version>>\Support Files\aerender.exe' -ArgumentList '-project', '"c:\path\to\project.aep"'
    sleep 5;
}

This will start 40 instances of aerender.exe, and have them render the file project.aep. Obviously you have to supply the correct path to the aerender executable, the easiest way is to drag it into the console window; ditto for the path to the project. Note the single quotes surrounding the double quotes – you need to ‘tarp up double’ for it to work.

If you don’t want all the console windows littering your screen you can add the -nonewwindow option at the end of the command. This will send all the output from all the aerender instances to the console that you’re currently in. This can lead to garbled messages, and it’s hard to see exactly what’s going on, but you won’t have lots of windows to tab through when you’re switching apps, and if something goes wrong the message won’t disappear when the window closes.

You also have to make sure you’re using the multi-machine render settings and an image sequence output module. This is the downside of doing it this way: you’ll need to use ffmpeg or media encoder to turn the sequence into a movie at the end. The up-side is that you can stop and start the render, or even add and delete instances when you need more or less resources – for example if you want to keep working and have it render in the background.

15 comments

  1. Hi!
    Can you share A little bit about your comp setup?
    Ssd for main comp and another for cache? How much ram?

    Im not getting nice results with my dual xeon 64 ram , ssd 48 threads.
    AeCc2017
    Thanks you

    Reply

  2. My setup is similar dual Xeon E5-2960 w 64Gb RAM, Windows 10. It’s a beast for multiprocessing, great for having renders going in the background while still working.

    The process outlined above works whenever the comp is not too memory intensive. If you use up all your memory and it starts thrashing the page-faults it’s going to slow down like it’s full of molasses. So don’t use it for any comp that needs a lot of RAM. Same might apply for GPU if you’re using lots of GPU-rendered effects, but I haven’t seen that happen yet. Basically, you have to keep an eye on the system resources using the task monitor or similar.

    Reply

    1. Thank you for replying me! Im tweeking my setup because my footage is In 4k and for vr. I ended up using deadline software from Think Box. I choose that because when i use multi machine rendering , sometimes 5% of The after instance closes with The info “sequencesetdown”. Without any reason. With deadline i can open 2 slaves with 15 tasks resulting In 30 after instance and setting whitch range of frames it will render, instead of everytime look for missing frames on The folder. With this i could change The rendertime from 1 hour to 20 minutes, and i got More control over The instance. I could show you how i doit if you interested.

      Reply

  3. Hi There

    This is Awesome Thanks a lot.

    I was thinking Why don’t you make a simple AE script which easily does this process and also would benefit me and all users who suffer from low-speed rendering I think this will be great.

    best regards

    Reply

  4. just absolutely amazing. a 35 hour render done in about 2 and a half hours using a xeon 5675 processor, 24Gb ram. you just need to lower AE ram usage so you don’t choke the system. everything runs smooth after that. it’s amazing how fast the render finishes. thank you very very much

    Reply

    1. No problem. I’m always surprised how few people use the command line renderer.

      Reply

  5. I do the procedure, but immediately afterwards the isntances close. AE does not keep windows active and the render is only in a single powershell window. Do you know what may be happening?

    Reply

    1. That’s probably a problem with your project. Do you have multi-machine as your template for the comps?

      Reply

  6. Hey STIB

    Thanks for the guide, just a few questions if you don’t mind answering

    How would the command line know which specific comp to render if I have multiple comps in the AEP file?

    and second

    How would I specify the renderer to output tiff or png images? and its save location? as I can see its not in the command either?

    Reply

  7. Can’t believe it took me years to learn this! Thanks a lot! 🙂
    Have had renderings that took ages and always hated AE for being so slow at rendering – or so I thought.
    What image format do you render out to most of the times?

    Reply

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.