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

问题描述 投票:1回答:1

这不是重复的。我已经全部读过了。

我有诺基亚-N8-00。它的音乐播放器支持USLT(UnSynchronised Lyrics / Text)。我使用一个名为spotdlhttps://github.com/Ritiek/Spotify-Downloader)的工具从“spotify”获取歌曲标题,并从其他来源(通常是youtube)下载它们并合并元数据。

问题是,该工具下载的音乐在除N8之外的所有设备上都有歌词。幸运的是,我得到的音乐也嵌入了手机支持的歌词。然后,我分析了两个文件,发现它们在二进制序列中有很小的差别(仅适用于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中实现它(我不需要语言特定的帮助)。

c encoding binary mp3 id3
1个回答
1
投票

这是我得到的:

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:
• $00 ISO-8859-1 [ISO-8859-1]
• $01 UTF-16 [UTF-16]
• $02 UTF-16BE [UTF-16]
• $03 UTF-8 [UTF-8]

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

编辑

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

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

支持UTF-8:enter image description here

UTF-16不受支持:enter image description here

这是否意味着您可以将'01'变成'03'并且它会神奇地起作用?我怀疑。这取决于司机。如果驱动程序看到'\ x00'字节并将其作为字符串的结尾(如USLT有效负载的末尾),则该怎么办?要对此进行测试,您可以尝试手动转换文件上的编码(通过删除额外的字节)。

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

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

也许这是一个问题?

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

supported.mp3:

enter image description here

unsupported.mp3:

enter image description here

在linux上,如果需要,还有其他工具可以为您提供额外信息:

mp3info, id3info, id3tool, exiftool, eyeD3, lltag

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

© www.soinside.com 2019 - 2024. All rights reserved.