Skip to main content

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 usarFerramenta
Tarefa pontual, roda uma vezScript sem UI
Ferramenta reutilizável com interfacePlugin com UI
Animação procedural em tempo realExpressã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 ativa
var 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 cena
import 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

TarefaAfter (ExtendScript)C4D (Python)
Renomear em batchSimplesSimples
Criar keyframesDiretoDireto
Ler/escrever arquivosCom File objectCom open() nativo
Usar bibliotecas externasMuito limitadopip install
Criar interfaces (UI)ScriptUIc4d.gui
Processar geometriaNão tem geometriaCompleto
Velocidade de execuçãoLentoMé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 JSON
import 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ções
var 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.