Как восстановить поврежденный (mp3?) файл

Как восстановить поврежденный (mp3?) файл

Мне дали файл по адресуhttps://drive.google.com/file/d/10Fqr6Ipu2J8yKU_m3-EMzsVj7XeSYEdV/view?usp=sharing. Открываем его изhttps://hexed.it/показывает, что это, скорее всего, файл mp3 (на основании информации ID3 в конце файла). Задача состоит в том, чтобы восстановить заголовок файла таким образом, чтобы мы могли открыть его (предположительно в музыкальном проигрывателе). Любые подсказки были бы весьма признательны.

Я заметил, что заголовок файла был пустым, поэтому я попытался скопировать начальные байты из рабочего mp3-файла. Также пробовал переместить последние несколько байтов с читаемым текстом в начало файла. Ни один из этих способов не сработал.

решение1

MP3-файлыне иметьобязательный заголовок; это просто необработанная серия аудиокадров MPEG, причем каждый кадр имеет свой собственный 4-байтовый мини-заголовок (а,б). Все остальное — дополнительное. (Даже теги ID3 и заголовки LAME — оба они появились гораздо позже — замаскированы под недействительные кадры, которые большинство игроков теперь знают, что их нужно игнорировать.)

Кроме того, формат кадра является самосинхронизирующимся – вы можете вырезать его в любой момент, и декодер проигнорирует мусорный полукадр в начале, ища биты синхронизации, 0xFFFчтобы найти начало следующего кадра. Это означает, что вы можете буквально бросить любой случайный кусок файла MP3 в декодер, и он должен воспроизвести; если этого не происходит, то это, скорее всего, вообще не файл MP3.

Я бы пришел к выводу, что ваш файл не MP3; это что-то другое, использующее формат тегов ID3 ​​(редко, но не необычно). Более того, конечные биты вашего файла не выглядятдовольнокак тег ID3 — многие из этих 4-буквенных идентификаторов фрагментов не начинаются с буквы «T», как это было бы типично для ID3v2; мне они кажутся больше похожими на то, что можно найти вформат фрагментовтакой какАИФФилиWAV/RIFF(оба действительно встраивают теги ID3!), но не в MP3.

(Ну, да, тег ID3 сам по себе также является фрагментированным форматом, но MP3 в целом таковым не является, вот в чем суть.)

Помимо IFF и его производных AIFF/RIFF, существует довольно много других форматов с тегами/фрагментами, например, PNG, а также ISO BMFF (который используется для файлов MP4/HEIF/AVIF), которые по своей концепции схожи, но конкретные имена фрагментов, используемые в вашем файле – LIST, INFO– являются отличительными RIFF, которые используются для различных форматов, связанных с Windows: .wav для аудио, .avi для видео, .ani для анимированных курсоров мыши и т. д. Почти в dataсамом начале, скорее всего, также находится тег фрагмента.

Из этих подформатов RIFF фрагменты IART(исполнитель), ICRD(дата), IGNR(жанр), id3␣(встроенный тег ID3) будут типичными для файла WAV.Чего не хватает, так это RIFFфрагмента верхнего уровня.(и, возможно, часть фрагмента fmt␣), что не позволяет проигрывателям распознать файл.

Смещение 0x10 выглядит как полное содержимое фрагмента fmt␣при сравнении с другим файлом .wav, поэтому отсутствующие начальные восемь байт должны выглядеть так:

00000000  52 49 46 46 __ __ __ __  57 41 56 45 66 6d 74 20  |RIFF____WAVEfmt |

…с пустой частью, которая является длиной фрагмента верхнего уровня (или 0xFFFFFFFF, чтобы просто указать «весь файл»). Общая структура должна быть такой:

RIFF[WAVE]
 ├─fmt␣   (PCM S16LE)
 ├─data   (~Never gonna give you up~)
 ├─LIST[INFO]
 │  ├─IART = "GCTF"
 │  ├─ICRD
 │  └─IGNR = "Drum & Bass"
 └─id3␣   (embedded ID3, not RIFF-format)
    ├─TPE1 = "GCTF"
    ├─TDRC
    └─TCON = "Drum & Bass"

Если вы пытаетесь восстановить заголовок, используйте fqдля его проверки (что также хорошо работает для реальных файлов MP3 и других распространенных форматов):

$ fq . test.wav
$ fq .chunks[] test.wav
$ fq .chunks[2].chunks[] test.wav

введите описание изображения здесь

В качестве альтернативы, поскольку у вас есть весь dataфрагмент, содержащий все данные PCM (длиной 4 байта), может быть проще извлечь только эту часть и попробовать различные форматы необработанных PCM методом перебора (комбинаций не так уж и много).

Связанный контент