TCAX 字幕特效制作工具官方论坛 | ASS | TCAS | Python | Aegisub | Lua

 找回密码
 新人加入
查看: 4793|回复: 0
打印 上一主题 下一主题

TCAX 时间计算及文字定位 (英文) [复制链接]

Rank: 4

楼主
发表于 2021-7-26 14:19:08 |显示全部楼层
本帖最后由 Seekladoom 于 2021-12-20 11:24 编辑

【如上内容的谷歌机翻】
简介

对于字幕效果来说,定位和时机是最基础也是最重要的两个方面。TCAX 的基本功能就是为用户提供处理这两个问题所需的信息。


时间计算

基本时间计算比基本位置计算稍微容易一些,因为信息,或者说,关于时间的预定义全局值比定位信息越来越简单。主要有五个全局值可用于计算时序。它们是:

    1。val_FXFPS,定义了一个全局常量,表示目标 FX 的帧速率。通常我们是这样使用的,_FD = 1000 / GetVal(val_FXFPS),_FD是另一个存储帧时长的变量,单位为毫秒。如果我们要使用我们自己定义的所有帧制作 FX(这意味着我们不打算使用 ASS 动画标签,例如 \move、\t 等),我们肯定需要这个变量。

    2. val_BegTime,它是一个一维数组,包含每一行的开始时间。

    3. val_EndTime,是一个一维数组,包含每一行的结束时间。

    4. val_KarTime,它是一个二维数组,包含每个音节的持续时间。

    5.val_KarTimeDiff,它是一个二维数组,包含从一行中的第一个音节到同一行中的目标音节所经过的时间。它是通过总结卡拉 OK 时间得出的。

借助这些变量,我们可以通过以下两个公式轻松计算音节的存在时间: 音节的
开始时间 = GetVal(val_BegTime)[line_index] + GetVal(val_KarTimeDiff)[line_index][syl_index]
结束时间音节的=(音节的开始时间)+ GetVal(val_KarTime)[line_index][syl_index]

在tcaxPy_Main函数中,GetVal(val_BegTime)[line_index]与_start相同,GetVal(val_EndTime)[line_index]与_end相同,GetVal(val_KarTimeDiff)[line_index][syl_index]与_elapk和GetVal( val_KarTime)[line_index][syl_index] 与 _k 相同。

虽然计算基本时序看起来很容易,但做高级就不是这样了,制作一个很棒的FX非常依赖。然而,时间感可以通过反复试验获得。


位置计算

与基本时间计算相比,位置计算更为复杂。与定位相关的预定义全局值远不止时序。我不会在这里涵盖文本布局的所有方面,而只是展示它的一些基本用法。你可以参考有关文本布局的更复杂信息的FreeType 文档。

TCAX中有两种布局样式,水平和垂直。如果你能理解其中之一,你就可以理解两者。那么,让我们先来处理一下比较常用的水平布局。回顾一下开始之前ASS的对齐方式,一共有九个对齐方式,从an1到an9。假设我们使用 an1 将文本放置在 (x, y) 位置,并且文本的前进为a,使用的字体大小为fs,我们如何将其更改为其他对齐方式但仍将其放置在同一位置视觉上?答案很简单,变换公式如下:

    1. an1, at (x, y)
    2. an2, at (x + a / 2, y)
    3. an3, at (x + a, y)
    4. an4, at (x, y - fs / 2)
    5. an5, at (x + a / 2, y - fs / 2)
    6. an6, at ( x + a, y - fs / 2)
    7. an7, at (x, y - fs)
    8. an8, at (x + a / 2, y - fs)
    9. an9, at (x + a, y - fs)

注意,你可以在TCC文件中设置的对齐方式与我们上面提到的意义不同,它只是表示我们将文本放在屏幕上的位置,而我们实际使用的ASS对齐方式是an5 by默认(在 ASS 样式中)。那么,我们如何进行定位呢?最重要的是找到我们应该把第一个文本放在哪里。假设我们使用的是水平布局,ASS对齐方式是an7,下面的公式可以给你一个提示。

    1.对齐
方式 1,x = GetVal(val_OffsetX),y = GetVal(val_ResolutionY) - GetVal(val_FontSize) - GetVal(val_OffsetY)
    2.对齐
方式 2,x = GetVal(val_OffsetX) + (GetVal(val_ResolutionX) - GetVal(val_TextLength) [line_index]) / 2, y = GetVal(val_ResolutionY) - GetVal(val_FontSize) - GetVal(val_OffsetY)
    3.对齐方式 3, x = GetVal(val_ResolutionX) - GetVal(val_TextLength)[line_index] - GetVal(val_OffsetX), y = GetVal(val_ResolutionY) - GetVal(val_FontSize) - GetVal(val_OffsetY)
    4.对齐方式 4, x = GetVal(val_OffsetX), y = GetVal(val_ResolutionY) / 2 - GetVal(val_OffsetY)
    5.对齐方式 5, x = GetVal(val_OffsetX) + (GetVal(val_ResolutionX) - GetVal(val_TextLength)[line_index]) / 2, y = GetVal(val_ResolutionY) / 2 - GetVal(val_OffsetY)
    6.对齐
方式 6, x = GetVal(val_ResolutionX) - GetVal(val_TextLength)[line_index] - GetVal(val_OffsetX), y = GetVal(val_ResolutionY) / 2 - GetVal(val_OffsetY)
    7.对齐
方式 7, x = GetVal(val_OffsetX), y = GetVal(val_OffsetY)
    8.对齐
方式 8, x = GetVal(val_OffsetX) + (GetVal(val_ResolutionX) - GetVal(val_TextLength)[line_index]) / 2, y = GetVal(val_OffsetY)
    9.对齐
方式 9, x = GetVal( val_ResolutionX) - GetVal(val_TextLength)[line_index] - GetVal(val_OffsetX), y = GetVal(val_OffsetY)

知道第一个文本位置后,我们可以使用公式轻松推导出左边的位置, (x + GetVal(val_TextAdvanceDiff)[line_index] [syl_index], y), val_TextAdvanceDiff 是文本前进的总和,以与 val_KarTimeDiff 类似的方式导出。

在tcaxPy_Main函数中_a表示当前正在处理的文本的前进,而_x和_y表示其位置,它们的计算公式为_x = x + _a / 2,_y = y + GetVal(val_FontSize) / 2,其中x和y由上述公式1至9导出。

在TCAS或ASS的像素级效果中,只有一种对齐方式,即an7,你可以直接使用上面列出的公式从预定义的全局值中计算出来,也可以使用中间方法,x = _x - a / 2, y = _y - GetVal(val_FontSize) / 2。
您需要登录后才可以回帖 登录 | 新人加入

GitHub|TCAX 主页

GMT+8, 2024-5-3 04:55

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部
RealH