w4123 / GenshinVoice

Voice dataset of Genshin Impact 原神语音数据集

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

分享一个脚本,可以根据 json 按照文件夹分类,音频可用 Wwise-Unpacker 提取

Erythrocyte3803 opened this issue · comments

汉语/日语/英语/韩语 都可以用这个分类
要用这个版本的Wwise-Unpacker:Wwise-Unpacker

import json
from shutil import move
import os
import tqdm as tq
import glob
# ===============路径设置===============
source = "C:/临时数据集/dest_wav" # 输入目录
dist = 'C:/临时数据集/output'  # 输出目录
genshin = 'C:/临时数据集/result.json'  # 配套json
# ======================================
files = glob.glob(os.path.join(source, "*.wav"))
f = open(genshin, encoding='utf8')
data = json.load(f)
for wav in tq.tqdm(files):
    file = str(wav).replace(".wav", "")
    file_hash = os.path.basename(file)
    try:
        path = data.get(file_hash).get('fileName')
    except Exception as e:
        pass
    wav_file = path.replace(".wem", ".wav")
    wav_path = dist + "/" + os.path.dirname(wav_file)
    wav_path = wav_path.replace("\\", "/")
    dist_file = dist + '/' + wav_file
    dist_file = dist_file.replace("\\", "/")
    if not os.path.exists(wav_path):
        os.makedirs(wav_path)
    else:
        move(wav, dist_file)

image
image
image
文件夹结构差不多

大佬,你这Json中文倒是没问题;但是英文一个都对不上啊。。。
不知道是不是我用的方式有问题。。要不您也检查检查?

大佬,你这Json中文倒是没问题;但是英文一个都对不上啊。。。
不知道是不是我用的方式有问题。。要不您也检查检查?

有自行提取过英语语音吗

大佬,你这Json中文倒是没问题;但是英文一个都对不上啊。。。
不知道是不是我用的方式有问题。。要不您也检查检查?

有自行提取过英语语音吗

提取过了;跟我提取中文是一样的操作过程。不过有一点不一样,中文我是从...\StreamingAssets\Audio\GeneratedSoundBanks\Windows\Chinese拿到的,但英文和日文好像是在...\Persistent\AudioAssets\English(US)或Japanese
图片
报错截图:
图片
图片
图片
图片

大佬,你这Json中文倒是没问题;但是英文一个都对不上啊。。。
不知道是不是我用的方式有问题。。要不您也检查检查?

有自行提取过英语语音吗

提取过了;跟我提取中文是一样的操作过程。不过有一点不一样,中文我是从...\StreamingAssets\Audio\GeneratedSoundBanks\Windows\Chinese拿到的,但英文和日文好像是在...\Persistent\AudioAssets\English(US)或Japanese
图片
报错截图:
图片
图片
图片
图片

路径改了吗,改成你实际路径

// 前面内容过长,就不引用了。
路径改了,我转中文语音的时候,一样的操作方法,中文是成功的。
日文我也跑了一遍,没报错,输出文件看上去应该也没问题(没仔细检查),不知道英文是怎么回事。
我又重新提取下英文语音,试了前几个文件,还是报一样的错误。

commented

都应该在StreamingAssets下的,Persistent下的不对

commented

的确就是这样分类的,我上传也是一样,你们就这么做好了,我懒得传

都应该在StreamingAssets下的,Persistent下的不对

我又试了下,的确就是在Persistent下,游戏内英语也正常;这个文件夹改名后,游戏内英文语音失效。
图片
图片
没办法了,的确不知道是什么问题。

我怎么和你不一样
image

我的这个目录下只有中文,为啥不一样,我就不知道了。。
我是新下载的客户端,有没有可能是这个原因?
图片
让我感到很奇怪的是,就只有英语的不行。一样的方法,中文和日文的完全没问题。

我用wwise解包出来的wav文件 我看命名都是pck的名字+一个序列数字这样的啊 而不是json里的那个key值,是还有什么操作我没做么?大佬能问下你是怎么解pck的么?

我用wwise解包出来的wav文件 我看命名都是pck的名字+一个序列数字这样的啊 而不是json里的那个key值,是还有什么操作我没做么?大佬能问下你是怎么解pck的么?

不应该啊

我用wwise解包出来的wav文件 我看命名都是pck的名字+一个序列数字这样的啊 而不是json里的那个key值,是还有什么操作我没做么?大佬能问下你是怎么解pck的么?

应该是工具不对,在Github重新下载

我用wwise解包出来的wav文件 我看命名都是pck的名字+一个序列数字这样的啊 而不是json里的那个key值,是还有什么操作我没做么?大佬能问下你是怎么解pck的么?

不应该啊

没问题了 github第一个搜到的主分支只能转ogg和MP3,那个不行,后面找到一个fork的可以直接转换出wav的就可以了

的确就是这样分类的,我上传也是一样,你们就这么做好了,我懒得传

请问大佬,现在这个版本的json是否是最新的呢?我今天提取的英语语音无法与json文件中的匹配

的确就是这样分类的,我上传也是一样,你们就这么做好了,我懒得传

请问大佬,现在这个版本的json是否是最新的呢?我今天提取的英语语音无法与json文件中的匹配

我也提不出英文的,日文中文都行

我也来分享一个脚本吧,可以把wav文件保存为按照 角色名/文本保存的形式,例如save_path/九条裟罗/为将军大人实现「永恒」,这就是我的「愿望」。.wav

from tqdm import tqdm
import json
import glob
import os
import shutil

def mkdir(path):
    folder = os.path.exists(path)
    if not folder:                   #判断是否存在文件夹如果不存在则创建为文件夹
        os.makedirs(path)            #makedirs 创建文件时如果路径不存在会创建这个路径
        print("---  new folder...  ---",path)
        print( "---  OK  ---")

def get_save_path(save_path,wav_name):
    '''
    input: wav名,例如0000f9f7ada1c623
    output: 保存路径,例如save_path/九条裟罗/为将军大人实现「永恒」,这就是我的「愿望」。.wav
    '''
    wav_json = result[wav_name]
    npcName = result[wav_name]['npcName']
    text = result[wav_name]['text']
    mkdir(f"{save_path}/{npcName}")
    return f"{save_path}/{npcName}/{text}.wav"

save_path = './genshin_audio/'
dest_wav = r"E:\so_vits_svc\音频提取工具\Wwise-Unpacker-master\dest_wav"
json_path = './result.json'

with open(json_path ) as f:
    result = f.read()

result = eval(result)

wav_list = os.listdir(dest_wav)

for wav in tqdm(wav_list):
    wav_name = wav.split('.')[0]
    read_ = f"{dest_wav}\{wav}" 
    try:
        save_ = get_save_path(save_path,wav_name)
        shutil.move(read_, save_)
    except:
        continue

1681280083911

1681277758875

import json
from shutil import move
import os
import tqdm as tq
import glob
# ===============路径设置===============
source = "C:/临时数据集/dest_wav" # 输入目录
dist = 'C:/临时数据集/output'  # 输出目录
genshin = 'C:/临时数据集/result.json'  # 配套json
# ======================================
files = glob.glob(os.path.join(source, "*.wav"))
f = open(genshin, encoding='utf8')
data = json.load(f)
for wav in tq.tqdm(files):
    file = str(wav).replace(".wav", "")
    file_hash = os.path.basename(file)
    try:
        path = data.get(file_hash).get('fileName')
    except Exception as e:
        pass
    wav_file = path.replace(".wem", ".wav")
    wav_path = dist + "/" + os.path.dirname(wav_file)
    wav_path = wav_path.replace("\\", "/")
    dist_file = dist + '/' + wav_file
    dist_file = dist_file.replace("\\", "/")
    if not os.path.exists(wav_path):
        os.makedirs(wav_path)
    else:
        move(wav, dist_file)

Traceback (most recent call last):
File "c:\Wwise-Unpacker-1.3\1.0.py", line 32, in
result = eval(result)
OverflowError: line number table is too long
兄弟,运行到这步出错了,怎么整

commented

json文件怎么获取啊,解包工具解出来没有json呢