如何检查或更改 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 文件以供进一步检查。这是我的新发现:
首先,我们对编码的判断是正确的:
这是否意味着您只需将“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版本不同等原因给出不同的答案。
这不是重复的。我都读过了。
我有一部诺基亚-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 文件以供进一步检查。这是我的新发现:
首先,我们对编码的判断是正确的:
这是否意味着您只需将“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版本不同等原因给出不同的答案。