如何在不更改一般信息的情况下损坏mp3文件



我需要在互联网上提供一些MP3用于教育目的。我不希望它被非法下载。因此,我想破坏MP3文件,使其在其他媒体播放器中无法读取音乐。

问题:
我需要保持元数据不变(长度、标签等(,因为我需要在这些MP3文件上使用mutagen.mp3mutagen.id3

我什么都没试过。我想知道是否有人知道如何做到这一点?

您可以录制自己的"音乐";(耳语或拍手(并创建自己的mp3。或者你可以使用维基百科上的一些不含皇室色彩的片段。

我已经很久没有使用MP3字节了,所以请仔细检查下面建议中的帧大小数字。如果你根据我的指导尝试一些东西,我可以帮助解决任何问题。

注意:
使用十六进制编辑器查看MP3的内部,并按照下面解释的字节结构进行操作。

可能的解决方案

如果你的MP3文件有元数据,那么它实际上是两个部分连接在一起
(ie:ID3元数据+MP3音频数据(。

ID3编辑器只关心第一部分,以便在不影响音频的情况下编辑该部分

第一部分是ID3元数据,它以3个字节的文本"开始";ID3";(或字节:494433(
它的大小(字节长度(以字节为单位列出,因此您可以跳过ID3跳到MP3的开头。

第二部分是MP3数据,它以2个字节的数字255251(或字节:FFFB(开始

两个字节FF FB典型的MP3帧的开头(MP3帧头有4个字节,例如:FF FB XX XX(。XX部分将取决于MP3设置,如频率、比特率、版本等。

要损坏MP3数据,您可以尝试:

  • 确保您的MP3文件编码为恒定比特率或CBR(而不是可变位元率或VBR(
    这样可以更容易地定位每个MP3帧的开头。每个帧都将具有匹配的FF FB XX XX签名。它们都将是相同的大小,因此,一旦您从检查第一帧中知道字节长度,您就可以跳过相同的数字到达下一个(或任何(MP3帧的开始(例如:您可以使用到达特定的帧号(。

  • 要查找MP3帧的字节长度:请参阅我对类似问题的回答
    公式为FrameSize = 144 * BitRate / (SampleRate + Padding)(CBR=零填充(
    示例:(比特率=192,sampleRate=44.1 khz(
    144 * 192 / (44.1 + 0) = 626 bytes per audio frame

  • 每帧开始时的每个FF FB替换为随机字节,如AA AA甚至AB CD。。。如果不再是预期的CCD_ 19,则MP3播放器应该拒绝播放它,给出错误,例如:";无效的MP3文件";。

  • 稍后,您自己的应用程序总是可以用预期的FF FB放回(替换(当前的2个字节,然后进行音频播放。通过跳过ID3字节到达第一帧的位置,并将找到的前两个字节替换为FF FB,可以取消损坏

相关内容

最新更新