处理 mp3 文件中的音轨长度元数据

Posted

技术标签:

【中文标题】处理 mp3 文件中的音轨长度元数据【英文标题】:Manipulate track length metadata in mp3 files 【发布时间】:2019-11-18 13:08:54 【问题描述】:

我必须在给定的软件上播放各种 mp3 文件,而不显示任何可能导致识别播放曲目的信息(某种测验)。为此,我想将显示的轨道长度更改为任意值。我可以轻松更改标准 ID3 标签,如“姓名”、“艺术家”等。但是,更改显示的轨道长度似乎更棘手......

编辑(在维克拉姆回应后):

到目前为止,我能够通过修改 vbr 编码的 mp3 文件中的“xing”标头来操纵显示的曲目长度。更准确地说,我使用十六进制编辑器更改了“帧数”部分中的字节,该编辑器生成的 mp3 显示了修改后的音轨长度:

Track length = Number of Frames * Samples Per Frame / Sampling Rate

文件仍在正确播放。这种方法似乎适用于一般的 winamp、vlc 播放器和 windows。不幸的是,它似乎不适用于我必须使用的专有软件。使用该软件时,由于应用了不同的计算方法,不知何故仍会识别原始曲目时长。

关于如何计算轨道持续时间的任何其他想法。被骗显示任意值?

谢谢!

【问题讨论】:

【参考方案1】:

是和否。

大多数 .mp3 文件在 XING 标头中除了 ID3 之外都有此额外信息,其中包含文件的持续时间。

您可以修改此标题以放置错误的信息。

或者您可以简单地删除这个 XING 标头!

.mp3 文件有两种类型:CBR 和 VBR。 CBR 是最常见的。因此,使用比特率信息,玩家仍然可以估计 CBR 的音频长度。

对于 VBR,这并不总是正确的!

因此,您拥有的音频文件很可能是没有 XING 标头的 VBR 编码 mp3。

【讨论】:

【参考方案2】:

轨道长度是通过解析整个 MPEG 音频流来计算的,这是一个相当简单的过程。 XING (or similar) 标头(正确:帧)作为帮助存在,例如用于在文件中查找的附加索引,但这不是强制性的;它也之所以存在,是因为 25 年前在大多数情况下,当 VBR 被“发明”时,完全解析文件并将相关数据保存在内存中需要太多的性能。元数据,您可以在其中定义不正确的轨道长度(如TLEN frame thru ID3v2)也不是强制性的。

所以:这是不可能的。您宁愿找到选择性能而不保证他们发现的一切的软件/播放器。我也没有想到其他文件/流格式,其中轨道长度是强制性的,不能通过解析文件来计算。

【讨论】:

以上是关于处理 mp3 文件中的音轨长度元数据的主要内容,如果未能解决你的问题,请参考以下文章

拆分长度不正确的音轨 - FFMPEG

在 SOX 中混合带有偏移量的音轨

mp3 文件元数据中的自定义键

如何从 C# 中的文件中获取元数据? [复制]

如何更改 mp3 中的元数据 [关闭]

将 id3 元数据写入应用程序包中的 mp3 文件