Objeto | Descrição | Exemplo |
---|---|---|
thisComp | Composição atual | thisComp; |
thisLayer | Camada atual | thisLayer.transform.scale[1]; |
thisProperty | Propriedade atual em que a expressão é aplicada. | thisProperty[1]; |
time | Código de tempo atual na posição do cursor em segundos. | "Seconds: " + time; |
value | Valor atual associado à propriedade atual. | value + "_TEST"; |
Objeto | Descrição | Exemplo |
---|---|---|
colorDepth | Projeto de profundidade de cor em bits por pixel. | colorDepth; |
Função | Descrição |
---|---|
layer(index || number) | Retorna um objeto de camada, luz ou câmera. |
layer(layer, relIndex) | Retorna o objeto com um índice relativo à camada fornecida. |
Função | Descrição | Exemplo |
---|---|---|
framesToTime(frames, fps) | Converta quadros em código de tempo em segundos. | framesToTime(50, 1.0 / thisComp.frameDuration); |
timeToCurrentFormat(t, fps, isDuration) | Converte o Timecode para o formato de exibição de configurações do projeto atual. | |
timeToFeetAndFrames(t, fps, framesPerFoot, isDuration) | Converte o formato Timecode em pés e quadros. | |
timeToFrames(t, fps, isDuration) | Converte o Timecode em quadros. | |
timeToNTSCTimecode(t, ntscDropFrame, isDuration) | Converte o Timecode no NTSC Timecode com ou sem quadro de gota. | |
timeToTimecode(t, timecodeBase, isDuration) | Converte o Timecode em outro código de tempo usando a base de tempo fornecida. |
Função | Descrição | Exemplo |
---|---|---|
comp(name) | Encontre a composição aberta com o nome dado. | comp("Comp 1"); |
footage(name) | Encontre a filmagem do projeto com o nome fornecido. | footage("RedHarring.png"); |
Você tem:
Você quer:
Solução:
Digamos que você tenha uma camada de forma com uma forma de retângulo.
Defina o pai da camada de retângulo na camada de texto, isso fará com que o posicionamento em relação ao posicionamento da camada de texto.
Adicione a seguinte expressão à propriedade de tamanho do caminho do retângulo
var textLayer = thisComp . layer ( "Text Layer 1" ) ;
var textRect = textLayer . sourceRectAtTime ( time - textLayer . inPoint , true ) ;
// set size of rectangle path to text rectangle's width and height
[ textRect . width , textRect . height ] ;
Isso definirá o tamanho do retângulo para o tamanho do texto. Quando existem várias linhas, leva o tamanho completo de todas as linhas.
var rectPath = content ( "Rectangle 1" ) . content ( "Rectangle Path 1" ) ;
var x = rectPath . size [ 0 ] ;
var y = rectPath . size [ 1 ] ;
// set position of rectangle path to text rectangle's width and height
[ x / 2 , - ( y / 2 ) ] ;
Isso define a posição inferior esquerda do caminho do retângulo para o canto superior esquerdo da camada. As camadas de texto sempre têm seus pontos de ancoragem na parte inferior esquerda da primeira linha de texto. Isso tornará o cálculo mais fácil de fazer.
var textLayer = thisComp . layer ( "Text Layer 1" ) ;
var textRect = textLayer . sourceRectAtTime ( time - textLayer . inPoint , true ) ;
[ textLayer . transform . position [ 0 ] + textRect . left ,
textLayer . transform . position [ 1 ] + textRect . top + textRect . height ] ;
Isso define a posição da camada do retângulo para a posição do texto. O motivo para adicionar o tamanho do retângulo é porque a renderização da fonte pode fazer com que a primeira letra seja alguns pixels fora da posição. Adicionar as coordenadas do retângulo compensará isso.
Problemas:
Você tem:
Você quer:
Adicione o jitter horizontal ao vídeo para parecer entrelaçamento de 50 Hz.
Solução:
[ transform . position [ 0 ] , transform . position [ 1 ] + ( ( timeToFrames ( time ) % 2 ) * 2 ) ]
Problemas:
O jitter é muito pesado, você pode resolver isso removendo a multiplicação na expressão
[ transform . position [ 0 ] , transform . position [ 1 ] + ( timeToFrames ( time ) % 2 ) ]
Ou mesmo múltiplo pela metade para obter um shake muito sutil.
[ transform . position [ 0 ] , transform . position [ 1 ] + ( ( timeToFrames ( time ) % 2 ) * 0.5 ) ]
O texto precisa ser centrado verticalmente. Adicione a seguinte expressão à propriedade de transformação da camada de texto.
S = thisLayer ;
x = transform . position [ 0 ] ;
y = transform . position [ 1 ] ;
rect = S . sourceRectAtTime ( time , false ) ;
y_offset = rect . height / 2 ;
[ x , y - y_offset ]