如何恢复损坏的(mp3?)文件

如何恢复损坏的(mp3?)文件

我已收到一份文件https://drive.google.com/file/d/10Fqr6Ipu2J8yKU_m3-EMzsVj7XeSYEdV/view?usp=sharing. 从https://hexed.it/显示它很可能是一个 mp3 文件(基于文件末尾的 ID3 信息)。任务是恢复文件头,以便我们能够打开它(可能在音乐播放器中)。任何线索都将不胜感激。

我注意到文件头是空字节,所以我尝试从工作正常的 mp3 文件中复制起始字节。还尝试将最后几个带有清晰文本的字节移动到文件开头。这些方法都不起作用。

答案1

MP3 文件没有强制性标头;它们只是一系列原始的 MPEG 音频帧,每帧都有自己的 4 字节迷你标头(Ab)。其他一切都是额外的。(即使是 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 文件)在概念上相似,但文件中使用的特定块名称 – LISTINFO明显是 RIFF,它用于各种与 Windows 相关的格式:.wav 用于音频,.avi 用于视频,.ani 用于动画鼠标光标等。最data开始附近很可能也是一个块标签。

在这些 RIFF 子格式中,IART(艺术家)、ICRD(日期)、IGNR(流派)、id3␣(嵌入的 ID3 标签)块是 WAV 文件的典型块。缺少的是顶层RIFF(也可能是部分块fmt␣),这会阻止玩家识别该文件。

fmt␣与另一个 .wav 文件相比,偏移量 0x10 看起来像是块的完整内容,因此缺失的初始八个字节应该是这样的:

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

在此处输入图片描述

或者,由于您确实拥有包含整个 PCM 数据(长度为 4 字节)的整个data块,因此仅提取该部分并通过蛮力尝试各种原始 PCM 格式可能会更容易(组合并不多)。

相关内容