Overwatch Toolchain 解包方式考察
理想状态的英雄语音音频源文件,应该是这样的:
有一个比较标准的文件名(Filename),以英雄名字起头,文件名自己就包含了一些有用的分类信息。
有一个配套的文本文件(Dictionary),里面写好了每个音频对应的台词(Text),我们直接可以查找替换复制粘贴。
有一套分类详尽的标签(Tags)列表,里面详细地给每个音频分好了类,我们可以方便地根据这些标签进行筛选、处理、归档。
这些理论上 Blizzard 应该已经做好了放在客户端里,我们只要解压了就能拿来用。
但事实上并不是这样的,CASC 是 BLZ 私有的加密格式,目前并没有很好的手段可以完美解压,实际解出来的结果大概是这样的:
这种 32 个数字英文组成的字符串称之为 filehash,可以简单理解为一种特殊的文件名。这种名字没有实际意义,仅仅表示『这个文件和那个文件是不同的』。
所以,比『什么都没有』稍微好点,我们有了『不知道是什么的一堆文件』,稍后我们又通过文件格式识别软件,找出了其中的音频部分,并转换成了可以播放的 mp3。于是我们得到了『不知道是什么的一堆音频』:
情况没有本质变化,但我们有了一大包知道是 mp3 的文件以后,我们就可以 手-动-听-写-打-标-签 了。
于是情况变成了这样:
这就是 http://ow.thnuclub.com 这个小站现在正在做的事情。全世界想的办法都一样——先解出来能播放的,再人工一个一个挑。幸运的是,吃瓜群众撸袖自己上,一不小心撸出了全世界最好的守望音频网站。
昨天 nga 有网友(青龙圣者@ngacn.cc)推荐了 toolchain 系列解压软件。这个软件在小站建站之初是没有的。现在看来,它有优点也有缺点,但前景似乎不错。
toolchain 使用的还是 zezula 的 CASCLib 开源库,但库版本更新了不少。因此比 cascview 能多解出一些信息,具体地来说是有了目录和文件类型,有目录就意味着可以自动完成一部分标签。但缺点是引入了另一套也没啥意义的文件名系统。于是情况变成了这样:
小站的旧数据有 Text 内容,而 toolchain 有相对比较准确的标签分类。但因为两边的文件名对不上,所以不知道哪个对应哪个。
再仔细验证以后,发现 toolchain 解压的文件是可以计算得到 filehash 的,于是又变成了:
这是目前所能获得的最大的成果了。
进一步分析发现,toolchain 解压出的音频总数较少,也就是:
原因可能是 toolchain 的作者的关注重点并不在音频上,因而把原始数据中暂时未分析的部分直接抛弃了。而 CascView 则以解压优先,并未抛弃数据。
总结:
- toolchain 通过目录结构间接提供了较为准确的英雄分类 tag,可以补充修正现有小站全靠人工听写的标签数据。
- toolchain 目前仍然没有解出音频对应的文本,而目前音频文本(Text 数据)依然是最宝贵的劳动成果,也是 ow.thnuclub.com 小站存在的最大价值。暂时还没办法由 toolchain 自动化解决,期待未来某天可以彻底解决。那时小站大概就可以关闭了。
- toolchain 引入了另一套文件名,但可以通过计算得到 hash 值与旧数据对应起来。
- toolchain 的数据分类更细致,但总量较少,新的文件名系统无甚作用,且构成规则不明。因此也没有必要跟随 toolchain 的命名方式。
- toolchain 可解压出 *.mdl、*.dds 等文件,对视频制作者、签名档、头像等很有作用,但对于既有的音频内容,所助仅限于标签分类数据。
- 对于一些特殊的标签数据,例如莱因哈特的台词『Many of my comerads fell in battle here, may they rest in peace.(我的许多同伴在此牺牲,愿他们安息)』只会在艾兴瓦尔德这张地图出现,因此较完美的 tag 应当是『莱因哈特,英雄,艾兴瓦尔德,地图,入场』,这个是 toolchain 也无法提供的,只能依靠人工标注。
因此,在现阶段 toolchain 还不成熟的情况下,暂时还没有必要修改小站现有的数据结构和使用方式,只需要把 toolchain 提供的目录结构,转化成较为准确的 tag 数据补充到小站上即可。相比于 toolchain 构成规则不明的文件名系统,可以通过计算得到的 filehash 系统通用性也更好一些。
接下来的工作:
- 计算 toolchain 获得的所有音频文件的 hash 值,如果有软件可以直接带子目录列表输出 csv 就好了。
- 根据目录路径给 toolchain 所有音频文件打上英雄分类/地图分类 tag。
- 合并到现有小站数据上,需要解决英雄标签冲突,并尽可能保留有效信息。
- 但合并 tag 也可能导致形如『【天使】I feel unstoppable.』这类音频中的安娜标签丢失。具体处理办法还需要考虑。
更新完成。