隐藏式字幕
隐藏式字幕,或者字幕,是伴随声音和对话而出现的文本描述。它们可以提示那些听力存在障碍的玩家,在一定程度上也提示玩家周围正在发生什么。通过一些巧妙的设计,它们还可以用来显示尚未录制的对话。
可以在起源引擎游戏的“选项”>“音频”里启用对话字幕或者完全字幕。
在声音脚本 和scripts/sentences.txt
中定义的声音都可以制作成字幕。
编辑隐藏式字幕
隐藏式字幕储存在 closecaption_%语言%.dat
中(例如 closecaption_english.dat),路径为 <游戏目录>\resource\
。一个 .dat 文件是由 captioncompiler
工具从相应的 .txt 文件编译而成的二进制文件。
尽管引擎不会从文本文件中读取字幕,Valve 还是提供了他们的源文件以供模组制作者使用。你可以在你的 resource\
文件夹中或者 VPK 文件中找到这些文件。
文本文件的格式为:
lang
{
Language "English" //设置为“英语”(或者“schinese”代表简体中文,以及其他语言...)
Tokens
{
//这里开始编写字幕。
音效名称 "这是字幕文本。"
barn.chatter "We're picking up radio chatter. They're looking for your car."
//以此类推...
}
}
- 文本文件必须以“UCS-2 Little Endian”的编码格式保存。
- 音效名称必须是在你的音效脚本 里定义的音效,而不是音频的原始文件名。
- 记得在有空格的数据块两边加上英文双引号。
以下是一个 sentences.txt 的例子:
音效名称 声音文件 {字幕代码 closecaption 音效名称}
BA_LATE barney/c1a0_ba_late {Len 2.33 closecaption BA_LATE}
字幕代码
<sfx>
- 把字幕标记为音效字幕,只能在“显示完全字幕”启用的情况下出现。如果玩家将 cc_subtitles 设置为“1”,就不会出现这些字幕。
<clr:255,255,255>
- 使用 RGB 设置字幕的颜色,0 表示无色,255 表示全色。比如
<clr:255,255,255>
表示白色。 <playerclr:255,176,0:255,255,255>
- 基于是否由玩家/客户端发出的声音来设置 RGB 颜色。第一个颜色代码是当音效为玩家所发出时,字幕的颜色。第二个颜色代码是当音效为非玩家所发出时,字幕的颜色。用冒号分隔。举个例子,
<playerclr:255,176,0:255,255,255>
当声音是由玩家或玩家的武器发出的,字幕为橙色,由其它东西发出的,为白色。 <B>
- 加粗该标记后面的所有文本。
<I>
- 将标记后面的文本变成斜体。注意:
<B>
和<I>
都可以在同一行内取消。"这是<B>粗体!<B>这是非粗体。
" 看起来就像这样:这是粗体!这是非粗体。 <norepeat:15>
- 控制字幕出现的频率。如果设置为 15,则表示这行字幕在出现后 15 秒之内不会重复出现。
<len:5>
- 设置字幕的持续时间。举个例子,
<len:5>
会让字幕在屏幕上持续 5 秒钟。如果不添加此代码,字幕的持续时间为“音频时长+cc_linger_time
命令的参数”。 <cr>
- 为字幕手动添加一个空行。
- 举个例子,"功能:<cr>字幕"等同于
功能:
字幕
<delay:2>
- 设置字幕文本出现的延迟,自动换行并且清除所有格式。举个例子,在
“<i><clr:255,176,0>HEV 已启动。<delay:3>你的 HEV 已经启动。”
中,“HEV 已启动”将会以橙色斜体的样子出现。3 秒钟后,“你的 HEV 已经启动”将出现在它下面,而不使用上一行的任何格式。新行总是在前一行的正下方,即使下面有其他字幕。
编译
字幕文件必须使用 captioncompiler.exe
进行编译。且需要编译的字幕文件必须位于模组的 resource 文件夹,这样才能够生成 .dat 文件。 举个例子 C:\Program Files\Steam\steamapps\SourceMods\[模组名称]\resource\
,如果在 resource 文件夹中创建批处理命令文件,此过程将变得稍微容易一些。将以下代码复制到文本文件中,并将其另存为 .bat 文件:
"C:\Program Files (x86)\Steam\steamapps\common\Half-Life 2\bin\captioncompiler.exe" %1
pause
-game “模组文件夹 的路径”
参数来覆盖全局 vproject 环境变量。把它放置在 %1
后面,输入一个空格。这样你就无需启动 SDK 并在那里更改环境变量了。C:\
开始。将你的字幕 .txt 文件拖到批处理文件上,以便像使用 .exe 本身一样使用它。
在你的地图里播放带有字幕的音频
有时候,当玩家激活了一个触发器时,你也许想要播放带有字幕的音频。不幸的是,ambient_generic
的“Play Everywhere(到处播放)”标签对于 soundscripts 来说是损坏的,因为字幕只能在音效脚本和 sentences.txt 中使用(除了解说音频节点,详情请参加这里)。因此,你必须进行一些修改:使用 point_clientcommand
实体执行三个命令:
play 音频文件的路径
cc_linger_time X
,其中“X”是手动调整的参数。cc_emit 字幕名称
,其中“字幕名称”是隐藏式字幕文件中的键值。
确保 closecaption 1
和 cc_subtitles 1
都已设置。
没有音频的字幕
录制对话是一个非常耗费资源的过程。如果对话录制完成后,您决定要更改某些内容,那么进行这些更改的成本将非常高,因此,最终对话录制通常是项目的最后阶段之一。
然而,在创作编排好的场景时,尽早提供对话是非常可取的。解决此问题的一种方法是开发人员录制自己的占位符音频,但即使这样也会占用大量时间。创建占位符对话的一种更廉价的方法是使用隐藏式字幕,而不附加任何对话音频。
实现这一点需要三个步骤:
- 1.创建字幕
- 声音标记(例如上面的
barn.chatter
)可以为在音效列表中没有的音效脚本添加隐藏式字幕。要创建新的隐藏式字幕,只需将新条目添加到“closecaption_schinese.txt”(或其他语言文件)中,如上文所述。 - 2.在 Faceposer 中添加字幕
- 在 Faceposer 中,添加无对话的隐藏式字幕的方式与添加普通对话的方式相同(右键单击时间线并选择
WAV File…
)。但是,由于隐藏式字幕标记不在音效列表中,因此它们不会出现在可用声音列表中。相反,只需参考你在步骤 1 中添加的条目,并在Sound
文本框中手动键入标记名称即可。 - 3.设置字幕的出现时长
- 前两步完成后,在游戏中播放时,场景将显示隐藏式字幕(当然,需要在游戏选项中打开隐藏式字幕)。但是,由于没有关联的声音文件,因此事件没有长度。这意味着隐藏式字幕几乎一显示就消失,只给玩家一点点时间阅读。虽然这对于由一个或两个单词组成的字幕来说是可以接受的,但需要做更多的工作才能让字幕保持较长以方便阅读。
Faceposer 不支持编辑 WAV 文件事件的长度,但可以通过手动编辑 .vcd
文件来更改它们。用记事本打开 .vcd
,找到要更改长度的演讲事件。搜索 speak 事件的名称会将你跳转到文件中的指定位置。
在这里,你会发现一个类似以下内容的条目:
event speak "Test" { time 1.000000 -1.000000 param "test.test" fixedlength cctype "cc_master" cctoken "" }
time
行表示事件的开始和结束时间。结束时间设置为 -1.000000
是因为该 speak 事件当前没有长度。将此数值更改为你想要字幕消失的时间(在时间线上,以秒为单位),然后就可以保存文件退出了。
显然,字幕显示的所需时间长度因文本长度而异。一般来说,当试图确定文本应该在屏幕上显示多长时间时,一种比较好的方法是你自己计时朗读文本,然后把读完所需的时间加倍,以便于阅读速度不是很快的人能够读完字幕。
logic_auto
和一个 point_clientcommand
非常有用,设置为在地图加载时发出控制台命令 closecaption 1
。这样可以让你不需要提醒使用你的模组的任何人(例如其他团队成员)自己去打开他们的字幕。.vcd
之前对其进行备份,并定期备份 .vcd
,以免 Faceposer 突然撤消这些编辑。为 BINK 视频制作字幕
随着《 求生之路》的发布,现在可以为 Bink 视频制作字幕。
注意事项
在《 求生之路2》以及之后的游戏中,Valve 使用 subtitles_language 作为主要的字幕文件,而不是将字幕保存在带有“听力障碍”字幕的 closecaption_语言文件中。这可能是因为“隐藏式字幕”是为了方便听力受损者。而就目的来说,“Subtitles(字幕)”是一个更容易被接受的术语,不过,其中的音效仍然可以被标记为 <sfx>。
另见
- 其他 FacePoser 工具
- 与隐藏式字幕相关的控制台命令的前缀为
cc_
。有关完整列表,请参见 Console Command List
|