Scripting no after vs C4D
Os dois softwares têm sistemas de scripting muito diferentes em filosofia: o after usa ExtendScript (JavaScript), o C4D usa Python. Entender as diferenças ajuda a decidir onde automatizar cada tarefa.
A regra das 3 repetições
Se você fez algo manualmente 3 vezes e vai fazer de novo, escreva um script. O tempo investido em automatizar é recuperado já na quarta execução.
Exemplos que valem automatizar:
- renomear 200 arquivos de render com convenção de nomenclatura específica
- criar 50 variações de um lower third com dados de um CSV
- verificar se todas as comps de um projeto estão na mesma resolução e FPS
- exportar múltiplos formatos do mesmo projeto automaticamente
Scripts vs Plugins vs Expressões
| Quando usar | Ferramenta |
|---|---|
| Tarefa pontual, roda uma vez | Script sem UI |
| Ferramenta reutilizável com interface | Plugin com UI |
| Animação procedural em tempo real | Expressão ou VEX |
After Effects: ExtendScript
O after usa ExtendScript, uma versão antiga do JavaScript (ES3) desenvolvida pela Adobe. É lento, sem suporte a ES6+, mas ainda é o padrão para automação no after.
// ExtendScript: renomeia todas as layers da comp ativavar comp = app.project.activeItem;app.beginUndoGroup("Renomear layers");
for (var i = 1; i <= comp.numLayers; i++) { var layer = comp.layer(i); layer.name = "Layer_" + i;}
app.endUndoGroup();O ExtendScript roda dentro do after via File > Scripts > Run Script File ou instalado em ScriptUI Panels.
Cinema 4D: Python 3
O C4D usa Python 3 moderno, com suporte a f-strings, type hints, list comprehensions, e bibliotecas externas via pip:
# Python C4D: renomeia todos os objetos da cenaimport c4d
def main(): objects = doc.GetObjects() app.beginUndoGroup()
for i, obj in enumerate(objects): doc.AddUndo(c4d.UNDOTYPE_CHANGE_NOCHILDREN, obj) obj.SetName(f"Object_{i+1:03d}")
app.endUndoGroup() c4d.EventAdd()
if __name__ == '__main__': main()Comparação prática
| Tarefa | After (ExtendScript) | C4D (Python) |
|---|---|---|
| Renomear em batch | Simples | Simples |
| Criar keyframes | Direto | Direto |
| Ler/escrever arquivos | Com File object | Com open() nativo |
| Usar bibliotecas externas | Muito limitado | pip install |
| Criar interfaces (UI) | ScriptUI | c4d.gui |
| Processar geometria | Não tem geometria | Completo |
| Velocidade de execução | Lento | Médio |
Quando usar cada um
Automatize no after quando:
- o problema envolve keyframes, layers e comps
- você precisa processar múltiplas comps em batch
- precisa criar templates dinâmicos (essencial para MOGRT)
- o workflow é todo dentro do after
Automatize no C4D quando:
- o problema envolve geometria, objetos ou cena 3D
- você precisa de lógica complexa com bibliotecas Python
- está criando ferramentas de pipeline
- precisa integrar com sistemas externos (banco de dados, API)
O melhor dos dois mundos: pipeline cruzado
Para pipelines que cruzam os dois softwares, usa Python no C4D para gerar dados e ExtendScript no after para consumir via JSON:
# C4D: exporta posições de objetos como JSONimport c4d, json
data = {}for obj in doc.GetObjects(): pos = obj.GetAbsPos() data[obj.GetName()] = {'x': pos.x, 'y': pos.y, 'z': pos.z}
with open('/tmp/scene_data.json', 'w') as f: json.dump(data, f)// AE: lê o JSON e cria nulos nas posiçõesvar file = new File('/tmp/scene_data.json');file.open('r');var data = JSON.parse(file.read());file.close();
var comp = app.project.activeItem;for (var name in data) { var null_layer = comp.layers.addNull(); null_layer.name = name; null_layer.property('Position').setValue([data[name].x, data[name].y]);}Info
Casos de uso por software, de forma rápida: after para keyframes e comps, C4D para geometria e pipeline 3D, Houdini para integrar com render farm ou gerar cena a partir de dados externos.