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

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

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
Я использую Hex Editor Neo или notepad++ с плагином HEX-Editor.
искать нужно строку CDXA

Оффлайн Leomakc777

  • Пользователь
  • Сообщений: 38
    • Просмотр профиля
Я использую HXD если ты про Хекс редактор- в нем искать как я понял и в самом образе? или же именно в str файле? и как там править? на что? ладно сам поковыряю-благодарю за помощь.
« Последнее редактирование: 04 Июля 2025, 15:44:06 от Leomakc777 »

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4660
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
Вот так выглядит структура образа в jpsxdec_v2.0.
Выглядит так, будто бы это видеодиск с главами. Потому и "помойка", что всё в одной куче. А разметка, видимо, в исполняшке.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5732
    • Просмотр профиля
Образ  PSX игры  Клуб Солярис - Мисс Лето и не только этот образ.

Файл называется Pomoika.str.
Там шифруется часть каждого кадра. Написал скрипт на Python 3 для декодирования, положить рядом с POMOIKA.STR и запустить. Теперь через jpsxdec можно посмотреть видео, но без аудио, я не знаю как его достать. Названия каждого видео с позиции 0x59D6E в CUNAMI.PSX через каждые 16 байт. Код дешифровки в CUNAMI.PSX по адресу CPU $800157F0.
UPD: Аудио можно получить через jpsxdec, если открыть сам образ (я не заметил сразу). Остаётся объединить через ffmpeg или другие программы. Пробовал вставить POMOIKA.STR обратно в образ через CDmage, чтобы открыть через jpsxdec с аудио, но не получилось.
UPD2: Добавил v2, немного сделал код лучше, но результат такой же.
« Последнее редактирование: 05 Июля 2025, 14:40:29 от Sharpnull »

Оффлайн Leomakc777

  • Пользователь
  • Сообщений: 38
    • Просмотр профиля
Благодарю всех за помощь-сейчас буду смотреть

Добавлено позже:
положить рядом с POMOIKA.STR и запустить
всего два вопроса:

1. мне необходимо установить на комп python3 для запуска скрипта?

2. как я положу скрипт-если он находится в образе игры на диске?

Сижу пока читаю и разбираюсь.


Добавлено позже:
Остаётся объединить через ffmpeg

Вот это изучаю сейчас-думаешь это проблему решит-если я склею через это прогу и видео и аудио по новому?
« Последнее редактирование: 04 Июля 2025, 21:17:48 от Leomakc777 »

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5732
    • Просмотр профиля
1. мне необходимо установить на комп python3 для запуска скрипта?
Да. На ютюбе можете посмотреть как индусы ставят.
2. как я положу скрипт-если он находится в образе игры на диске?
Вы должны извлечь файл POMOIKA.STR из образа. Например, с помощью CDmage. Потом запустить fix_str.py и рядом появится POMOIKA_fix.STR.
Вот это изучаю сейчас-думаешь это проблему решит-если я склею через это прогу и видео и аудио по новому?
Я говорил о том, что можно исправить POMOIKA.STR с помощью моего скрипта, открыть исправленный POMOIKA.STR в jpsxdec, чтобы извлечь видео, потом открыть образ игры с помощью jpsxdec и извлечь аудио, потом объединить видео и аудио может любой софт для работы с видео, ffmpeg отличный вариант, если не нуб.

Оффлайн Leomakc777

  • Пользователь
  • Сообщений: 38
    • Просмотр профиля
хорошо-завтра возьмусь вплотную и отпишусь-Благодарю за помочь

Скрипт запустил-все работает.

Добавлено позже:
В общем все работает и видео и звук-есть небольшие глюки, но это намного лучше- в 1000 раз, чем было до этого.

Благодарю за помочь.

Будем изучать самостоятельно и проходить, ну и где то ломать игры.
« Последнее редактирование: 05 Июля 2025, 16:19:29 от ghostdog3 »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2973
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
господа, кто помнит - кто-то выкладывал ром-проигрыватель музыки из разных игр. то есть там получается в зависимости от трека происходит запуск нужного драйвера и играет. я помню что здесь выкладывалось... а вот как это найти? :) одному буржую хочу дать этот ром послушать...

нашел:
SEGA Sound Driver Collection
« Последнее редактирование: 29 Июля 2025, 23:58:22 от SeregaZ »

Оффлайн Yoti

  • Пользователь
  • Сообщений: 4660
  • Пол: Мужской
  • Не тро-гай ме-ня
    • Steam
    • Просмотр профиля
завтра возьмусь вплотную и отпишусь
И, в итоге, забил хер. Как и 99% прочих вопрошающих.

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 988
  • Пол: Мужской
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #1989 : 22 Августа 2025, 17:37:11 »
Перед вами - вся до последнего пикселя графика из Lethal Justice. Именно этот imagesheet как раз и представляет собой весь графический ром игры целиком - одно сплошное "сырое" 16-битное изображение, к которому достаточно было присобачить подставной BMP-заголовок с нужными свойствами. Правда, не обошлось без некоторого пердолинга - чтобы файл адекватно распознавался у всех, его пришлось открывать через IrfanView, затем перевернуть по вертикали, а в конце концов сохранять с заменой (попутно невольно преобразовав из 16- в 24-битный формат, ибо 16 бит IrfanView, увы, не поддерживает).

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 988
  • Пол: Мужской
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #1990 : 17 Ноября 2025, 06:56:19 »
Ой, а что это тут у нас в ключевых файлах Xenosaga Episode I - неужели классический псевдо(хотя, может, и настоящий)архив? О сколько строк, похожих на имена файлов (в том числе и всем нам привычных JPG-шек) там внутри - а файлам xenosaga.00 и .10 даже повезло оказаться достаточно маленьким для прикрепления сюда. Теперь надо бы пошуршать в ELF'е игры - узнать, как эти файлы распаковываются.

Оффлайн SegaMark

  • Пользователь
  • Сообщений: 150
  • Пол: Мужской
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #1991 : 17 Ноября 2025, 11:26:01 »
А через jpsxdec их не видно?

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 988
  • Пол: Мужской
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #1992 : 17 Ноября 2025, 15:15:51 »
jpsxdec

А разве должно быть? Это ж для PS2 игра.

Добавлено 3 декабря 2025 года:
Небольшой скриптик на Python по извлечению всего дерева файлов из образов для Philips CD-i.
Побочные эффекты: образование пустой папки CDDA, если программа обращается к аудиодорожкам на самом диске как к файлам.

Работоспособность проверена на The Apprentice.
« Последнее редактирование: 02 Августа 2026, 14:41:04 от ghostdog3 »

Оффлайн Agent Smith

  • Пользователь
  • Сообщений: 110
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #1993 : 09 Декабря 2025, 12:16:02 »
Подскажите, чем извечь текстуры из Fighting Force 2 для PS1?

Оффлайн Zer0

  • Пользователь
  • Сообщений: 489
  • Пол: Мужской
  • There Is No Knowledge That Is Not Power
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #1994 : 09 Декабря 2025, 15:15:02 »
Agent Smith, в DuckStation есть встроенная функция для создания дампа текстур игры "на лету".
https://github.com/stenzek/duckstation/wiki/Texture-Replacement

Оффлайн Agent Smith

  • Пользователь
  • Сообщений: 110
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #1995 : 09 Декабря 2025, 17:25:34 »
Zer0, у меня щас комп слабый, с Хрюшей на борту

Оффлайн Zer0

  • Пользователь
  • Сообщений: 489
  • Пол: Мужской
  • There Is No Knowledge That Is Not Power
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #1996 : 09 Декабря 2025, 18:45:49 »
Agent Smith, тогда пробовать другие способы > https://www.google.com/search?q=extract+ps1+textures
Хотя если комп не тянет, то для чего это всё?..

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5732
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #1997 : 09 Декабря 2025, 20:15:48 »
Подскажите, чем извечь текстуры из Fighting Force 2 для PS1?
В STR-файлах есть текстуры 8bpp, например, в LOADING.STR с 0x800, ширина 256 (общая 512px, из двух кусков), высота 248. Можно посмотреть через CrystalTile2. Палитры наверно могут быть в разных местах, в LOADING.STR 27000-, в FONT.STR 800- (данные пикселей с A00). О том, что у вас WinXP, нужно писать сразу, почти весь современный софт на XP не работает.

Оффлайн Agent Smith

  • Пользователь
  • Сообщений: 110
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #1998 : 09 Декабря 2025, 23:10:12 »
если комп не тянет, то для чего это всё?.
Не вижу связи

Оффлайн Zer0

  • Пользователь
  • Сообщений: 489
  • Пол: Мужской
  • There Is No Knowledge That Is Not Power
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #1999 : 09 Декабря 2025, 23:58:59 »
Agent Smith, я к тому, что текстуры обычно извлекаются для апскейлинга, с последующей подменой через эмулятор, а таковым является DuckStation. И раз такой вопрос возник на форуме, в то время как простой поисковой запрос выдаёт искомое, предположу, что опыта в этом деле нет. Значит, хочется простого решения, а таковым, опять же, является дамп через эмулятор. Круг замкнулся)

Оффлайн Agent Smith

  • Пользователь
  • Сообщений: 110
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #2000 : 10 Декабря 2025, 07:15:35 »
И раз такой вопрос возник на форуме, в то время как простой поисковой запрос выдаёт искомое
Zer0, ну прям Шерлок Холмс, все дедуктивным методом установил. Закусывать надо.

Я через Яндекс икал и ни чего. Выложил бы сслылку на конкретный сайт тогда

Оффлайн Zer0

  • Пользователь
  • Сообщений: 489
  • Пол: Мужской
  • There Is No Knowledge That Is Not Power
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #2001 : 10 Декабря 2025, 09:48:52 »
Agent Smith, так ты не озвучил детали, что комп старьё и т.д.  Ещё и в Яндексе ищешь и наверняка на русском  :D Закусывать не мне надо.
Выше дал ссылку. Если соображаешь, то разберёшься.

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 988
  • Пол: Мужской
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #2002 : 14 Декабря 2025, 11:49:39 »
На случай, если кто-то не доверяет рипам Sega Lindbergh'овских игр для Teknoparrot и считает их происхождение каким-то мутным и сомнительным (нередко - очень даже обоснованно, например, когда в самом неожиданном месте находишь какие-то файлы, которые дампер или публикатор явно добавил от себя), первый шаг, чтобы распакованный из CHDюка для MAME ISO хотя бы стал читаемым и монтируемым стандартными программами для работы с образами - откоциваем с помощью HEX-редактора занесённые в начало образа какие-то левые непонятные данные и весь первый том (названный "в честь" идентификационного кода игры), оставляя только 2-й (названный просто LINUX)+$8000 байт перед ним.
На случай, если кто не шарит, ищутся тома по сигнатуре $1,"CD001",$1,$0, а сразу следом - название тома.

Лишь после отставления одного тома LINUX станут видны файлы disk0.img, frontend.set, su1.dat и su2.dat.
Следующий шаг опишу после детальнейшего исследования рома для PIC-шифратора. а с этим есть некоторые проблемы, ибо ничего похожего на карту памяти у PICа в MAMEовском драйвере Lindbergh нет - более того, он там даже не заэмулен как один из процессоров, а ром его занесён в базу пока что чисто "щоби був".

Добавлено 22 декабря 2025 года:
Небольшой скриптик на Python по извлечению всего дерева файлов из образов для Philips CD-i.
Побочные эффекты: образование пустой папки CDDA, если программа обращается к аудиодорожкам на самом диске как к файлам.

Работоспособность проверена на The Apprentice.

Добавил поддержку однодорожных дисков без прегэпа (в число которых входят Chaos Control и Thunder in Paradise).
« Последнее редактирование: 02 Августа 2026, 14:41:46 от ghostdog3 »

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 988
  • Пол: Мужской
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #2003 : 25 Декабря 2025, 07:22:57 »
На случай, если кто-то не доверяет рипам Sega Lindbergh'овских игр для Teknoparrot и считает их происхождение каким-то мутным и сомнительным (нередко - очень даже обоснованно, например, когда в самом неожиданном месте находишь какие-то файлы, которые дампер или публикатор явно добавил от себя), первый шаг, чтобы распакованный из CHDюка для MAME ISO хотя бы стал читаемым и монтируемым стандартными программами для работы с образами - откоциваем с помощью HEX-редактора занесённые в начало образа какие-то левые непонятные данные и весь первый том (названный "в честь" идентификационного кода игры), оставляя только 2-й (названный просто LINUX)+$8000 байт перед ним.
На случай, если кто не шарит, ищутся тома по сигнатуре $1,"CD001",$1,$0, а сразу следом - название тома.

Лишь после отставления одного тома LINUX станут видны файлы disk0.img, frontend.set, su1.dat и su2.dat.
Следующий шаг опишу после детальнейшего исследования рома для PIC-шифратора. а с этим есть некоторые проблемы, ибо ничего похожего на карту памяти у PICа в MAMEовском драйвере Lindbergh нет - более того, он там даже не заэмулен как один из процессоров, а ром его занесён в базу пока что чисто "щоби був".

Одна только радость - что содержимое рома для PIC здесь уже не просто набор различных данных, как у Naomi и Chihiro, а совершенно-таки чёткий код (см. ниже). Однако, без информации о карте памяти PICа в Lindberg'е полноценный реверс-энжинеринг под сильным вопросом, ибо без неё не понятно, что откуда берётся и куда заносится.

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 988
  • Пол: Мужской
    • Просмотр профиля
По-своему интересный вышел кейс с "Крутыми тачками" (RoadZero) для J2ME. Там вся графика хранится в файлах d[номер файла] без расширения. По сути, каждый представляет собой группу PNG-файлов, объединённых в один последовательно - в открытую, даже никак не запакованных: всего лишь откоцали расширение у имени. Риппинг обошёлся абсолютно без реверса классов или дебага через эмулятор - просто благодаря тому, что, решив удостовериться, что там действительно графика (а больше негде: почти все остальные файлы в JAR'е - либо классы, либо MIDI), глянул в тамошний хекс и обнаружил PNG-сигнатуру.

Оффлайн e2e41

  • Пользователь
  • Сообщений: 95
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #2005 : 02 Августа 2026, 09:58:55 »
Добрый день, нужна помощь с компрессорм-декомпрессором, платьформа sega dreamcast, игра deSpiria, контейнер *.cpr
оригинальный пост
Цитата
Цитата: kazetrigger post_id=203387 time=1785010755 user_id=22355
I made my own custom tool that incorporates the functionality found in the following projects:

https://github.com/VincentNLOBJ/pvr2image
https://github.com/VincentNLOBJ/PyPVR

You can probably get by with PyPVR for most cases. In the case of deSpiria, it has .CPR files which are LZSS compressed. You'll need to decompress them to PVR first. I found an algorithm to handle that and incorporated that.

The python code for it is as follows (Please note that this code assumes other parts of code are present such as PvrError, so you'll have to tweak the code a bit to get it work. This assumes you have some programming knowledge. If you don't want to raise that custom error, you can raise a standard error or just replace it with print() statements):
def lzss_decompress(data: bytes) -> bytes:
    if len(data) < 5:
        raise PvrError("LZSS input is too short")

    target_size = struct.unpack_from("<I", data, 0)[0]
    if target_size <= 0:
        raise PvrError(f"invalid LZSS decompressed size: {target_size}")

    ring = bytearray(4096)
    ring_pos = 0xFEE
    src_pos = 4
    out = bytearray()

    while src_pos < len(data) and len(out) < target_size:
        flags = data[src_pos]
        src_pos += 1

        for bit in range(8):
            if flags & (1 << bit):
                # Literal byte
                if src_pos >= len(data):
                    raise PvrError("truncated LZSS literal")

                value = data[src_pos]
                src_pos += 1

                out.append(value)
                ring[ring_pos] = value
                ring_pos = (ring_pos + 1) & 0xFFF

            else:
                # Two-byte back-reference
                if src_pos + 1 >= len(data):
                    raise PvrError("truncated LZSS back-reference")

                b0 = data[src_pos]
                b1 = data[src_pos + 1]
                src_pos += 2

                offset = b0 | ((b1 & 0xF0) << 4)
                length = (b1 & 0x0F) + 3

                for i in range(length):
                    value = ring[(offset + i) & 0xFFF]

                    out.append(value)
                    ring[ring_pos] = value
                    ring_pos = (ring_pos + 1) & 0xFFF

                    if len(out) >= target_size:
                        break

            if len(out) >= target_size:
                break

    if len(out) != target_size:
        raise PvrError(
            f"LZSS stream ended at {len(out):,} bytes; "
            f"expected {target_size:,}"
        )

    return bytes(out)

Input a CPR's data as bytes and get the bytes out which you can then export to a file.
распаковщик с помощья чата с Алиса ИИ создать удалосьimport struct
import sys

def lzss_decompress(data: bytes) -> bytes:
    print("  [LZSS] Checking input length...")
    if len(data) < 5:
        raise ValueError("LZSS input is too short")

    target_size = struct.unpack_from("<I", data, 0)[0]
    print(f"  [LZSS] Target size from header: {target_size} bytes")
    if target_size <= 0:
        raise ValueError(f"Invalid LZSS decompressed size: {target_size}")

    ring = bytearray(4096)
    ring_pos = 0xFEE
    src_pos = 4
    out = bytearray()

    print("  [LZSS] Starting decompression loop...")
    while src_pos < len(data) and len(out) < target_size:
        flags = data[src_pos]
        src_pos += 1

        for bit in range(8):
            if flags & (1 << bit):
                # Literal byte
                if src_pos >= len(data):
                    raise ValueError("Truncated LZSS literal")

                value = data[src_pos]
                src_pos += 1

                out.append(value)
                ring[ring_pos] = value
                ring_pos = (ring_pos + 1) & 0xFFF
            else:
                # Two-byte back-reference
                if src_pos + 1 >= len(data):
                    raise ValueError("Truncated LZSS back-reference")

                b0 = data[src_pos]
                b1 = data[src_pos + 1]
                src_pos += 2

                offset = b0 | ((b1 & 0xF0) << 4)
                length = (b1 & 0x0F) + 3

                for i in range(length):
                    value = ring[(offset + i) & 0xFFF]
                    out.append(value)
                    ring[ring_pos] = value
                    ring_pos = (ring_pos + 1) & 0xFFF

                    if len(out) >= target_size:
                        break

            if len(out) >= target_size:
                break

    if len(out) != target_size:
        raise ValueError(
            f"LZSS stream ended at {len(out):,} bytes; expected {target_size:,}"
        )

    return bytes(out)

def main():
    print("=== LZSS Decompressor started ===")
    if len(sys.argv) < 3:
        print("Usage: python lzss_decompress.py <input.cpr> <output.bin>")
        sys.exit(1)

    input_path = sys.argv[1]
    output_path = sys.argv[2]

    print(f"[MAIN] Input: {input_path}")
    print(f"[MAIN] Output: {output_path}")

    try:
        with open(input_path, "rb") as f:
            data = f.read()
        print(f"[MAIN] Read {len(data)} bytes from input file")
    except FileNotFoundError:
        print(f"ERROR: Input file not found: {input_path}", file=sys.stderr)
        sys.exit(1)
    except Exception as e:
        print(f"ERROR reading file: {e}", file=sys.stderr)
        sys.exit(1)

    try:
        decompressed = lzss_decompress(data)
        print(f"[MAIN] Decompressed to {len(decompressed)} bytes")
    except ValueError as e:
        print(f"LZSS decompression error: {e}", file=sys.stderr)
        sys.exit(1)
    except Exception as e:
        print(f"Unexpected error during decompression: {e}", file=sys.stderr)
        sys.exit(1)

    try:
        with open(output_path, "wb") as f:
            f.write(decompressed)
        print(f"[MAIN] Wrote {len(decompressed)} bytes to output file")
        print("=== Done ===")
    except Exception as e:
        print(f"Error writing output file: {e}", file=sys.stderr)
        sys.exit(1)

if __name__ == "__main__":
    main()
неудается упаковать полученный *.pvr обратно, помогите если не сложно с реализацией

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5732
    • Просмотр профиля
Re: Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #2006 : 05 Августа 2026, 14:40:43 »
нужна помощь с компрессорм-декомпрессором, платьформа sega dreamcast, игра deSpiria, контейнер *.cpr
Это классическое LZSS сжатие. Для такого я переделываю https://github.com/lab313ru/lztoshio, мне лень свой код изменять. Сжатие обычное (можно лучше сжать) и предел размера файла установил 16МиБ. Например, в [PS2] Strawberry Panic! сжатие отличается только заголовком (там есть байты "LZ77" и есть размер сжатых данных).
Вот компрессор. Разжатие:
lz_deSpriria.exe XMPCYB_A.CPR out.bin d 0Сжатие:
lz_deSpriria.exe out.bin XMPCYB_A_new.CPR c

Оффлайн e2e41

  • Пользователь
  • Сообщений: 95
    • Просмотр профиля
Извлечение данных (видео, звук, музыка) из CD/DVD
« Ответ #2007 : 05 Августа 2026, 20:54:35 »
благодарю