在After Effects中使用表达式添加时间码

文章目录
  1. 第1步 - 创建项目
  2. 第2步 - 添加文本
  3. 第3步 - 添加表达式
  4. 第4步 - 表达式的解释
  5. 第 5 步 - 自定义表达式

https://lemmoscripts.com/wp/2018/08/14/adding-a-timecode-in-after-effects-using-an-expression/

在本教程中,我将告诉你如何使用After Effects 表达式创建一个可定制的时间码。就是像下面这样的东西:

第1步 - 创建项目

打开After Effects,在这篇文章中我使用的是最新的版本(CC 2018),更早的版本中应该是可行的。 按Ctrl + N新建合成 根据你的需要,适当更改合成设置。我让持续时间持续了一个小时,只是为了证明这个功能的意义,但这不是必须的。

第2步 - 添加文本

创建好合成后,按Ctrl + T切换到文字工具,创建一个文本层。文本内容不重要,因为会在接下来的步骤里覆盖掉。 打开After Effects "字符"面板,选择你喜欢的字体和样式,我选择了一种像素字体,并居中。

第3步 - 添加表达式

进入 "效果和预设"面板,展开 "表达式控制",将"滑块控制"拖到文本层。 展开文本层,然后展开这两个地方:

  • 文本
  • 效果>滑块控制

应该如下所示。 然后,按住"源文本"右边的"螺旋",拖到 "滑块控制"的秒表上,参考如下。 你会注意到,文本层上的数字发生了变化,那是因为文本层的 "源文本",被 "滑块控制"所控制。 接下来,选择“原文本”下的 "表达式:源文本",然后删除默认表达式,并用以下内容取代:

function pad(str, max) {
str = str.toString();
return str.length < max ? pad("0" + str, max) : str;
}

function digits(myVal, myNumDigits, myPad) {
var s = myVal.toString();
while (s.length < myNumDigits) s = '0' + s; 
return pad(Math.floor(s), myPad);
}
var myTime = time + effect("Slider Control")("Slider");
hr = digits(myTime / 3600, 2, 2);
min = digits(myTime % 3600 / 60, 2, 2);
sec = digits(myTime % 60, 2, 2);

"SLP " + hr + ":" + min + ":" + sec;

如果一切顺利,你应该能看到如下画面: 按住时间线播放头,移动一下,文字应该会改变,指示当前时间。

第4步 - 表达式的解释

下面是对表达式的解释。 "pad "和 "digits "函数是用于格式化字符串的函数。

function pad(str, max) {
str = str.toString();
return str.length & lt;
max ? pad("0" + str, max) : str;
}

"pad"函数,当它被调用时,会给一位数数字的左边加上零,这是它唯一的目的。

function digits(myVal, myNumDigits, myPad) {
var s = myVal.toString();
while (s.length & lt; myNumDigits) s = '0' + s;
return pad(Math.floor(s), myPad);
}

digits "函数对传递给它的值(myVal、myNumDigits和myPad)进行格式化。它使用while循环来限制数字的数量,使其达到传递给它的指定数量。 这个函数在返回传递的时间数字的Math.floor值时也会调用 "pad "函数,并传递指定的pad量。 接下来的三行是存储小时、分钟和秒值的变量。

hr = digits(time / 3600, 1, 1);
min = digits(time % 3600 / 60, 2, 2);
sec = digits(time % 60, 2, 2);

这些变量以三种不同的方式调用digits函数,通过传入 "time"值(AE常量之一),对时间数字进行简单计算以得到小时、分钟和秒,然后将数字限制为小时1位,分钟2位,秒2位。最后传递的参数是所需的垫子数量,因为我们的VHS例子中,小时只需要1位数,(很可能是因为VHS磁带没有超过9小时?) 表达式中的最后一行将前面的变量连接在一起,完成了效果。

"SLP" + hr + " :" + min + " :" + sec;

第 5 步 - 自定义表达式

你可以通过将上面的内容替换成这样来删除字符串中的SLP和冒号字符。

hr + min + sec;

或者你可以在时间值周围添加一些不同的东西。

"时间是"  + hr + "|" + min + "|" + sec;

可能性是无穷无尽的。

通过www.DeepL.com/Translator(免费版)翻译