Автор Тема: Извлечение мультимедиа (звук, видео, музыка) данных из игр CD/DVD приставок  (Прочитано 387782 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Rockman Z

  • Пользователь
  • Сообщений: 11832
  • Пол: Мужской
    • Twitter
    • ВКонтакте
    • Steam
    • Просмотр профиля
Какими утилитами можно выдергивать изображения/текстуры с образов игр PlayStation 2, помимо интеграции TexMod через эмулятор?

Оффлайн metalslayer

  • Пользователь
  • Сообщений: 76
    • ВКонтакте
    • Просмотр профиля
Всем привет! Как извлечь звуки из X-Men - Mutant Academy 2  (PS1)

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 2514
    • Просмотр профиля
Как извлечь звуки из X-Men - Mutant Academy 2  (PS1)
Использовал USA версию.
Голоса в DATA/SOUND, в стандартном формате .XA.
Звуки в DATA/WAD.WAD хранятся как стандартный Sony PSX ADPCM он же VAG. Формат там, вероятно, как в Mortal Kombat Shaolin Monks и распаковывается с помощью QuickBMS (скрипт: Mksm Ewdf . Mortal Kombat Shaolin Monks EWDF (script 0.1.6) . ewdf . deflate . EWDF . wad и т. д.). Только куча файлов нам мало что даёт.
Ленивые могли бы использовать PSound (есть в наборе Psx Hack Tools, нужно выбрать совместимость с XP), который автоматически сканирует, но, за исключением 24 файлов, он будет использовать стандартную частоту дискретизации (ЧД), а подбирать на слух для 635 файлов утомительно.
24 файла имеют магическое число VAGp, поэтому их легко найти, остальные имеют такой же заголовок, но с нулями, кроме ЧД и размера, поэтому пришлось искать по байтам ЧД + нули. Я предполагаю, что это стандартный VAG, там размер заголовка 0x30 и остальная часть равна размеру в заголовке (смещение 0x10: 4 байта Big-Endian). Я добавлял VAGp в начало для распознания. Проблема в том, что там используются не только стандартные ЧД, поэтому искал конец файлов VAG, так как часто они идут подряд, чтобы узнать используемые ЧД (конец файла + смещение ЧД в заголовке следующего). Я мог пропустить мало используемые ЧД, тогда придётся разбирать формат .WAD полностью. Кстати, Sony PSX ADPCM имеет похожую структуру (UPD: в смысле узнаваемую структуру, если смотреть в HEX-редакторе), в данных каждые 16 байт равны нулю, а в конце обычно много семёрок, здесь для многих это 07 00 77 77 77 77 77 77 77 77 77 77 77 77 77 77, но могут быть 07 07 07 ... .

Короче
Я написал скрипт, который извлекает .vag файлы и конвертирует. PSound нашёл 659, у меня 668, вроде все воспроизводятся и ложных файлов не было.
1. Установить Python 3, последнюю версию для Windows 8+, а 3.8.7 для Windows 7.
2. Для конвертирования можно использовать ffmpeg, но лучше думаю vgmstream. Поэтому скачать test.zip. Рядом с файлом WAD.WAD создать папку vgmstream, в которую положить файлы из test.zip.
3. Скачать мой скрипт extract_vag.py и положить его рядом с WAD.WAD. Запустить.
Если всё правильно, в WAD_unpack будет 1 336 файлов, .vag.wav - WAV и .vag. Если не найден vgmstream, то 668 файлов .vag. В корне WAD_unpack 24 файла, которые были с заголовком VAGp, остальные в папках разложены по частотам: 11025, 22050 и т. п.
« Последнее редактирование: 20 Январь 2021, 20:45:55 от Sharpnull »

Оффлайн metalslayer

  • Пользователь
  • Сообщений: 76
    • ВКонтакте
    • Просмотр профиля
Использовал USA версию.
Голоса в DATA/SOUND, в стандартном формате .XA.
Звуки в DATA/WAD.WAD хранятся как стандартный Sony PSX ADPCM он же VAG. Формат там, вероятно, как в Mortal Kombat Shaolin Monks и распаковывается с помощью QuickBMS (скрипт: Mksm Ewdf . Mortal Kombat Shaolin Monks EWDF (script 0.1.6) . ewdf . deflate . EWDF . wad . PWF . deflate_compress . crc). Только куча файлов нам мало что даёт.
Ленивые могли бы использовать PSound (есть в наборе Psx Hack Tools, нужно выбрать совместимость с XP), который автоматически сканирует, но, за исключением 24 файлов, он будет использовать стандартную частоту дискретизации, а подбирать на слух для 635 файлов утомительно.
24 файла имеют магическое число VAGp, поэтому их легко найти, остальные имеют такой же заголовок, но с нулями, кроме частоты дискретизации и размера, поэтому пришлось искать по байтам частоты + нули. Я предполагаю, что это стандартный VAG, там размер заголовка 0x30 и остальная часть равна размеру в заголовке (смещение 0x10: 4 байта Big-Endian). Я добавлял VAGp в начало для распознания. Проблем в том, что там используются не только стандартные частоты дискретизации, поэтому искал конец файлов, так как часто они идут подряд, чтобы узнать используемые частоты. Я мог пропустить мало используемые частоты, тогда придётся разбирать формат .WAD полностью. Кстати, Sony PSX ADPCM имеет похожую структуру, в данных каждые 16 байт равны нулю, а в конце обычно много семёрок, здесь для многих это 07 00 77 77 77 77 77 77 77 77 77 77 77 77 77 77, но могут быть 07 07 07 ... .

Короче
Я написал скрипт, который извлекает .vag файлы и конвертирует. PSound нашёл 659, у меня 668, вроде все воспроизводятся и ложных файлов не было.
1. Установить Python 3, последнюю версию для Windows 8+, а 3.8.7 для Windows 7.
2. Для конвертирования можно использовать ffmpeg, но лучше думаю vgmstream. Поэтому скачать test.zip. Рядом с файлом WAD.WAD создать папку vgmstream, в которую положить файлы из test.zip.
3. Скачать мой скрипт extract_vag.py и положить его рядом с WAD.WAD. Запустить.
Если всё правильно, в WAD_unpack будет 1 336 файлов, .vag.wav - WAV и .vag. Если не найден vgmstream, то 668 файлов .vag. В корне WAD_unpack 24 файла, которые были с заголовком VAGp, остальные в папках разложены по частотам: 11025, 22050 и т. п.
Жесть. Спасибо.

Оффлайн dedok179

  • Пользователь
  • Сообщений: 451
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
Использовал USA версию.
Голоса в DATA/SOUND, в стандартном формате .XA.
Звуки в DATA/WAD.WAD хранятся как стандартный Sony PSX ADPCM он же VAG. Формат там, вероятно, как в Mortal Kombat Shaolin Monks и распаковывается с помощью QuickBMS (скрипт: Mksm Ewdf . Mortal Kombat Shaolin Monks EWDF (script 0.1.6) . ewdf . deflate . EWDF . wad . PWF . deflate_compress . crc). Только куча файлов нам мало что даёт.
Ленивые могли бы использовать PSound (есть в наборе Psx Hack Tools, нужно выбрать совместимость с XP), который автоматически сканирует, но, за исключением 24 файлов, он будет использовать стандартную частоту дискретизации, а подбирать на слух для 635 файлов утомительно.
24 файла имеют магическое число VAGp, поэтому их легко найти, остальные имеют такой же заголовок, но с нулями, кроме частоты дискретизации и размера, поэтому пришлось искать по байтам частоты + нули. Я предполагаю, что это стандартный VAG, там размер заголовка 0x30 и остальная часть равна размеру в заголовке (смещение 0x10: 4 байта Big-Endian). Я добавлял VAGp в начало для распознания. Проблем в том, что там используются не только стандартные частоты дискретизации, поэтому искал конец файлов, так как часто они идут подряд, чтобы узнать используемые частоты. Я мог пропустить мало используемые частоты, тогда придётся разбирать формат .WAD полностью. Кстати, Sony PSX ADPCM имеет похожую структуру, в данных каждые 16 байт равны нулю, а в конце обычно много семёрок, здесь для многих это 07 00 77 77 77 77 77 77 77 77 77 77 77 77 77 77, но могут быть 07 07 07 ... .

Короче
Я написал скрипт, который извлекает .vag файлы и конвертирует. PSound нашёл 659, у меня 668, вроде все воспроизводятся и ложных файлов не было.
1. Установить Python 3, последнюю версию для Windows 8+, а 3.8.7 для Windows 7.
2. Для конвертирования можно использовать ffmpeg, но лучше думаю vgmstream. Поэтому скачать test.zip. Рядом с файлом WAD.WAD создать папку vgmstream, в которую положить файлы из test.zip.
3. Скачать мой скрипт extract_vag.py и положить его рядом с WAD.WAD. Запустить.
Если всё правильно, в WAD_unpack будет 1 336 файлов, .vag.wav - WAV и .vag. Если не найден vgmstream, то 668 файлов .vag. В корне WAD_unpack 24 файла, которые были с заголовком VAGp, остальные в папках разложены по частотам: 11025, 22050 и т. п.
Спасибо за интересные мысли. Это помогло мне некоторые вещи понять которые не мог понять раньше, когда читал только сухую документацию.

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 2514
    • Просмотр профиля
dedok179, хотя я ничего нового не сказал. Немного отредактировал своё сообщение, чтобы было чуть понятнее. Интересно как PSound распознаёт Sony PSX ADPCM, и почему он не нашёл все, для этого придётся формат разбирать.
Жесть.
Это довольно просто, повезло, что были "пустые заголовки", у некоторых игр нет стандартных заголовков, а отдельная таблица со смещениями, размерами и частотами дискретизации (например, [PS2] RE4 файл title.snd).

Оффлайн dedok179

  • Пользователь
  • Сообщений: 451
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
Немного отредактировал своё сообщение, чтобы было чуть понятнее. Интересно как PSound распознаёт Sony PSX ADPCM, и почему он не нашёл все, для этого придётся формат разбирать.
С Vigilante 8 тоже есть местами такая фигня. В архиве объявлено 8 звуков, а программа только 5 читает.

Оффлайн dedok179

  • Пользователь
  • Сообщений: 451
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
у некоторых игр нет стандартных заголовков, а отдельная таблица со смещениями, размерами и частотами дискретизации (например, [PS2] RE4 файл title.snd).
В таком случае мы сами формируем vag заголовок из полученных данных? К примеру есть архив, в начале указано к-во звуков и его размер, дальше идут друг за другом инфо о звуках - 4 байта (частота семплирования и тд), после них идут друг за другом через сигнальную последовательность байт данные звука (пусть будет последовательность 10 байт нулей).

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 2514
    • Просмотр профиля
В таком случае мы сами формируем vag заголовок из полученных данных?
Заголовок и расширение .vag нужны только для распознания программой vgmstream или ffmpeg, у вас может быть свой конвертер, который принимает сырые данные с передачей частоты дискретизации и размером, который и так равен размеру файлу без заголовка для стандартного моно, например через аргументы командной строки. По исходному коду vgmstream можно понять, что бывают нестандартные типы или расширения для PS2, но кажется для PSX, за исключением The Simpsons Wrestling и версии 0x20, используется только стандартный моно заголовок (4 байта - VAGp, 4b BE - версия [для PSX нули], 4b - нули, 4b BE - размер без заголовка, 4b BE - частота дискретизации, 12b - нули [в X-Men какие-то доп. данные или мусор], 16b - имя трека; это всё видно в коде vgmstream).
через сигнальную последовательность байт данные звука (пусть будет последовательность 10 байт нулей)
Я не сказал, что у Sony PSX ADPCM в данных в начале 16 нулей похоже всегда.
Ещё VGMToolbox умеет извлекать: Misc. Tools > Extraction Tools > Streams > Sony ADPCM Extractor, но он работает медленнее, много ложных срабатываний (1107 файлов для WAD.WAD) и может обрезать начальные 16 нулей.

Оффлайн dedok179

  • Пользователь
  • Сообщений: 451
  • Пол: Мужской
    • Youtube
    • Просмотр профиля
у вас может быть свой конвертер
Мне проще будет заголовок присобачить, чем пересобирать чужой конвертер или свой писать. Не разбираюсь увы в конвертировании звука как таковой.

Оффлайн Nik Pi

  • Пользователь
  • Сообщений: 14
    • Просмотр профиля
PSX                                                                                                                                                                                                                               
MK trilogy                                                                                                                                                                                                                       
Как можно добавить новые треки (для арен из МК1), и изменить старые (хочу поменять музыку из опций и титров)?

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 2514
    • Просмотр профиля
Mortal Kombat Trilogy [PSX]
Как можно добавить новые треки (для арен из МК1)
Явно придётся разбирать и писать код, этот вопрос к опытным ромхакерах.
изменить старые (хочу поменять музыку из опций и титров)
1. Если длина треков останется такой же, то всё просто. Музыка хранится как CD-DA (обычный Audio CD), которая имеет характеристики 44100 Hz, 16-bit, Little-Endian, Stereo.
1a. При редактировании "CUE + несколько BIN" как redump образ, то аудио - все треки, кроме 1-го (с 02 до 30). Можно открыть в Audacity: Файл > Импорт > Raw-данные > Signed 16-bit PCM, Little-endian, 2 канала (стерео). В начале всегда 2 секунды тишины. После редактирования, которое не изменит длину трека (смотреть на количество сэмплов), выделить наш трек, Файл > Экспорт > Экспорт выделенного аудио..., сохранить как там указано (RAW, Signed 16-bit PCM). ffmpeg тоже может сконвертировать в CD-DA как-то так:
ffmpeg -i Awaken.mp3 -f s16le -ar 44100 -ac 2 -c:a pcm_s16le Track22.rawНо всё равно придётся добавлять тишину и обрезать.
1b. При редактировании "CUE + один BIN" (после сохранения в CDmage, например) нужно будет вставлять через HEX-редактор. Извлечь и прослушать трек можно с помощью CDmage, изменяем как делали выше, потом поиск по данных из оригинального трека в HEX-редакторе и вставка поверх нового трека. Найти начало и конец трека можно по-другому, в CUE у нужного трека смотрим:
  TRACK 22 AUDIO
    INDEX 00 43:33:08
    INDEX 01 43:35:08
0-й индекс начало с тишиной, 1-й начало музыки, поэтому можно вставлять сразу с позиции музыки. Здесь указаны минута:секунда:сектор(frame), в одной секунде 75 секторов, а один сектор 2352 байта, поэтому ((43 * 60 + 33) * 75 + 8) * 2352 = 460952016 байт (0x1b7991d0) начало 22-го трека, а концом будет 0-й индекс следующего трека минус 1.
Есть программы для работы с Audio CD, но я их не смотрел.

2. Если длина треков другая, то уже не получится просто заменить трек, т. к. игра где-то хранит смещения. Проблему можно увидеть, если заменить трек Track 22 на Track 23, что проще сделать с "CUE + несколько BIN", тогда на главном экране будет неправильная музыка, которая идёт позже, из-за уменьшения Track 22.
Я не смог найти смещения через HEX-редактор в Track 01, т. е. по всем данным игры. Я предположил только 3 способа хранения смещения: в байтах, в секторах по 2352 байта, в минута:секунда:сектор. Все способы между собой легко преобразуются. Последний способ используется в PlayStation SDK, страница 670 в PlayStation 1 SDK 4.4\Devrefs\Libref.pdf:
typedef struct {
  u_char minute; Minute
  u_char second; Second
  u_char sector; Sector
  u_char track; Track number (не используется)
} CdlLOC;
Эта структура передаётся в CdControl() на странице 673 для команды CdlPlay, которая воспроизводит CD-DA.
Для поиска я использовал точные смещения, хотя они могут быть заданы с отступом. Также меня путает 2 секунды тишины и поле Start Sector в CDmage, которое смещено на ещё 2 секунды (150 секторов). Я пробовал смещать секунды вперёд и назад на 2, всё равно не получилось найти общую таблицу. Это тоже оставим на опытных ромхакеров.

Оффлайн igoryek

  • Пользователь
  • Сообщений: 3
    • Просмотр профиля
Добрый день.
помогите, пожалуйста, извлечь музыку из игры [XBOX Original] 007: Nightfire.
такие "внутренности":

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 2514
    • Просмотр профиля
mis01.mus - файлы .MUS удалось открыть с помощью ADPCM Player v1.44h. внутри лежат несколько треков (звучащие в уровне я так понимаю), которые можно извлечь в формате .SNG и прослушать в foobar'е. если есть более лучший вариант, то подскажите.
mis01.viv - файлы .VIV удалось открыть VIV Editor для NFS Porsche. там текстуры, анимации  т.д. звуков вроде нет.
mis01en.spe - не удалось найти чем открыть. подозреваю очередной архив с какими-то файлами. HEX показывает .asf файлы. может диалоги?
Все эти файлы в одном типе контейнера - BIGF/VIV, это видно и по "BIG" байтам в начале файла. Я использую quickbms для распаковки, подходит как Electronic Arts BIG4/BIGF archives (*.big), так и Need for speed Underground 2 (VIV), но там кода меньше, наверно меньше поддерживает. В любом случае оба скрипта распаковывают в файлы с названием, у MUS и SPE - это ASF, в первом случае музыка, во втором голос. В ASF аудио adpcm_ea_r1, как показывает ffmpeg -i file.asf, т. е. один из Electronics Arts ADPCM.
Сконвертировать аудио и видео, а также достать аудио из видео, можете с помощью ffmpeg. Ещё аудио можете сконвертировать через foobar2000 или через vgmstream, который специально сделали для декодирования игровых аудио.

Часть информации подходит от "James Bond 007: From Russia With Love" из ripkit.chm (нужно разблокировать файл для отображения), который в этой теме часто указывали, но достаточно только распаковки файлов и ffmpeg.
--------
Кстати, в MPC нужно отключать Normalize для настроек аудио при воспроизведении XMV и после конвертирования тоже, иначе звук скачет. Пробовал: просто в MPC; ffmpeg -i 1.xmv -c copy 1.mkv (в mkv контейнере для удобства); ffmpeg -i 1.xmv 1.mp4. Может у меня что-то со звуком.
« Последнее редактирование: 17 Февраль 2021, 03:06:19 от Sharpnull »

Оффлайн igoryek

  • Пользователь
  • Сообщений: 3
    • Просмотр профиля
спасибо за ответ. я попробую. но эти все действия для папки 'driving', а это пара уровней с вождением машины. я так понимаю основные файлы игры лежат в 'eurocom' и запакованы в d00, d01 и т.д. попробовал этот https://fileext.info/extension/d00 VirtualDrive - видит файл d00, но при монтировании пишет 'Invalid file'.

Онлайн Sharpnull

  • Пользователь
  • Сообщений: 2514
    • Просмотр профиля
попробовал этот https://fileext.info/extension/d00 VirtualDrive - видит файл d00, но при монтировании пишет 'Invalid file'.
Эти дурацкие сайты редко пишут что-то полезное, точно не для игровых форматов. По названию filesys.d00 понятно, что там файловая система, а ещё очевидно, что там сжатые данные. Возможно для сжатия используется "стандартное" сжатие для Xbox, в QuickBMS оно встроено, скрипты с использованием можно найти по метке xmemdecompress, но вызывать распаковку нужно из скрипта, а структура не ясна (у первого .d00 сжатые файлы начинаются там, где появляются на вид случайные байты). Я не разбираюсь в чудном синтаксисе QuickBMS, если поймёте как распаковывать сырой файл и будете файл уменьшать на 1 байт для проверки, то возможно получится распаковать или узнать, что сжатие не это :)

Оффлайн igoryek

  • Пользователь
  • Сообщений: 3
    • Просмотр профиля
Эти дурацкие сайты редко пишут что-то полезное, точно не для игровых форматов.
согласен, но так как я сам не проггер и не кодер, приходится только гуглить. а там вот всякие такие сайты...
По названию filesys.d00 понятно, что там файловая система, а ещё очевидно, что там сжатые данные. Возможно для сжатия используется "стандартное" сжатие для Xbox, в QuickBMS оно встроено, скрипты с использованием можно найти по метке xmemdecompress, но вызывать распаковку нужно из скрипта, а структура не ясна (у первого .d00 сжатые файлы начинаются там, где появляются на вид случайные байты). Я не разбираюсь в чудном синтаксисе QuickBMS, если поймёте как распаковывать сырой файл и будете файл уменьшать на 1 байт для проверки, то возможно получится распаковать или узнать, что сжатие не это :)
попробовал все скрипты с пометкой xmemdecompress - ничего. также xbox, eurocom.

такой вопрос - .xbe исполняющий файл xbox'а. как-то можно отследить что он делает, когда взаимодействует с теми файлами?