注意
请先查看前置内容 下江小春也能看懂的碧蓝档案轻松解包思路
引言
朝禊佬在“下江小春也能看懂的碧蓝档案轻松解包思路”一文中提到了CG、BGM、卡池预览视频等提取方法:
这一部分的资源实际上并不需要依赖作案工具,在游戏目录com.YostarJP.BlueArchive中的MediaPatch文件夹内可以直接取用。
对其添加相关后缀,即可查看相关资源。
然而面对上千个文件名如随机乱码一般的文件名,一个一个重命名、查看再手动分类是不现实的。我们需要一种更高效的方法来提取这些文件。
于是,我开发了这样一个Python脚本供大家将这些乱七八糟的文件整理命名。
当然,您也可以按照如此思路自行编写脚本。
工作原理
com.YostarJP.BlueArchive\files\MediaPatch文件夹下主要包含三种类型的文件,如下图所示。
第一种有很长的文件名,无后缀;第二种是乱码_乱码.dat的形式,第三种就是那个catalog.json
简单观察发现,catalog.json里面存着完整的文件名和路径,另有名为Crc的属性,这个属性一定与某个.dat文件的后面一部分乱码一致,再查找发现,每一个.dat文件前一部分的乱码又与某一个一个无后缀文件对应。
于是处理的思路就很简单了。
我们先遍历所有.dat文件的文件名,将他们的映射关系构造成映射表记录下来,
然后读取catalog.json中的信息进行重命名和归档就行啦。
脚本
nga是不能传.py文件吗,为啥我传不上来?
贴个csdn链接凑合看吧。
from cmath import exp
from ftplib import error_perm
import json
import os
import shutil
from traceback import print_tb
convertx = {}
def mkdir(path):
path=path.strip()
path=path.rstrip("\\")
isok=os.path.exists(path)
if isok :
return
os.makedirs(path)
print('成功建立文件夹'+path)
def make_dict():
print('开始构建映射表...')
namelist=os.listdir('.')
for names in namelist:
#print(names)
if os.path.isdir(names) :
continue
if os.path.isfile(names):
sp=names.split('.')
if len(sp) == 2 and sp[1] == 'dat':
drc=sp[0].split('_')
convertx[int(drc[1])]=drc[0]
print(convertx)
print('映射表已构建完成')
return
make_dict()
t=json.load(open('MediaCatalog.json'))
err_info = []
ok=er=0
for eles in t['Table'] :
print(eles)
target_path=t['Table'][eles]['path']
details=target_path.split('/')[0:-1]
nowpos='./'
for dirs in details :
mkdir(nowpos+dirs+'/')
nowpos=nowpos+dirs+'/'
try:
#print(convertx[t['Table'][eles]['Crc']])
shutil.copy('./'+convertx[t['Table'][eles]['Crc']],target_path)
print('OK:已将文件 '+convertx[t['Table'][eles]['Crc']]+'复制到'+target_path )
ok=ok+1
except:
print('ERROR:发生错误,未找到文件或错误的索引')
err_info.append(eles)
er=er+1
err_io=open('errors.txt','w')
for err_items in err_info:
print(err_items,file=err_io)
err_io.close()
print('\n\n\n\n\n\n\n\n\n\n-----------------------------')
print('处理完成:'+str(ok)+' 个成功,'+ str(er)+' 个失败。')
print('所有引起错误的资源名已储存在当前文件夹下errors.txt中,请自行查看')
print('注意:"audio/bgm/mute"、"audio/bgm/theme_01"等文件无法找到是正常现象,他们出现在数据包(那个.obb文件)的asset文件夹下')
print('截止2022.6.28日,这样的总文件数应该是542个。(在com.YostarJP.BlueArchive\\files\\MediaPatch下运行结果)')
使用方法
先自行安装python,添加环境变量等。这类教程和资源很全,请自行查阅,就不赘述了。
贴一个教程:Python安装教程
将脚本复制到com.YostarJP.BlueArchive中的MediaPatch文件夹内
Windows上可按住左shift同时在文件夹内鼠标右键空白处,点击“在此处打开powershell窗口”(Win10)或“在此处打开命令提示符”(Win7)。
在弹出的窗口中输入“python [你写的文件名].py”
出现“开始构建映射表”等字样即为运行成功。等待程序自行结束即可。
提取出的所有文件都保存在多出来的几个文件夹里面,把那个拷走就行了。
一些值得注意的信息
就像在脚本内写的一样,"audio/bgm/mute"、"audio/bgm/theme_01"等文件无法找到是正常现象,他们出现在数据包(那个.obb文件)的asset文件夹下
截止2022.6.28日,这样的总文件数应该是542个。
补充:obb文件解包指北
obb文件可以在/Android/obb/com.YostarJP.BlueArchive/文件夹内找到
同样上传至电脑,将后缀名改为zip解压即可。
后续操作请查看朝禊佬的文章。