Guía del usuario Cancelar

Comprensión del lenguaje de expresión

Aprenda el lenguaje de expresión y utilícelo para crear diferentes expresiones en After Effects.

El lenguaje de expresión de After Effects está basado en JavaScript, con un conjunto extendido de objetos integrados. After Effects utiliza el lenguaje estándar de base de JavaScript, no las extensiones específicas del explorador web, y contiene su propio conjunto de objetos de extensión, como Capa, Comp, Material de archivo y Cámara.

Aunque el lenguaje de expresión se basa en un lenguaje de scripts, existe una diferencia sutil, pero esencial, entre un script y una expresión. A diferencia de un script, que indica a la aplicación que haga algo, una expresión indica a la propiedad que haga algo.

Al crear expresiones, tenga en cuenta lo siguiente:

  • El valor de una expresión es el valor de la última instrucción evaluada. Normalmente, esta es la última línea de la expresión. En su forma más sencilla, el valor de una expresión lo produce la última variable o función llamada en la expresión con base en el orden de evaluación. Sin embargo, también puede ser cualquier valor al que se haga referencia explícitamente como el valor devuelto. Esto puede incluir valores utilizados mucho antes en la expresión con fines de depuración o valores fuera de las variables y funciones declaradas explícitamente que no se procesan en el orden en que se escribieron.
  • JavaScript es un lenguaje que reconoce mayúsculas y minúsculas.
  • Las funciones no deben declararse en la parte inferior de una expresión.

Conceptos básicos sobre lenguajes

En JavaScript, un valor almacenado en un objeto se denomina propiedad. No obstante, After Effects usa el término propiedad para hacer referencia a los componentes de capa según se define en el panel Línea de tiempo. Por este motivo, en After Effects se hace referencia a las propiedades de JavaScript como métodos o atributos. En la práctica general, la diferencia entre un método y un atributo es que un método normalmente hace algo para crear su valor de salida (devolución), mientras que un atributo simplemente hace referencia a un valor existente para determinar su valor de salida (devolución). La forma más sencilla de diferenciar un método de un atributo es buscando los paréntesis que aparecen detrás del nombre del método, que rodea cualquier argumento de entrada al método.

Un objeto es un elemento que puede contener otros objetos, atributos y métodos. Las composiciones, capas y elementos de material de archivo son ejemplos de objetos. En concreto, las composiciones, capas y elementos de material de archivo son objetos globales, lo cual significa que se puede hacer referencia a ellos en cualquier contexto sin necesidad de hacer referencia a otros objetos de nivel superior.

Acceso a atributos y métodos

Utilice el lenguaje de expresiones para acceder a los atributos y métodos de las propiedades de capa. Para acceder a un valor, utilice una cadena de referencias a objetos separadas por el punto (.). Para encadenar referencias a objetos en un nivel superior al de capa (por ejemplo, para hacer referencia a propiedades de Efectos, máscaras o animadores de texto), también pueden utilizarse los paréntesis. Por ejemplo, para vincular la propiedad Opacidad de la Capa A con la propiedad Difuminación del efecto Desenfoque gaussiano de la Capa B, escriba la siguiente expresión en el campo de expresión de la propiedad Opacidad de la Capa A:

thisCompayer(“Layer B”)ffect(“Gaussian Blur”)(“Blurriness”)
thisCompayer(“Layer B”)ffect(“Gaussian Blur”)(“Blurriness”)
thisCompayer(“Layer B”)ffect(“Gaussian Blur”)(“Blurriness”)

Al leer esta expresión de izquierda a derecha, avanzará desde el nivel superior, que contiene el objeto, hasta la propiedad específica:

  • El objeto global utilizado hace referencia a la composición actual: thisComp.

  • A un objeto de capa específico dentro de esa composición se hace referencia por su nombre: capa(“Capa B”).

  • A un objeto de efecto específico dentro de esa capa se hace referencia por su nombre: efecto(“Desenfoque gaussiano”).

  • A una propiedad de efecto específica dentro de ese efecto se hace referencia por su nombre: (“Difuminación”).

Para el componente n de una propiedad multidimensional, como el componente y de un punto de control de efecto, añada [n] al final, tal y como se muestra a continuación:

thisCompayer(“Layer B”)ffect(“Advanced Lightning”)(“Origin”1]
thisCompayer(“Layer B”)ffect(“Advanced Lightning”)(“Origin”1]
thisCompayer(“Layer B”)ffect(“Advanced Lightning”)(“Origin”1]

El objeto predeterminado de una expresión es la propiedad en la que está escrita la expresión, seguida de la capa que contiene la expresión; por lo tanto, no es necesario especificar la propiedad. Por ejemplo, la expresión de una ondulación escrita sobre la propiedad Posición de una capa puede ser de cualquier de las siguientes maneras:

wiggle(5, 10)
position.wiggle(5, 10)
thisProperty.wiggle(5, 10)
wiggle(5, 10) position.wiggle(5, 10) thisProperty.wiggle(5, 10)
wiggle(5, 10)  
position.wiggle(5, 10) 
thisProperty.wiggle(5, 10)

Incluya la capa y la propiedad al recuperarlas del exterior de la capa y la propiedad en las que está escrita la expresión. Por ejemplo, una expresión escrita en la propiedad Opacidad de la Capa B y con vinculación a la propiedad Rotación de la Capa A sería como la siguiente expresión:

thisCompayer(“Layer A”)otation
thisCompayer(“Layer A”)otation
thisCompayer(“Layer A”)otation
Nota:

Para ver más ejemplos sobre cómo funcionan las expresiones, utilice el icono espiral para vincular una propiedad de capa a otra y observe la expresión que se crea.

Conjuntos y propiedades multidimensionales

Un conjunto es un tipo de objeto que almacena un grupo ordenado de números. Un conjunto se representa como una lista de números separados por comas y escritos entre corchetes, como en este ejemplo:

[10, 23]
[10, 23]
  [10, 23]

Puede asignar un objeto Conjunto a una variable, lo que facilita la referencia a valores de conjunto en otras áreas de la expresión. Por ejemplo:

myArray = [10, 23]
myArray = [10, 23]
  myArray = [10, 23]

La dimensión de un objeto de conjunto es el número de elementos en el conjunto. La dimensión de myArray es 2. Las distintas propiedades de After Effects tienen diferentes dimensiones según el número de argumentos de valores que tienen. En el lenguaje de expresión, los valores de las propiedades son valores sencillos (objetos Número) o conjuntos (objetos Conjunto).

En la siguiente tabla encontrará ejemplos de algunas propiedades y sus dimensiones:

Dimension

Propiedad

1

Rotación °

Opacidad %

2

Escala [x = anchura, y = altura]

Posición [x, y]

Punto de ancla [x, y]

Niveles de audio [izquierdo, derecho]

3

Escala [anchura, altura, profundidad]

Posición 3D [x, y, z]

Punto de ancla 3D [x, y, z]

Orientación [x, y, z]

4

Color [rojo, verde, azul, alfa]

Para acceder a los elementos individuales de un objeto Conjunto, utilice los corchetes y un número de índice que indique el elemento deseado. Los elementos de un objeto Conjunto se indexan a partir de 0. Con el ejemplo anterior, myArray[0] es 10 y myArray[1] es 23.

Las siguientes dos expresiones son equivalentes:

[myArray[0], 5]
[10, 5]
[myArray[0], 5] [10, 5]
  [myArray[0], 5] 
  [10, 5]

Conjuntos de la propiedad Posición

Los conjuntos de la propiedad Posición se indexan de la siguiente manera:

  • position[0] es la coordenada x de la posición.

  • position[1] es la coordenada y de la posición.

  • position[2] es la coordenada z de la posición.

Representación de colores en los conjuntos

Los colores se representan como conjuntos 4D:

  • Rojo
  • Verde
  • Azul
  • Alfa

En los proyectos con una profundidad de color de 8 ó 16 bpc, cada valor de un conjunto de colores oscila entre 0 (negro) y 1 (blanco). Por ejemplo, el rojo puede variar entre 0 (sin color) y 1 (rojo). Por lo tanto, [0,0,0,0] es negro y transparente, mientras que [1,1,1,1] es blanco y opaco. En los proyectos con una profundidad de color de 32 bpc, se permiten valores por debajo de 0 y por encima de 1.

Si utiliza un índice mayor que el índice del componente de mayor dimensión en un objeto Conjunto, After Effects devolverá un error. Por ejemplo, myArray[2] generará un error; en cambio, position[2] devolverá la coordenada z de Posición.

Muchas de las propiedades y métodos del lenguaje de expresión de After Effects toman los objetos Conjunto como argumentos o los devuelven como valores. Por ejemplo, thisLayer.position es un objeto Conjunto bidimensional o tridimensional dependiendo de si la capa es 2D o 3D.

Ejemplos

Si desea escribir una expresión que conserve el valor y de una animación de Posición, pero que fije el valor x en 9, utilice lo siguiente:

y = position[1];
[9,y]
y = position[1]; [9,y]
  y = position[1]; 
  [9,y]

La siguiente expresión es aún más sucinta:

[9, position[1]]
[9, position[1]]
  [9, position[1]]

Es un punto importante y por ello analizaremos un ejemplo más. Si desea combinar el valor de posición x de la Capa A con el valor de posición y de la Capa B, utilizaría la siguiente expresión:

x = thisCompayer(“Layer A”)osition[0
y = thisCompayer(“Layer B”)osition[1
[x]
x = thisCompayer(“Layer A”)osition[0 y = thisCompayer(“Layer B”)osition[1 [x]
  x = thisCompayer(“Layer A”)osition[0  
  y = thisCompayer(“Layer B”)osition[1  
  [x]

Puede crear una expresión que haga referencia a solo un valor del conjunto de una propiedad 2D o 3D. De manera predeterminada, se utiliza el primer valor, a menos que se especifique lo contrario. Por ejemplo, si arrastra el icono espiral de la propiedad Rotación de la Capa A a la propiedad Escala de la Capa B, aparece la siguiente expresión:

thisCompayer(“Layer B”)cale[0]
thisCompayer(“Layer B”)cale[0]
  thisCompayer(“Layer B”)cale[0]

De manera predeterminada, la expresión anterior utiliza el primer valor de la propiedad Escala, que es la anchura. Si prefiere utilizar el valor de la altura, arrastre el icono espiral directamente hasta el segundo valor en lugar del nombre de la propiedad o cambie la expresión de la siguiente manera:

thisCompayer(“Layer B”)cale[1]
thisCompayer(“Layer B”)cale[1]
  thisCompayer(“Layer B”)cale[1]

En cambio, si arrastra el icono espiral desde la propiedad Escala de la Capa B a la propiedad Rotación de la Capa A, After Effects crea automáticamente una variable, le asigna el valor unidimensional de la propiedad Rotación y, a continuación, utiliza esa variable para ambas dimensiones de la propiedad Escala:

temp = thisComp.layer(1).transform.rotation;
[temp, temp]
temp = thisComp.layer(1).transform.rotation; [temp, temp]
  temp = thisComp.layer(1).transform.rotation;
 [temp, temp]

Vectores

En After Effects, muchas propiedades y métodos contienen o devuelven vectores. After Effects hace referencia a un conjunto como vector si representa un punto o una dirección en el espacio. Por ejemplo, After Effects describe la posición en la forma de un vector.

Sin embargo, aunque una función como audioLevels devuelve un valor bidimensional (los niveles de canal izquierdo y derecho), no se denomina vector porque no representa ni un punto ni una dirección. Algunas funciones de After Effects aceptan argumentos vectoriales, pero generalmente solo son útiles cuando los valores transmitidos representan una dirección. Por ejemplo, cross(vec1, vec2) calcula un tercer vector que forma ángulos rectos con los vectores de entrada. El producto cruzado es útil cuando vec1 y vec2 son dos vectores que representan direcciones en el espacio, pero no lo es si solo representan dos conjuntos arbitrarios de números.

Índices y etiquetas

La indexación de los elementos de Capa, Efecto y Máscara en After Effects empieza en 1. Por ejemplo, la primera capa del panel Línea de tiempo es layer(1).

Por lo general, es mejor utilizar el nombre de una capa, efecto o máscara en lugar de un número para evitar confusiones y errores si se mueve la capa, el efecto o la máscara, o bien si los argumentos cambian durante las actualizaciones de productos. Cuando utilice un nombre, enciérrelo siempre entre comillas rectas. Por ejemplo, la primera de estas expresiones es más fácil de comprender que la segunda; la primera sigue siendo válida aunque se cambie el orden de los efectos:

effect(“Colorama”)aram(“Get Phase From”)
effect(1)aram(2)
effect(“Colorama”)aram(“Get Phase From”) effect(1)aram(2)
  effect(“Colorama”)aram(“Get Phase From”)  
  effect(1)aram(2)

Expresión tiempo

El tiempo dentro de una expresión siempre se sitúa en el tiempo de composición (no en el tiempo de capa) y se mide en segundos (no sucede con la expresión sourceRectAtTime()). El tiempo predeterminado de cualquier expresión es el tiempo de composición actual en el que se está evaluando la expresión. Las dos expresiones siguientes utilizan el tiempo de composición predeterminado y devuelven los mismos valores:

thisComp.layer(1).position
thisComp.layer(1).position.valueAtTime(time)
thisComp.layer(1).position thisComp.layer(1).position.valueAtTime(time)
thisComp.layer(1).position   
thisComp.layer(1).position.valueAtTime(time)

Para utilizar un tiempo relativo, agregue un valor de tiempo incremental al argumento tiempo. Por ejemplo, para obtener el valor Posición en 5 segundos antes del tiempo actual, utilice la siguiente expresión:

thisComp.layer(1).position.valueAtTime(time-5)
thisComp.layer(1).position.valueAtTime(time-5)
thisComp.layer(1).position.valueAtTime(time-5)

Las referencias de tiempo predeterminadas a las propiedades de composiciones anidadas utilizan el tiempo de composición predeterminado original, no el tiempo reasignado. Sin embargo, si utiliza la función source (origen) para recuperar una propiedad, se utiliza el tiempo reasignado.

Por ejemplo, si el origen de una capa de la composición contenedora es una composición anidada y en la composición contenedora el tiempo está reasignado, al acceder a los valores de posición de una capa de la composición anidada con la siguiente expresión, los valores de posición utilizan el tiempo predeterminado de la composición:

comp(“nested composition”)ayer(1)osition
comp(“nested composition”)ayer(1)osition
comp(“nested composition”)ayer(1)osition

Sin embargo, si accede a la Capa 1 mediante la función fuente, los valores de posición utilizan el tiempo reasignado:

thisCompayer(“nested composition”)ourceayer(1)osition
thisCompayer(“nested composition”)ourceayer(1)osition
thisCompayer(“nested composition”)ourceayer(1)osition
Nota:

Si utiliza un tiempo específico en una expresión, After Effects ignora el tiempo reasignado.

Las expresiones actúan sobre el tiempo en unidades de segundos (no en fotogramas), por lo que a veces es necesario usar métodos de conversión de tiempo para convertir los valores temporales y poder realizar operaciones en los fotogramas.

Ejemplo: Uso del lenguaje de expresión para escribir una expresión

Siga los pasos de este ejemplo para saber cómo utilizar la referencia de lenguaje de expresión de After Effects para escribir expresiones. La expresión creada en este ejemplo vincula la propiedad Posición de Sólido 2 a la propiedad Posición de Sólido 1, con un desplazamiento de movimiento del Sólido 2 de dos segundos respecto al movimiento de Sólido 1.

  1. Cree dos capas sólidas: Sólido 1 y Sólido 2.

  2. Anime los valores de la propiedad Posición de Sólido 1 con fotogramas clave. (Consulte Acerca de animación, fotogramas clave y expresiones.)

  3. Seleccione la propiedad Posición de Sólido 2 y elija Animación > Añadir expresión, o bien, presione Alt y haga clic (Windows) o presione Opción y haga clic en el botón del cronómetro   para la propiedad. De manera predeterminada, aparece la siguiente expresión:

    transform.position
    transform.position
      transform.position
  4. Escriba lo siguiente sobre transform.position:

    thisComp
    thisComp
      thisComp
  5. El elemento thisComp es un atributo global cuyo valor es un objeto Comp que representa la composición actual. Para determinar lo que puede seguir a thisComp en la expresión, consulte el valor devuelto para thisComp en la sección Objetos globales, atributos y métodos.

    Tenga en cuenta que thisComp devuelve un objeto Comp. A continuación, consulte Atributos y métodos de Comp. para saber qué atributos y métodos pueden utilizarse con un objeto Comp. Una opción es layer(index). El índice o número situado dentro de los paréntesis especifica la capa que desea utilizar. En este ejemplo, supondremos que Sólido 1 es la primera capa de la composición. Para recuperar valores de la primera capa de la composición activa, escriba.layer(1) al final de la expresión para obtener lo siguiente:

    thisComp.layer(1)
    thisComp.layer(1)
      thisComp.layer(1)
  6. Consulte de nuevo la referencia de los elementos de la expresión para comprobar que layer(index) devuelve un objeto Layer. Consulte Atributos y métodos generales de capa y localice el elemento que desee utilizar. Por ejemplo, si desea acceder a los valores de la propiedad Posición de la capa, escriba .position al final de la expresión para obtener lo siguiente:

    thisComp.layer(1).position
    thisComp.layer(1).position
      thisComp.layer(1).position
  7. En Atributos y métodos generales de capa, puede observar que el atributo position devuelve una propiedad. Consulte Atributos y métodos de propiedad y observe que puede añadir un factor de tiempo a la expresión. Para añadir un tiempo específico, como el tiempo actual más dos segundos, escriba .valueAtTime(time+2) al final de la expresión para obtener lo siguiente:

    thisComp.layer(1).position.valueAtTime(time+2)
    thisComp.layer(1).position.valueAtTime(time+2)
      thisComp.layer(1).position.valueAtTime(time+2)
  8. En Atributos y métodos de propiedad, observe que el método valueAtTime devuelve un Número o matriz. Cuando una expresión devuelve un Número, matriz o valor Booleano (como true o false), no se pueden añadir más atributos ni métodos a la expresión (no obstante, si lo desea, puede añadir operadores aritméticos, como +-*/).

Más recursos de Expresión

Ahora que ha entendido algunos de los conceptos que hay detrás de expresiones visite la comunidad para obtener ejemplos reales y compartir su trabajo.

En el foro de AE Enhancers también se incluyen diversos ejemplos e información sobre expresiones, así como secuencias de comandos y ajustes preestablecidos de animación.

Obtén ayuda de forma más rápida y sencilla

¿Nuevo usuario?