说是教程,其实也就是按照方便学习的顺序总结了一下milkyjing大神(TCAX的作者)写的各种文档教程。
使用ass/ssa 做字幕特效时,可以按句为单位添加各种效果,包括模糊,变换,位移,透明等。 这里 有一份ass/ssa 的命令说明。然而仅靠 这些命令完成一些复杂的特效会过于麻烦,这就是为啥需要TCAX。
TCAX所做的事情很简单。它读入字幕文件(需要有卡拉ok轴),对于卡拉ok的每一个单字,运行一个 python脚本来生成相应动画效果的ass代码。我们可以通过编辑这个python 脚本来控制特效。TCAX可 以为我们的python脚本提供各种相应的数据,包括
_i #第_i句, 即当前操作的文字所在的句子序号
_j #第_i句中的第_j个文字, 即当前操作文字在该行中的序号
_n #第_i句中有_n个文字, 即当前句子所包含的文字数
_start #句子的开始时间, 单位为10毫秒
_end #句子的结束时间, 单位为10毫秒
_elapk #到第_j个字经过的时间, _start + _elapk 到 _start + _elapk + _k 即为当前文字的存在时间, 单位为10毫秒
_k #第_j个文字的卡拉OK时间, 单位为10毫秒
_x #第_j个文字的水平坐标
_y #第_j个文字的垂直坐标
_a #第_j个文字的水平跨距, 可以看作文字的宽度, 同样_Fs也可近似看成文字的高度
_txt #第_j个文字的内容
比如要实现一句的每个字依次出现,只要把出场时间设置在_start+dt*_j
即可。(这里
的dt
是两个字之间的时间差,可以随意调整)。
首先需要安装一些外部依赖:点我
其中4我用的是k-lite。根据我的经验,要正常播放avs似乎要先安装k-lite然后再安装avsynth。
TCAX本体在这里下载。
另外windows下编辑python脚本文件的工具,我虽然一直用Emeditor, 不过还是要推荐一下atom。
这里 有一个很好的初级教程, 照着做一做,尝试用一用各种内置特效,可以快速帮助理解TCAX可以做什么。关于该教程提供的实例, 这里附上一些说明:
-
preview.avs
是一个avs文件,可以用任何文本编辑器编辑。avs是avsynth文件的扩展名, 它可以用来处理视频。好处是所有的视频处理流程(缩放,裁剪,滤镜)都是用命令语句完成的,因此 一劳永逸。压制不都是要写AVS的吗 by 某驴
我们这里的这个avs其实只做两件事,一是载入显示ass字幕需要的滤镜,二是载入对 应的影片和字幕。 为了载入滤镜,你需要修改一下
preview.avs
文件并将 LoadPlugin 里的地址改成TCAX安装地址。 另外实际做字幕的时候有一些很有用的avs语句,可以在没视频的 时候用一个空白的视频冒充,或者缩放原视频测试字幕在不同分辨率下的效果。(未完待续,之后补充) -
test.tcc
TCAX的主要文件之一,用来告诉TCAX要用读取哪个文件作为卡拉OK轴,使用哪个 python文件作为脚本,还有输出字幕的字体,位置,大小等。 -
test_k.ass
卡拉ok轴,关于如何有效的拉卡拉OK轴,我之后再单独解释。注意,卡拉OK轴 本身是个ass字幕文件,但是它除了时间之外的所有东西都会被忽略,也就是说在这里设置字体,位置, 颜色都是没用的。
这个教程使用的全是内置特效,也就是TCAX实现提供的一些python脚本。学会了这个就可以接着愉快的 学习如何自己写python脚本辣!
python 是一种简单易学的脚本语言。
python并不难学过如果仅仅是为了TCAX的话,多改改样例的python脚本就可以大致掌握需要的 知识了(?)(等我有空补充一点简单的python知识)
这里是TCAX作者给出的一个 样例。(猫神八百万= =)以Nekogami_OP.py为例,49行以前可以不用动,后面则是特效的主要部分
- 49到51 测试是奇数行还是偶数行,给他们设置不同的位置,来实现双行字幕的效果。
- 55到66和69到79行分别是偶数行和奇数行的进入和淡出效果。以55-66为例:
- 55-58行计算了单个字的进入和消失效果的关键时间点。t0到t1是进入效果持续的时间段, t2-t3是消失效果持续的时间段。注意这个关键时间点是以10毫秒为单位的,而后面具体动画效果 里涉及到的时间是以毫秒为单位的。
- 60行描述了这个字进入的时候如何移动。
- 61行描述了字在进入的时候大小和透明度如何变化(从1.5倍,alpha通道200变成1倍大小, alpha通道0,效果耗时500毫秒,加速度1.2)
- 62行把上面两个效果实际应用到字上。
- 64-66行类似。
- 82行是存在效果,也就是进场之后,出场之前字的状态。
- 87-95行是卡拉OK效果,也就是这个字被唱到时的效果,注意这里te和ts,效果的开始和结束时间 是怎么算出来的。因为和60-62行本质上是相同的,不多解释了。
我的建议是首先运行tcc文件,看看能不能生成可以观赏的字幕文件。如果可以的话,就随便改一改上面 提到的那些行。修改修改数字,删掉一部分等,看看会出现什么效果。
现在问题来了,如果想加入自己的特效怎么办呢?这里
有一个TCAX可以使用的函数总结,刚刚出现的fs
和alpha
都在这里。这个网页有些过于
简洁了,好在这些函数基本和ass本来的命令同名,所以如果不清楚某个函数怎么用,可以参考本文一
开始提到的ass/ssa命令说明。
(之后补充一些主要会用到的函数)
上面的脚本运行后会给出一个很大的ass文件。然而如果有一些特别的需求,比如嵌入图片,给字加纹 理等,用ass实现就过于麻烦了。因此TCAX还有另一种输出方法,即TCAS。
TCAS的说明在此,然而这东西 有点难用,能不用还是不要用了吧。。。
(上面的链接蛮详细的,等我有空补充细节)
-
表示绝对时间点的时间(包括
\_k
,\_start
,\_end
,\_elapk
)都是以10毫 秒为单位的。但是animation
和move
系列的函数里时间用的是毫秒为单位。这个似乎和ass里面对应位置 的时间单位有关。 -
彩虹效果如何实现?彩虹渐变其实是在HSV空间里固定S和V,让H从0变到1。在TCAX里,每一行中
(_j-1)/(_n-1)
这个量从左到右也是从0变到1,因为第一个字时_j=1
,最后一个字时_j=_n
。所以只要 从网上抄一个hsv到rgb色域转换的函数,然后给每个字算一下颜色就行啦!!