Датасеты
Привет. Где вы брали датасеты? Я хочу обучить новые модели для RVC.
Здраствуйте - я достаю напрямую из игры.
Здраствуйте - я достаю напрямую из игры.
А у вас они не остались в каком нибудь архиве например? А то я не знаю как из игры достать.
Нет - я их не храню, так-как это занимает много дискового пространства и ощутимо замедляет работоспособность системы. У меня храниться только некоторая часть в виде не сортированных и не обработанных аудио файлов (60 000 с небольшим тысяч).
Нет - я их не храню, так-как это занимает много дискового пространства и ощутимо замедляет работоспособность системы. У меня храниться только некоторая часть в виде не сортированных и не обработанных аудио файлов (60 000 с небольшим тысяч).
Понял. А может поделитесь способом как вы извлекали голоса и сегригировали их по персонажам?
Извлечь файлы озвучки из "Ведьмак 3" не очень сложно, но занимает много машинного времени. Я знаю 2 способа:
- Крайне прост, но извлекает далеко не всё и нормально не работает с DLC и NextGen версией (У меня он извлекал +-60к аудио файлов из примерно 120к) - https://github.com/JTGizmo/Extracting-Voice-Over-Audio-from-Witcher-3
- Извлекает всё, но не работает из коробки и требует определённых манипуляций - https://www.playground.ru/witcher_3_wild_hunt/guide/the_witcher_3_wild_hunt_drugoe_modkit-1206307
Я использую объединённый способ:
- Использую настроенный инструмент из "2. playground" для извлечения ".wav (это сжатый тип, который не открывается без преобразования)" и ".cr2w (Это вроде как файл отвечающий за движения губ и он необходим для преобразования в читабельные аудио файлы)"
- Для настройки надо следовать инструкции "Гайд по получению всех текстур из игры", но не создавать папку "exported_offzip";
- Использовать команду lua lua/inspect_w3speech.lua "путь к папке с игрой\content\content0\Язык_Озвучкиpc.w3speech" exported_lua вместо lua lua/unpack_textures.lua texture.cache exported_lua
- Пример команды для простой работы: lua lua/inspect_w3speech.lua "C:\Games\The_Witcher_3_Wild_Hunt\content\content0\rupc.w3speech" exported_lua
(Эта команда извлечёт файлы русской озвучки из архива "rupc.w3speech" и поместит сжатые файлы в папку "exported_lua"
- Использую инструмент преобразования из "1. github" и преобразовываю файлы из ".wav" и ".cr2w" -> ".ogg" -> ".wav (читабельный PCM)"
- Использую текстовый файлы "w3dialog_id.txt" из "1. github" для сопоставления имения аудио файла и персонажей с фразами из игры
- Пример: После извлечения и преобразования есть файл "0x0002a7e2.wav.ogg.wav" -> захожу в "w3dialog_id.txt" и ищу (для поиска использую "Notepad++") id без расширения "0x0002a7e2" -> находиться строка "48 0x0002a7e2 Geralt: We had a deal. I've done my part. Your turn to do yours."
(48="Номер фразы по игровому порядку" 0x0002a7e2="Уникальное имя фразы (id)" Geralt:="Имя персонажа (бывает что имя не соответствует внутри игровому и приходится искать по фразам)")
- После сопоставления у меня получается следующие название файла "48_0x0002a7e2.wav" или "Rus_48_0x0002a7e2_Geralt"
- Сопоставленные фразы необходимо подготовить для обучения в "SO-VITS-SVC" -> Для этого их необходимо преобразовать со следующими параметрами "44100 Гц, Моно 1 канал, 16-Бит" -> Для преобразования можно использовать любой аудио редактор который умеет пакетно обрабатывать аудио файлы (Я использую "Adobe Audition")
Касаемо всего процесса - у меня он уже отточен и во многих вещях упрощён и автоматизирован.
Спасибо за подробную инструкцию. В целом вполне выполнимо, но я ещу попробую помучится с SO-VITS-SVC, потому что исходя из инструкции придётся много эксперементировать пока не получится то что нужно, уйдёт на это несколько недель, которых у меня нет. SO-VITS-SVC и ваши модели замечательные, но к сожалению местами кортавят и сложные слова как напрмиер "пятидесяти" звучат неестественно, но всё равно проделанная вами работа замечательна и мне, как человеку который хочет озвучить свою историю голосами персонажей из the witcher невероятно помогла.
Касаемо картавости - вы на какой голос пытаетесь накладывать модели, так-как звучание очень сильно привязано к говорящему (Я для этих целей в большинстве случаев использую синтезатор речи "Microsoft - Azure (Edge)) или "Silero TTS - Xenia (Demagog)
Добрый день
Я не смог найти файлы русской речи
Английские диалоги вижу. НО вот русских не увидел. Я что-то пропустил или они не были загружены? Просто странно что в папке для RU нету русских диалогов.
Вы про какую папку "RU"?
Я немного добавлю контекста
Моя задача составить вот такой датасет:
звуковой файл wav | текст
где .wav это русский голосовой файл Геральта, а текст - сам текст его фразы.
Потом я буду использовать такой датасет для создания TTS модели.
И наткнулся на вашу страницу.
Вот здесь есть ру WAV файлы: https://huggingface.co/datasets/Rootreck/so-vits-svc-4.0-ru-The_Witcher_3_Wild_Hunt/tree/7b42b550afcb5fc32d5fc053815bd2148db8350d/TW3_M_Geralt_Rus%20(Training%20data)
Но там только англ речь Геральта, например в этом файле: w3dialog_id (Geralt - All)_1.txt
А мне бы условно получить вот такой файл: RU_w3dialog_id (Geralt - All)_1.txt
Я кое уже что попробовал сделать. Из файлов игры я извлек ру речь, при помощи w3strings encode
Там в таком формате:
id,key_hex,key_str,text
527948,00000000,,"Я так скажу… Если Йен не справится с проклятием Умы, мы всегда сможем обратиться к Трисс, и она на нас не обозлится. А вот если сделать наоборот…"
Я догадался что по вашему методу, названия файлов кодируются в 16-ричной системе. Так например 527948 превращается в 0x00080e4c
И в Witcher 3 Dialog.xlsx доке с диалогами я смог найти 157 0x00080e4c:
Geralt: Put it to you this way… If Yen can't help Uma, we can always go to Triss - she won't hold it against us. But if we'd done it the other way around…
Но может у вас уже есть таблица соответствия русским диалогам и русским .wav файлам?
Это бы очень помогло!
Я вас понял.
- Текст на Английском (Его подготавливал не я, а автор инструмента "w3utils - proper - https://github.com/JTGizmo/Extracting-Voice-Over-Audio-from-Witcher-3) мне не удалось вытащить русский текст;
- Звуковые файлы все на русском языке;
- Русской таблицы у меня нет, но мне бы она тоже пригодилась
Вы можете попробовать извлечь таблицу (у меня не выходит). Вот инструмент - https://github.com/hhrhhr/Lua-utils-for-Witcher-3
Я пробовал при помощи "inspect_w2strings.lua", но выходит ошибка:
!!! unknown key '0x00A34800' !!!
stack traceback:
[C]: in function 'assert'
...ograms\Extracting-Voice\Lua_Export\lua\mod_w3strings.lua:24: in function 'get_key'
lua/inspect_w2strings.lua:94: in main chunk
[C]: in ?
Кажется я смог извлечь
Нашлись совпадения по 10000 файлов
Вроде бы адекватные. Я проведу еще раз тестов, и поделюсь
Мне удалось получить файл "RU_w3dialog (Но как получить его с id - я не понимаю)". Для этого я использовал инструмент "w3unpack.exe", который есть в архиве "https://github.com/JTGizmo/Extracting-Voice-Over-Audio-from-Witcher-3"
Для этого я создал "03 all_dialogues.bat" и вставил туда следующие:
:: Путь к папке с игрой
set W3DIR=C:\Games\The_Witcher_3_Wild_Hunt
:: Язык локализации
set W3LANG=ru
w3unpack.exe -d -l %W3LANG% "%W3DIR%\content" all_dialogues_%W3LANG%.txt
Так-что делюсь.
спасибо
я сделал сложнее, но все получилось. Вытянул весь текст, перекодировал ID в формат ID wav файлов, и тоже работает.
Благодарю за труд!
Можете более подробно написать, как вы сделали?
Нет проблем!
По этапам:
Нашел вообще все .w3string файлы в папке с игрой
сделал батник и запустил - он все .w3string превратил в .csv:
@echo off
for %%f in (*.w3strings) do (
w3strings.exe -d "%%f"
)
pauseСклеил ВСЕ полученные CSV в один файл (можно в питоне или в cmd)
Запустил скрипт на python который вытягивает из этой CSV таблицы ID и Text, приводя к формату:
id | text
И самое главное - w3strings ID сохраняет в 10ричной системе. Поэтому в этом python скрипте я все ID переделал в 16-ричные под формат извлеченных .wav файлов
Вот кусок кода на python:
decimal_id = int(id_str) # Преобразуем в десятичное
row["hex_id_padded"] = f"0x{decimal_id:08x}" # Преобразуем в hex с дополнениемИтог
В итоге получается таблица в таком формате:
id|text
1000_0x00127ad0|Как такое могло случиться? Кто на неё напал?!
1001_0x00070d8f|Здесь не пройти. Надо поискать другую дорогу.
1003_0x00127ad4|Лютик, мне жаль, что меня там не было…
Здравствуйте
@korovsky
, можно поинтересоваться насчёт TTS над которым вы работаете - возможно я смогу помочь.
Мне сегодня удалось получить таблицу в следующем формате: (Я использовал иной подход в отличие от предыдущих попыток)
Голос говорящего|Название извлечённого аудио без номера|Текст
GERALT|0x000f7fae|"Высунулся, чтобы глотнуть воздуха, - и тут на него напали."
GERALT|0x000f7fb2|"Зараза... Ничего удивительного, что старик говорил не выныривать."
GERALT|0x000f7fb4|"Крысы. Что за гнусное место..."
У этого способа имеется недостаток - придётся по новой извлекать все аудио файлы из игры или обратно переименовывать мои датасеты из формата "5_0x000f7fae.wav" в формат "0x000f7fae.wav"
@Rootreck
Здравствуйте. Я вчера в итоге смогла вытащить весь текст из игры, когда знакомые отдали мне файлы w3strings (у меня нет игрового ПК, только консоли). Положила csv-файл сюда: https://github.com/juliakorovsky/witcher_rus_dialogue
Насколько я понимаю, мне удалось сопоставить аудио с текстом из вашего датасета. По крайней мере, я проверила пару фраз - там была правильная транскрипция. У меня порядок действий был такой:
- Получила content.ru.w3strings файлы
- Извлекла каждый файл с помощью w3strings.exe
- Почистила файлы, чтобы они все были в одном формате: id|hex|text и склеила в один csv-файл, убрав дубликаты строк
- По совету @kivrus выше преобразовала числа из поля id в формат f"0x{decimal_id:08x}", добавила колонку wav_id с этими преобразованными значениями
- Прошлась по всем вашим wav-файлам в датасете и сопоставила вторую часть имени файла после _ без расширения с полем wav_id.
- В итоге у меня совпали 13 882 строки.
Теперь с помощью моего csv можно сопоставить ваши wav-файлы и текст, с помощью поиска по полю wav_id.
У моих WAV есть ещё номер в начале файла - этот номер и ID были взяты из файла "w3dialog_id.txt (https://github.com/JTGizmo/Extracting-Voice-Over-Audio-from-Witcher-3)", но там текст на английском языке в следующем формате:
quests/minor_quests/skellige/quest_files/mq2041_trial_of_dexterity/scenes/mq2041_04_man_from_the_hill.w2scene:
6 0x000f8c73 Skellige Old Man 01: The White-Haired One goes to his death… Nay, no foreigner can traverse the Path of Warriors.
11 0x000f8c74 Skellige Old Man 01: No foreigner's ever completed the Path of Warriors.
13 0x000f8c75 Geralt: First time for everything.
15 0x000f8c84 Skellige Old Man 01: Some only learn from their mistakes. Thing is, in Skellige, mistakes usually cost you your life.
quests/minor_quests/skellige/quest_files/mq2043_trial_of_conviction/scenes/mq2043_01_geralt_gp.w2scene:
5 0x000f7fae Geralt: Surfaced for air - and they nabbed him.
9 0x000f7fb2 Geralt: Shit… Old man warned me not to surface before the end. No wonder.
13 0x000f7fb4 Geralt: Rats. Real pleasant place…
Раньше я чистил текст в "Notepad++" в несколько этапов, чтобы получить:
6 0x000f8c73 Skellige Old Man 01: The White-Haired One goes to his death… Nay, no foreigner can traverse the Path of Warriors.
11 0x000f8c74 Skellige Old Man 01: No foreigner's ever completed the Path of Warriors.
13 0x000f8c75 Geralt: First time for everything.
15 0x000f8c84 Skellige Old Man 01: Some only learn from their mistakes. Thing is, in Skellige, mistakes usually cost you your life.
5 0x000f7fae Geralt: Surfaced for air - and they nabbed him.
9 0x000f7fb2 Geralt: Shit… Old man warned me not to surface before the end. No wonder.
13 0x000f7fb4 Geralt: Rats. Real pleasant place…
Потом этот вариант сохранял и открывал в "Microsft Excel".
6 0x000f8c73 Skellige Old Man 01: The White-Haired One goes to his death… Nay, no foreigner can traverse the Path of Warriors.
11 0x000f8c74 Skellige Old Man 01: No foreigner's ever completed the Path of Warriors.
13 0x000f8c75 Geralt: First time for everything.
15 0x000f8c84 Skellige Old Man 01: Some only learn from their mistakes. Thing is, in Skellige, mistakes usually cost you your life.
5 0x000f7fae Geralt: Surfaced for air - and they nabbed him.
9 0x000f7fb2 Geralt: Shit… Old man warned me not to surface before the end. No wonder.
13 0x000f7fb4 Geralt: Rats. Real pleasant place…
Далее в "Excel"
Из этого "6 0x000f8c73 Skellige Old Man 01: The White-Haired One goes to his death… Nay, no foreigner can traverse the Path of Warriors.
В это "6 0x000f8c73"
Далее в "Notepad++"
Из "6 0x000f8c73"
В "6_0x000f8c73"
Далее создавал 2 списка
1)
0x000f8c73.wav.ogg.wav
0x000f8c74.wav.ogg.wav
0x000f8c75.wav.ogg.wav
2)
6_0x000f8c73.wav
11_0x000f8c74.wav
13_0x000f8c75.wav
Далее создавал "list.txt" для переименования в следующем формате:
0x000f8c73.wav.ogg.wav:6_0x000f8c73.wav
0x000f8c74.wav.ogg.wav:11_0x000f8c74.wav
0x000f8c75.wav.ogg.wav:13_0x000f8c75.wav
Далее запускал ".bat" для переименования: (Код ниже)
echo off
set "names=%dp0\list.txt"dp0"
set "files=%
powershell -executionpolicy bypass -command "Get-Content '%names%' | foreach {rename-item """%files%$($.split(':')[0])""" """$($.split(':')[1])"""}"
pause
exit
:: Примечание
::
:: В list.txt формат должен быть строго таким:
:: 0x000f8c73.wav.ogg.wav:6_0x000f8c73.wav
:: То есть старое имя файла с расширением, разделитель (обязательно двоеточие) и новое имя файла с расширением
Именно так и получалось итоговое название аудио файлов. (Это долго и не удобно, но сегодня я нашёл более простой способ)
@Rootreck На самом деле ведь совершенно неважно, что будет у вас в начале файла. Может быть хоть 6_0x000f8c73.wav, хоть 0x000f8c73.wav, хоть 111111_0x000f8c73.wav. Главное, чтобы сохранялся id, который используется в w3strings, тогда всегда можно будет сопоставить аудио и текст с помощью id из w3strings, который нужно перевести в шестнадцатеричный формат, как описывали выше. Питоном это очень удобно делать.
Новый способ заключается в следующем:
Скачать "w3utils - proper.rar" - https://github.com/JTGizmo/Extracting-Voice-Over-Audio-from-Witcher-3
Скачать "Lua531_lua_zlib_x64.zip" - https://github.com/hhrhhr/Lua-utils-for-Witcher-3/releases
Скачать "Lua-utils-for-Witcher-3" - https://github.com/hhrhhr/Lua-utils-for-Witcher-3
Создать "Папку" для инструментов - у меня это "Voice"
Распаковать файлы из "w3utils - proper.rar" и "Lua531_lua_zlib_x64.zip" в папку "Voice"
Удалить папку "lua_utils" в папке "Voice" и создать папку "lua"
Распаковать все "lua скрипты" из "Lua-utils-for-Witcher-3" в созданную папку "lua"
В папке "lua" открыть файл "inspect_w3speech.lua" через "Notepad++" и заменить строку "r:idstring("\xA2\x00\x00\x00") -- 162" на "r:uint32()"
В папке "lua" открыть файл "inspect_w3strings.lua" через "Notepad++" и заменить строку "r:idstring("\xA2\x00\x00\x00") -- 162" на "r:uint32()"
Удалить стандартные файлы "Batch extraction.bat" и "Convert to Wav and OGG.bat" в папке "Voice"
В папке "Voice" создать файл "01 Extraction w3speech.bat" (Код ниже)
Этот шаг распакует все файлы ".w3speech" и сохранить как отдельные файлы ".cr2w и .wav (зашифрованный)" в папке "01_ru_w3speech"
:: Путь до игры
set W3DIR=C:\Games\The_Witcher_3_Wild_Hunt
:: Язык локализации
set W3LANG=ru
mkdir 01_%W3LANG%_w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content0%W3LANG%pc.w3speech" 01_%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content1%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content2%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content3%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content4%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content5%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content6%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content7%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content8%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content9%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content10%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content11%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\content12%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC1\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC2\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC3\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC4\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC5\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC6\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC7\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC8\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC9\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC10\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC11\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC12\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC13\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC14\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC15\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\DLC16\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\ep1\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\DLC\bob\content%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\patch0%W3LANG%pc.w3speech" 01%W3LANG%w3speech
lua lua/inspect_w3speech.lua "%W3DIR%\content\patch1%W3LANG%pc.w3speech" 01%W3LANG%_w3speech
12_0) В папке "Voice" создать файл "02 Convert w3speech to OGG and WAV.bat" или "02 Convert w3speech to OGG.bat"
Этот шаг преобразует все файлы ".cr2w и .wav (зашифрованный)" и сохранит как обычные аудио файлы
12_1) Код файла "02 Convert w3speech to OGG and WAV.bat"
Преобразует ".cr2w и .wav (зашифрованный)" в ".ogg" и сохранит в папке "02_ru_ogg"
Преобразует ".ogg" и сохранит в папке "03_ru_wav"
:: Язык локализации
set W3LANG=ru
del 02_%W3LANG%ogg*.ogg
del 03%W3LANG%_wav*.wav
mkdir 02_%W3LANG%ogg
mkdir 03%W3LANG%_wav
cd 01_%W3LANG%w3speech
for %%i in (*.wav) do ..\ww2ogg.exe %%i -o ..\02%W3LANG%_ogg%%i.ogg --pcb ..\packed_codebooks_aoTuV_603.bin
cd ..\02_%W3LANG%ogg
ren .wav.ogg .ogg
for %%i in (.ogg) do ..\revorb.exe %%i
for %%i in (.ogg) do ..\oggdec.exe -w ..\03%W3LANG%_wav%%i.wav %%i
cd ..\03_%W3LANG%_wav
ren *.ogg.wav *.wav
cd ..
12_2) Код файла "02 Convert w3speech to OGG.bat"
Преобразует ".cr2w и .wav (зашифрованный)" в ".ogg" и сохранит в папке "02_ru_ogg"
:: Язык локализации
set W3LANG=ru
del 02_%W3LANG%_ogg*.ogg
mkdir 02_%W3LANG%_ogg
cd 01_%W3LANG%w3speech
for %%i in (*.wav) do ..\ww2ogg.exe %%i -o ..\02%W3LANG%_ogg%%i.ogg --pcb ..\packed_codebooks_aoTuV_603.bin
cd ..\02_%W3LANG%_ogg
ren *.wav.ogg .ogg
for %%i in (.ogg) do ..\revorb.exe %%i
cd ..
- В папке "Voice" создать файл "06 Extraction Strings.bat" (Код ниже) - "06", так-как у меня есть файлы " 04 и 05", но они тут не требуются, а "03" это шаг
преобразования ".ogg" в ".wav" в файле "02 Convert w3speech to OGG and WAV.bat"
Этот шаг распакует все файлы ".w3strings" и сохранить как отдельные файлы ".txt" в папке "06_ru_w3strings"
:: Путь до игры
set W3DIR=C:\Games\The_Witcher_3_Wild_Hunt
:: Язык локализации
set W3LANG=ru
mkdir 06_%W3LANG%_w3strings
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content0" 06_%W3LANG%w3strings\content0%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content1" 06_%W3LANG%w3strings\content1%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content2" 06_%W3LANG%w3strings\content2%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content3" 06_%W3LANG%w3strings\content3%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content4" 06_%W3LANG%w3strings\content4%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content5" 06_%W3LANG%w3strings\content5%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content6" 06_%W3LANG%w3strings\content6%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content7" 06_%W3LANG%w3strings\content7%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content8" 06_%W3LANG%w3strings\content8%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content9" 06_%W3LANG%w3strings\content9%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content10" 06_%W3LANG%w3strings\content10%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content11" 06_%W3LANG%w3strings\content11%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\content\content12" 06_%W3LANG%w3strings\content12%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\bob\content" 06_%W3LANG%w3strings\dlc_bob%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC1\content" 06_%W3LANG%w3strings\dlc_DLC1%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC10\content" 06_%W3LANG%w3strings\dlc_DLC10%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC11\content" 06_%W3LANG%w3strings\dlc_DLC11%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC12\content" 06_%W3LANG%w3strings\dlc_DLC12%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC13\content" 06_%W3LANG%w3strings\dlc_DLC13%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC14\content" 06_%W3LANG%w3strings\dlc_DLC14%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC15\content" 06_%W3LANG%w3strings\dlc_DLC15%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC16\content" 06_%W3LANG%w3strings\dlc_DLC16%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC2\content" 06_%W3LANG%w3strings\dlc_DLC2%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC3\content" 06_%W3LANG%w3strings\dlc_DLC3%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC4\content" 06_%W3LANG%w3strings\dlc_DLC4%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC5\content" 06_%W3LANG%w3strings\dlc_DLC5%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC6\content" 06_%W3LANG%w3strings\dlc_DLC6%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC7\content" 06_%W3LANG%w3strings\dlc_DLC7%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC8\content" 06_%W3LANG%w3strings\dlc_DLC8%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\DLC9\content" 06_%W3LANG%w3strings\dlc_DLC9%W3LANG%.w3strings.txt
w3unpack.exe -c -l %W3LANG% "%W3DIR%\dlc\EP1\content" 06_%W3LANG%w3strings\dlc_EP1%W3LANG%.w3strings.txt
- В папке "Voice" создать файл "07 Joint TXT" (Код ниже)
Этот шаг объединит отдельные файлы ".txt" из папки "06_ru_w3strings" в единый файл "07_Joint_TXT_W3LANG.txt"
:: Язык локализации
set W3LANG=ru
copy "06_%W3LANG%w3strings*.txt" 07_Joint_TXT%W3LANG%.txt
15_0) Открыть полученный файл "07_Joint_TXT_W3LANG.txt" (у меня это "07_Joint_TXT_ru.txt") в "Notepad++"
15_1) Открыть окно "Пометки" сочетанием клавиш "Ctrl+M", поставить галочку "Помечать закладкой" и в поле "Найти" вставить "voicetag =" - нажать "Пометить все"
15_2) В поле "Найти" вставить "dialogLine =" - нажать "Пометить все"
15_3) Нажать сверху вкладку "Поиск" -> "Закладки" -> "Удалить все строки Без закладки" -> "Ждать (Это долго и программа может зависнуть - главное её не трогать, чтобы не закрылась)"
16_0) После ожидания будет текст в формате:
voicetag = "BARON BANDIT STRONG 01",
dialogLine = 0x0007d9a9, -- "И снова, сука, льет."
voicetag = "BARON BANDIT STRONG 01",
dialogLine = 0x0007d9ab, -- "Говорят, барон взбесился, снова хочет за насильничанье виселицей наказывать."
voicetag = "BARON BANDIT STRONG 01",
dialogLine = 0x0007d9bf, -- "А вот как наши хотели с девками в деревне развлечься, так против них мужичье вышло."
16_1) Открыть окно "Замена" сочетанием клавиш "Ctrl+H", поставить галочку "Регулярные выражения" и в поле "Найти" вставить "^ " (с пробелом), аполе "Заменить" оставить пустым -
- нажать "Заменить все" -> Получится следующие (Уберутся пробелы вначале строк)
voicetag = "BARON BANDIT STRONG 01",
dialogLine = 0x0007d9a9, -- "И снова, сука, льет."
voicetag = "BARON BANDIT STRONG 01",
dialogLine = 0x0007d9ab, -- "Говорят, барон взбесился, снова хочет за насильничанье виселицей наказывать."
voicetag = "BARON BANDIT STRONG 01",
dialogLine = 0x0007d9bf, -- "А вот как наши хотели с девками в деревне развлечься, так против них мужичье вышло."
16_2) В поле "Найти" вставить "\r\ndialogLine", а в поле "Заменить" вставить "dialogLine" - нажать "Заменить все" -> Получится следующие
voicetag = "BARON BANDIT STRONG 01",dialogLine = 0x0007d9a9, -- "И снова, сука, льет."
voicetag = "BARON BANDIT STRONG 01",dialogLine = 0x0007d9ab, -- "Говорят, барон взбесился, снова хочет за насильничанье виселицей наказывать."
voicetag = "BARON BANDIT STRONG 01",dialogLine = 0x0007d9bf, -- "А вот как наши хотели с девками в деревне развлечься, так против них мужичье вышло."
16_3) Поставить галочку "Обычный" и в поле "Найти" вставить (voicetag = ") без скобок, а поле "Заменить" оставить пустым - нажать "Заменить все"
16_4) В поле "Найти" вставить (",dialogLine = ) без скобок, а в поле "Заменить" вставить "_" - нажать "Заменить все"
16_5) В поле "Найти" вставить (, -- ) без скобок, а в поле "Заменить" вставить ".ogg|" (Если аудио в формате ".ogg") или вставить ".wav|" (Если аудио в формате ".wav") - нажать "Заменить все"
16_6) Сохраняем временный файл с любым название (у меня это "01_Main.txt) из этого файла будут браться имена конечных аудио файлов -> Получится следующие
BARON BANDIT STRONG 01_0x0007d9a9.ogg|"И снова, сука, льет."
BARON BANDIT STRONG 01_0x0007d9ab.ogg|"Говорят, барон взбесился, снова хочет за насильничанье виселицей наказывать."
BARON BANDIT STRONG 01_0x0007d9bf.ogg|"А вот как наши хотели с девками в деревне развлечься, так против них мужичье вышло."
16_7) Возвращаемся на несколько шагов назад до состояния:
BARON BANDIT STRONG 01",dialogLine = 0x0007d9a9, -- "И снова, сука, льет."
BARON BANDIT STRONG 01",dialogLine = 0x0007d9ab, -- "Говорят, барон взбесился, снова хочет за насильничанье виселицей наказывать."
BARON BANDIT STRONG 01",dialogLine = 0x0007d9bf, -- "А вот как наши хотели с девками в деревне развлечься, так против них мужичье вышло."
16_8) В поле "Найти" вставить (, -- ) без скобок, а в поле "Заменить" вставить ".wav.ogg|" (Если аудио в формате ".ogg") или вставить ".wav.ogg.wav|" (Если аудио в формате ".wav") - нажать "Заменить все"
16_9) В поле "Найти" вставить (",dialogLine = ) без скобок, а в поле "Заменить" вставить "|" (Это будущий разделитель для таблицы) - нажать "Заменить все" и сохраняем
с любым названием (у меня это "02_Temp.txt) из этого файла будут браться имена извлечённых аудио файлов -> Получится следующие
BARON BANDIT STRONG 01|0x0007d9a9.wav.ogg|"И снова, сука, льет."
BARON BANDIT STRONG 01|0x0007d9ab.wav.ogg|"Говорят, барон взбесился, снова хочет за насильничанье виселицей наказывать."
BARON BANDIT STRONG 01|0x0007d9bf.wav.ogg|"А вот как наши хотели с девками в деревне развлечься, так против них мужичье вышло."
17_0) Скачиваем "Advanced Renamer" - https://www.advancedrenamer.com/ (У меня версия Portable)
17_1) Запускаем "Advanced Renamer" и перекидываем аудио файлы из папки "02_ru_ogg или 03_ru_wav" в окно программы
17_2) В окне "Advanced Renamer" выделяем все файлы -> Правый щелчком мыши открываем окно -> Сохранить список -> В CSV файл -> Указываем путь и названия для сохранения
(у меня это "03_Table.csv" и файлы другие для наглядности) -> Получится следующие
0x0002a7e2.wav.ogg;0x0002a7e2.wav.ogg;C:\Users\Root\Desktop\Voice\02_ru_ogg;ОК
0x0004a82b.wav.ogg;0x0004a82b.wav.ogg;C:\Users\Root\Desktop\Voice\02_ru_ogg;ОК
0x0004a82d.wav.ogg;0x0004a82d.wav.ogg;C:\Users\Root\Desktop\Voice\02_ru_ogg;ОК
17_3) Открыть "Microsoft Excel" -> Создать "Пустая книга" -> Перейти во вкладку "Данные" -> Нажать "Из текстового/CSV-файла" и выбрать "01_Main.txt" -> Указать кодировку "65001 UTF-8" и разделитель "|" -> Нажать "Загрузить"
17_4) Перейти во вкладку "Данные" -> Нажать "Из текстового/CSV-файла" и выбрать "02_Temp.txt" -> Указать кодировку "65001 UTF-8" и разделитель "|" -> Нажать "Загрузить"
17_5) Просто открыть "03_Table.csv" через "Excel"
17_6) Скопировать названия файлов "Column2" (Столбец "B") из "02_Temp" в столбец "A" файла "Запускаем "Advanced Renamer"" -> Получится следующие
0x0007d9a9.wav.ogg 0x0002a7e2.wav.ogg C:\Users\Root\Desktop\Voice\02_ru_ogg\ ОК
0x0007d9ab.wav.ogg 0x0004a82b.wav.ogg C:\Users\Root\Desktop\Voice\02_ru_ogg\ ОК
0x0007d9bf.wav.ogg 0x0004a82d.wav.ogg C:\Users\Root\Desktop\Voice\02_ru_ogg\ ОК
17_7) Скопировать названия файлов "Column1" (Столбец "A") из "01_Main" в столбец "B" файла "03_Table.csv" -> Сохранить -> Получится следующие
0x0007d9a9.wav.ogg BARON BANDIT STRONG 01_0x0007d9a9.ogg C:\Users\Root\Desktop\Voice\02_ru_ogg\ ОК
0x0007d9ab.wav.ogg BARON BANDIT STRONG 01_0x0007d9ab.ogg C:\Users\Root\Desktop\Voice\02_ru_ogg\ ОК
0x0007d9bf.wav.ogg BARON BANDIT STRONG 01_0x0007d9bf.ogg C:\Users\Root\Desktop\Voice\02_ru_ogg\ ОК
17_8) Запускаем "Advanced Renamer" и нажимаем "Импорт из CSV" -> Имя файла "03_Table.csv" -> Папка исходных файлов "C:\Users\Root\Desktop\Voice\02_ru_ogg" -> Разделитель ";" -> Кодировка "ANSI" -> Импорт
17_9) Нажимаем "Пакетный запуск" -> Готово
В итоге будет:
- Таблица "01_Main.txt" с текстом и названиями аудио файлов с кодом говорящего (например "Geralt")
- Удобно названные аудио файлы по котором можно понять кто именно говорит фразу и легко разделить для дальнейшего создания "Набора данных"
@Rootreck Я сделала датасет на основе вашего и выложила на HuggingFace: https://huggingface.co/datasets/korovsky/witchspeech. Огромное вам спасибо за проделанную работу!
@korovsky
Спасибо.
Сейчас я делаю таблицу с сопоставленными данными. Как только проставлю основных персонажей, загружу сюда полный набор данных (63+ тысячи аудиофайлов и таблица Excel). Таблицу буду периодически обновлять, загружая дополненную версию, а старую буду удалять.