唐凌 发表于 2020-5-11 03:20:38

【游戏】提取《尼尔:机械纪元》游戏音视频资源

NieR:Automata,中文名“尼尔:机械纪元”或“尼尔:自动人形”是手游大厂Square Enix在2017年春推出的PS4/Steam平台游戏,影响力极大,作为数千小时玩家,不仅通关N次,还将其前作Drakengard 3(日版英文又名Drag-on-Dragoon 3,誓血龙骑士3,又名龙背上的骑兵3), Drakengard(日版英文又名Drag-on-Dragoon,誓血龙骑士,又名龙背上的骑兵), NIER(尼尔:完全形态)给通关了。这里不谈本人玩这部游戏的历史,谈谈提取游戏音视频资源的方法。由于授人以鱼不如授人以渔,并为了防止伸手党,同时又因为资源总计大小极大,文件极多,所以就谈提取资源的方法而不发提取出的游戏资源。本文所提取资源均来自Steam版,目测和PS4方法不同。

先说提取视频资源。首先找到游戏目录,可以通过Steam的UI快速找到,如果不会请自行百度。这里谈到的视频资源均为游戏的过场动画,位于\data\movie目录里。
里面的文件均为.usm文件,这些文件不能直接被一般的播放器和剪辑软件打开,需要转换一下,这里使用VGMToolbox,工具下载地址:https://sourceforge.net/projects/vgmtoolbox/files/latest/download
解压这个7z压缩包,打开VGMToolbox.exe,在左侧目录点开Misc. Tools->Stream Tools->Video Demultiplexer,然后在右侧出现的界面里,在Format选项中选择USM (CRI Movie 2),然后全选那些USM文件拖拽到大框里。
拖拽过去后,VGMToolbox就会开始提取视频资源。这里的所有视频资源均是有画面而没有音频的。这个工具不会太过占用CPU,多数时间是在吃磁盘带宽,目测几分钟时间就能跑完。工具跑完后,会生成一些.m2v文件。不过这里问题来了,如果用PotPlayer播放看起来还是正常的,其他的播放器播放出来看起来却奇糊无比,拖进Adobe Premiere Pro CC 2019一看,也是糊的不行。提取出的视频也有些奇怪,画面大小是1600*904的,而正常16:9的画面大小也应该是1600*900才对。点开看就能发现问题在于最底下有一小行黑色,这就是多出来的4行像素。
这里就给它重处理一遍,把视频弄的清晰,并且去掉下面奇怪的4行像素,顺便弄成常见的1920*1080分辨率。我们需要使用FFmpeg,下载地址:https://ffmpeg.zeranoe.com/builds/
把压缩包提出来,而我们要重点调用的就是\bin\ffmpeg.exe这个文件。
首先我们先分析以下需要哪些参数。简单说我们需要去掉最下面的四行像素,还要把分辨率提到1920*1080,那么就用-filter参数,设置好crop和scale。如果我们第二次跑这个命令,那么就需要覆盖文件,于是加上-y参数。我们还可以调画质,那么可以加-crf或者-qp参数,这里选择-crf。
综上所述,举个例子,假设文件名a.m2v,要输出名为a.mp4文件,那么命令行代码就是:
ffmpeg -i a.m2v -y -filter:v "crop=1600:900:0:0,scale=1920:1080" -crf 9 a.mp4
使用-crf 9参数会使得输出的文件较大一些,但是增长的量还是可以接受的。全部m2v文件有26.7GiB,使用-crf 9参数后,全部mp4文件有27.8GiB。如果需要降低大小,那么可以把-crf参数的值调大。
这里使用批处理,代码如下:
@echo off
@set path=D:\Tools\ffmpeg\bin;%path%
for %%1 in (*.m2v) do (title Converting %%1 to %%~n1.mp4... & ffmpeg -i %%1 -y -filter:v "crop=1600:900:0:0,scale=1920:1080" -crf 9 %%~n1.mp4)
pause
其中,你需要把FFmpeg提取到D:\Tools\ffmpeg文件夹,其中ffmpeg.exe一定是在D:\Tools\ffmpeg\bin目录里。如果你把FFmpeg提取到了别处,请修改第二行,或者复制到代码提到的位置。
如果需要自动删除,那就在for语句之后加一行代码:
del *.m2v
这会在将全部m2v转换为mp4后,再把所有m2v删除。如果需要在转换完m2v后就立刻删除,那么就把这行for语句改成
for %%1 in (*.m2v) do (title Converting %%1 to %%~n1.mp4... & ffmpeg -i %%1 -y -filter:v "crop=1600:900:0:0,scale=1920:1080" -crf 9 %%~n1.mp4 & del %%1)
你会发现for语句中带了一句title命令,这是为了方便查看正在转换哪个文件,你可以观察一下转换过程中控制台窗口的标题。
这个过程比较长,一般需要半个小时到一个小时,这主要和CPU性能相关。FFmpeg会吃满所有CPU核心,因此如果你能手动调节CPU风扇速度那就把转速拉到最大,然后去干一些别的不需要用电脑的事情,比如用手机看新科娘的录播。
到这里,视频资源就算是提取完了。

然后谈谈提取音频,音频文件位于\data\sound目录里,里面有很多bnk文件和wsp文件,不过我们需要将其展开,这里找到了一个专门提取尼尔机械纪元音频资源的程序nier-sound-extractor。这是一个Golang写的玩意,它会提取出全部的音频资源并导出为.wem文件。可以通过命令行调用这个程序:
nier-sound-extractor extract -out "data-output" "...\data\sound"
把省略号换成游戏目录,按下回车后就开始提取音频资源了。提取出的.wem文件并不能用一般的播放器播放,可以通过ww2ogg转换为.ogg文件,而ogg可以虽然可以被播放,但不能扔到Pr里。因此可以用FFmpeg再转换为.mp3文件。ww2ogg下载地址:https://github.com/hcs64/ww2ogg/releases
提取出ww2ogg.exe和packed_codebooks_aoTuV_603.bin这两个文件。鉴于提取出的音频文件都在nier-sound-extractor这个程序的data-output目录下,那么就把这两个文件扔进data-output目录里,然后创建批处理文件调用ww2ogg:
for /r %%g in (*.wem) do ww2ogg %%g --pcb packed_codebooks_aoTuV_603.bin
这会将全部的.wem文件转换为.ogg文件,不过有些效果不太好,需要用revorb程序修正一下,代码如下:
for /r %%g in (*.ogg) do revorb %%g
转换为.ogg文件后,就可以用FFmpeg转换为常见的.mp3文件了,代码如下:
for /r %%f in (*.ogg) do (title Converting %%f to %%~pf\%%~nf.mp3 ... & ffmpeg -i %%f -acodec libmp3lame %%~pf\%%~nf.mp3)
总的来说,批处理代码如下:
@echo off
set path=D:\Tools\ffmpeg\bin;%path%
title Invoking ww2ogg...
for /r %%g in (*.wem) do ww2ogg %%g --pcb packed_codebooks_aoTuV_603.bin
title Invoking revorb...
for /r %%g in (*.ogg) do revorb %%g
for /r %%f in (*.ogg) do (title Converting %%f to %%~pf\%%~nf.mp3 ... & ffmpeg -i %%f -acodec libmp3lame %%~pf\%%~nf.mp3)
pause
如有必要请自行添加代码删除掉.wem文件和.ogg文件。
其中ww2ogg和revorb是一个较快的过程,而FFmpeg又是个拖时间的过程,这里FFmpeg虽然不怎么吃CPU,但还是需要大概半个小时左右才能搞完。如果你已经看完了新科娘的录播,不妨看看罗翔说刑法。
文件名比较乱,如果有空就慢慢手动整理吧。

不出意外的话,完成我上述的步骤大概需要一百到两百分钟左右。。。
提取游戏音视频资源有其优点,但其缺点却很明显。首先每个游戏的资源肯定有各自的提取方法,很多时候甚至需要自己单独写程序来实现提取。更有甚者,资源是加密的,需要自己对游戏逆向后才能知道其所用的加密算法并找出解密密钥。还有就是文件名问题,光看文件名还不知道是个什么玩意呢,需要手动播放一下才能知道。整理文件的这个过程真的很费劲。
而提取资源带来的优点却不是很高。首先可以避免因为各种因素(比如系统配置高低,录屏软件优劣)导致的录出的画面卡顿和音频断续。而剪辑时的自由度会更高,比如环境声和人声的音轨是分开的。
优缺点相比较,得不偿失么?这不好说,总是有些取舍方面的考量。

本文提及的程序给出的链接均在外网,虽然不在长城防火墙之外,但据说使用某些运营商时,访问速度奇差,因此上传到论坛上。此外这个nier-sound-extractor似乎没那么好找,因此也一并发到论坛上。
由于文件较大,其中FFmpeg是大头,因此压缩包需要分卷上传。如果不算FFmpeg那根本就不需要分卷了。

0xAA55 发表于 2020-5-20 01:01:49

用FFmpeg把m2v文件转换为别的格式后,它就不“奇糊无比”了?神奇

突然想起多年前玩生化危机4的时候,看它那个movie里面的内容,有时候会让人感到特别想笑。可能是因为完全没有进入游戏内世界的心情,看戏的时候笑点低了点……

不过可以看出一点,wem的体积比ogg小一些

视频可以用mpc-hc看,前几帧很“像素”,之后的能正常播放,不糊

唐凌 发表于 2020-5-20 03:37:50

0xAA55 发表于 2020-5-20 01:01
用FFmpeg把m2v文件转换为别的格式后,它就不“奇糊无比”了?神奇

突然想起多年前玩生化危机4的时候,看它 ...

目测就是解码问题,最新PotPlayer播放起来很OK,但拖进PR就很糊了,所以还是ffmpeg压一遍比较好。

hzkj 发表于 2021-3-1 17:32:53

ddddddddddddddddddddddddd
页: [1]
查看完整版本: 【游戏】提取《尼尔:机械纪元》游戏音视频资源