如何检查或更改 USLT (ID3) 中的编码?

How to check or change encoding in USLT (ID3)?

这不是重复的。我都读过了。

我有一部诺基亚-N8-00。它的音乐播放器支持USLT (UnS同步Lyrics/T分机)。我使用一个名为 spotdl (https://github.com/Ritiek/Spotify-Downloader) 的工具从 "spotify" 获取歌曲标题并从其他来源(通常是 youtube)下载它们并合并元数据。

那么问题来了,用那个工具下载的音乐在我的所有设备上都有歌词,除了N8。幸运的是,我的 phone 也支持嵌入歌词的音乐。然后我分析了这两个文件,发现在二进制序列中,它们的区别很小(仅针对 USLT 部分,但它们是不同的歌曲)。差异是:-

支持的:

55 53 4C 54 00 00 0A 56 00 00 03 58 58 58

没有的那个:

55 53 4C 54 00 00 07 38 00 00 01 58 58 58

(这些序列用于文件中的"USLT"声明)

我认为这是编码差异。如果我是对的,存在什么编码,在哪个编码中?如果不是编码,那是什么?

我知道这些序列无法详细说明情况。所以,这是我正在尝试的文件 https://github.com/gaurav712/music.

我不需要受支持的 USLT,我只是对此感到好奇,因为我想在 C 中实现它(虽然我不需要特定语言的帮助) .

这是我得到的:

55 53 4C 54

转换为:

USLT

所以我们做对了。现在,我相信我们可以将该结果与这个答案合并:

Frame ID       $xx xx xx xx (four characters)
Size           $xx xx xx xx
Flags          $xx xx
Encoding       $xx
Text

(摘自:ID3v2 Specification

(或者看这个:https://web.archive.org/web/20161022105303/http://id3.org/id3v2-chapters-1.0

现在,我无法从源头上得到这个(因为该网站已关闭)但还有这个:

Encoding flag explanation:
• [=13=] ISO-8859-1 [ISO-8859-1]
•  UTF-16 [UTF-16]
•  UTF-16BE [UTF-16]
•  UTF-8 [UTF-8]

因此,根据这些发现(我不太确定),支持的是 UTF-8 编码,不支持的是 UTF-16。

编辑

我已经下载并查看了您的 mp3 文件以供进一步检查。这是我的新发现:

首先,我们对编码的判断是正确的:

支持 UTF-8:

UTF-16 不受支持:

这是否意味着您只需将“01”变成“03”就可以神奇地发挥作用?我怀疑。这取决于driver。如果 driver 看到 '\x00' 字节并将其解释为字符串结尾(如 USLT 负载结尾)怎么办?要对此进行测试,您可以尝试手动转换文件的编码(通过删除多余的字节)。

其次,运行 eyeD3 在 linux 两个文件上,我恢复了:

supported.mp3   -> ID3 v2.4
unsupported.mp3 -> ID3 v2.3

也许这是个问题?

另外请注意,USLT 标签在两个文件中的位置不同:

支持.mp3:

不支持.mp3:

在 linux 上,有更多工具可以为您提供额外信息,如果需要的话:

mp3info, id3info, id3tool, exiftool, eyeD3, lltag

举几个例子。但是,我认为主要问题在于文本编码。使用上述工具,我能够很好地恢复歌词。但是有些工具会因为ID3版本不同等原因给出不同的答案。