0x00 无关紧要的前言
Hi 亲爱的小朋友们大家好~我是触角革命字幕组的Mayusuki。嘛,这样的三次元偶像小众字幕组没听说过也很正常啦~之前我在组内主要从事翻译和校对的工作,但是自从成了上班狗之后,能够奉献给这一爱好的时间变得越来越少,组内的新人也越来越多,所以我就自告奋勇地退居二线,开始用闲暇时间研究字幕特效和压制的相关技术(好像并没有什么因果关系(lll¬ω¬))。我把我的研究过程记录在这里,既作为给组内新人们的教程指南,也作为和同行们的交流分享。
我的制作原则是“实现高效而有趣的字幕”——嘛,其实说白了就是希望在保证出档效率的情况下,尽可能地使用简单高效的特效让字幕变得更有意思。对于综艺节目来说,这样做无疑能使我们的字幕更好地与原画面融合,而且还能让观众在观看时更加愉♂悦,我觉得是极好的(●ˇ∀ˇ●)。而也正因如此,我基本不会去研究复杂或纯粹的技术问题,而只会根据实际情况需求,去了解最简单高效的实现~(其实意思就是:我懒,而且我怕麻烦)
因为我并没有为文章制定明确的技术水平参照基准,所以文章某些部分的内容会显得比较啰嗦,但是本着尽可能让所有看这篇文章的人少走弯路的原则,我觉得啰嗦一些才是坠吼的O(∩_∩)O
我主要讨论和使用的工具主要是Aegisub,看这篇文章之前你需要对这个工具的基本操作有所了解(其实很简单的啦)。虽然这个工具很久没有更新了(连测试版也搁置了好一段时间),但是使用方便,功能也足够强大,对于我们这样的小型字幕组组来说完全能够满足日常需求。
本期制作采用的范例是NHK电视台2017年4月1日放送的《AKB48 SHOW!》第146期,感兴趣的同学可以来这里看看最终的成品。这期作品里还涉及到一些其他的特效,限于篇幅,我将在日后的文章中进行讨论。也欢迎各位在评论和弹幕里留下宝贵的意见和建议O(∩_∩)O
0x01 渐变效果的实现
我们需要实现渐变效果的画面是这样的:
9分30秒 图中的金色字体部分
大概观察一下,我们可以发现这句金色字幕的渐变方式是每个字的左上和右下是亮色,左下和右上是暗色,效果比较简单(也不怎么好看)。但遗憾的是,Aegisub默认的渲染方式并没有能够实现这样的效果的特效代码。所以这时候我们就有必要借助一个神奇的插件——VSFilterMod。这一插件可以让ass字幕拥有更强大、更丰富的视觉效果。
首先我们需要到Google Codes上下载VSFilterMod的DLL文件,这里为了方便大家,当然要直接放上百度云链接啦( ̄▽ ̄)"(密码:6i2y)
下载好解压开之后,你会发现有VSFilterMod和VSFilterMod64两个版本,也就是32位和64位版。我的Aegisub是r8898测试版,也就是64位,似乎是无法识别VSFilterMod的,所以只能用VSFilterMod64啦~(不清楚自己的Aegisub是什么版本的同学可以到主程序目录下查看,如果主程序文件名不带64,那么应该就是32位版本)
使用的方法很简单:把正确版本的dll文件拷贝到Aegisub程序目录的csri文件夹下
然后再打开Aegisub,点击工具栏上从右数的第二个按钮,也就是Aegisub的偏好设置
选择高级->视频,然后点击“字幕来自”的下拉菜单,在其中选择“CSRI/vsfiltermod_textsub”,就完成了VSFilterMod的加载。
准备工作完成了,接下来我们就可以来具体看看实现渐变的特效代码了:
\1vc(左上角颜色,右上角颜色,左下角颜色,右下角颜色)
很直观明了吧?只要指定了四角的颜色,这个函数就可以帮我们自动生成相应的渐变效果。其中,“颜色”指的是相应颜色的十六进制表示。为了获取这一数值,我们可以使用取色工具对原画面的字幕对应部分进行取色。能实现这样的功能的取色工具有很多,不过为了方便,我们可以直接使用Aegisub样式编辑器中自带的小工具:
点击样式选择菜单旁边的“编辑”按钮,进入到样式编辑器界面。随便点选其中一个颜色(因为我们只需要得到数值,不需要改变样式,所以选择哪一个都没关系),弹出颜色设置的菜单:
点击其中的取色器图标,然后在画面上点击需要取色的位置,取色器旁边的小窗口就会显示光标点击位置的高倍放大图像:
此时在取色小窗口内点击需要的颜色的像素单元,就可以获得这个颜色的各类代码数值了(我们需要的是“ASS”一栏中去掉开头结尾的“&”符号的7位16进制数):
取色时尽量选取字幕中最暗和最亮两部分的颜色,这样才能实现比较明显的过渡效果(而我就并没有取好......)。完成取色之后,我们就可以根据上面的格式,直接写出字幕样式代码,实现需要的渐变:
{\1vc(H09A9D2,H02778C,H02778C,H09A9D2)}今后将由我来引领前进!
大功告成了......吗?
......好像有点不对。乍一眼看上去还凑合,但是仔细观察就会发现,渐变的效果变成整个句子了,而原画面中的渐变是在每个字上面都有明显体现的。为了高仿......我们只能一个字一个字地做了/(ㄒoㄒ)/~~
不过,就算不会自动化处理,操作起来其实也没有想象中那么麻烦:建议先制作其中一个字的字幕(最好是可以方便地作为对齐基准的那一个),拉好这个字的时间轴,然后再多次复制这个字,改变\pos(x,y)中的相应参数变换位置,再改变每个位置的字幕内容,就可以形成一个完整的句子:
在这个例子中我因为懒癌发作,所以就直接用手拖了。这样是很不好的,大家千万不要学我( ̄▽ ̄)"
最终效果如下:
......好像变化也不是很大?
(我们会发现原字幕在最外部还有一圈白色的晕影,所以我们需要把这里的字幕样式中的边框颜色设置为白色,厚度为3~5左右,然后使用\be特效进行边角模糊化处理)
类似地,在这期视频中还有另外一个例子。这里的字幕似乎是左侧亮右侧暗,我们只需要调整一下颜色数值的顺序即可:
22分10秒
需要注意的是,采用这样的方法制作出来的外挂字幕,在播放时同样需要播放器加载VsFilterMod进行渲染,否则你辛辛苦苦制作出来的渐变特效就会变成这样:
Potplayer使用默认设置播放
具体设置会因使用的播放器不同而异。就我尝试过的设置来说,这样外挂不仅很麻烦,而且还会使播放器的硬解功能失效。所以对于观众们来说,最好的解决办法是直接看内嵌的版本( ̄▽ ̄)"
0x02 分割效果的实现
画面如下:
24分21秒
当场景中主要是两人进行交谈时,两人的字幕分别采用不同颜色,而同时发声时则将两种颜色的字幕合并,这是综艺字幕的一种常见套路。为了实现这种效果,我们需要用到的特效函数是clip(这个函数不依赖于VSFilterMod):
\clip(左上x坐标, 左上y坐标, 右下x坐标,右下y坐标)
clip可以理解为在字幕上覆盖一层蒙版,而这一蒙版的范围由四个坐标值(也就是矩形斜对角线上的两点)确定。被蒙版覆盖的字幕部分会显示出来,而其他部分则会被隐藏。对clip的灵活使用理论上可以实现对字幕的任意切割。clip中的坐标指的是整个画面的坐标,所以,这里我们会用到标准模式工具(以下按我的习惯简称为标尺)来确定坐标的具体数值。点击左侧竖向工具栏中的第一个按钮:
此时把光标移到视频画面中,你就会发现鼠标指针变成了十字标尺,并且在原点旁边会显示当前原点的坐标值。这一坐标值是以画面左上角为原点基准,分别向右和向下递增的,所以只会是正数。
回到正题。为了实现画面中的上下分割效果,我们需要准备两个对应颜色的字幕样式,制作一条拉好轴、并指定了其中一种样式的字幕,然后将其复制,再把复制出来的这条字幕指定为另一种样式:
这样一来,我们只要用clip截取592条的上半部分,以及593条的下半部分,就能实现分割的效果了。首先是上半玫色部分(位置还是手动拖的,强迫症请无视):
{\clip(0,0,844,558)\fs65\be5\pos(655.999,591.143)}非常感谢大家!
水平切割上半部分的时候,从字幕附近开始和从画面顶端开始的效果是一样的,所以这里我们可以方便地把左上角坐标设为(0,0),然后我们量一下字幕中间位置的坐标值,填入clip函数的后两位。这个时候,我们相当于用标尺的正y轴和负x轴围成的蒙版覆盖了玫色字幕(但是由于有蓝色字幕覆盖,所以暂时看不出效果):
除非你是严重的强迫症患者,否则我觉得用标尺量个大概其实就足够了(嗯,我就是懒你能怎么地?( ̄▽ ̄)")。
接下来是蓝色字幕构成的下半部分,我们如法炮制:
{\clip(459,558,840,594)\fs65\be5\pos(655.999,591.143)}非常感谢大家!
需要注意的只有一点:蓝色字幕的左上y轴坐标应与玫色字幕的右下y轴坐标数值相同,这样才能实现精确的分割。最终效果如下:
0x03 等等...还有个问题!
细心的同学可能刚才就注意到了:既然播放器不加载VSFilterMod插件,就不能正常显示渐变效果,那么压制的时候是不是也应该加载这个插件呢?
没错!确实如此。辛辛苦苦做好了特效字幕,压制的时候却被省略了,这实在是悲剧。不过,这就属于压制的同学应该研究的问题了。不过在本文的例子中,字幕做完之后,压制还是得我自己动手......(谁让我放假回不了家呢/(ㄒoㄒ)/~~)
所以,我们另一篇文章再见啦~ヾ(•ω•`)o









网友评论