jitwxs / 163MusicLyrics

Windows 云音乐歌词获取【网易云、QQ音乐】
Apache License 2.0
1.91k stars 101 forks source link

QQ音乐逐字歌词每行都缺失末尾时间戳 #155

Closed MC-dusk closed 1 year ago

MC-dusk commented 1 year ago

BUG 描述 Describe the bug

QQ音乐逐字歌词每行都缺失末尾时间戳

https://y.qq.com/n/ryqq/songDetail/002PaXLM1wSj31

当前获取的歌词:

[00:11.09]光[00:11.50]が[00:11.54]走[00:11.77]っ[00:11.88]た

正确形式的歌词:

[00:11.09]光[00:11.50]が[00:11.54]走[00:11.77]っ[00:11.88]た[00:xx.xx]

版本 Version

5.8

MC-dusk commented 1 year ago

P.S.:v5.5更新出的问题,对应修复的#140 ,还是我提的issue。没及时debug,我有罪

jitwxs commented 1 year ago

这个应该不是 BUG,这一行最后这个 [00:xx.xx] 表示的是这一行的结束,没有实际含义吧

MC-dusk commented 1 year ago

省流:一行的结束不一定是下一行的开始,不然最后一个字可能会拖的很长。


举个例子,下面是另一首歌的qrc内容:

[159553,3750]Oh (159553,1217)星(160770,337)屑(161107,612)も(161719,865)な(162584,237)い(162821,482)

这种qrc格式,时间戳前半是起始时间(毫秒),后半是持续时间,不仅开头有一行的时间戳,可以看到每个字的时间戳也有起点长度,这样在显示时,能够自由确定任何一个字何时开始和结束。

但这种格式不通用,且信息冗余。

转换后:

[02:39.55]Oh [02:40.77]星[02:41.10]屑[02:41.71]も[02:42.58]な[02:42.82]い[02:43.30]

这种逐字lrc格式,用文本换行确定一行的显示,但每行没有这一行的时间戳,只有每个字的时间戳。所以每个字是平等的。默认一行的每个字时间前后相连,但最后需要加一个时间戳来断后。有点像植树问题(

从歌词来说,每句话不一定是前后相连的。比如一句话结束后,有一段间奏,这句话的结束就不是连在下一句开始,而传统lrc只能前后相连,所以必要时会用空行做隔断。


另外还有一种逐字歌词格式

[mm:ss.xx] <mm:ss.xx> line 1 word 1 <mm:ss.xx> line 1 word 2 <mm:ss.xx> ... line 1 last word <mm:ss.xx>
[mm:ss.xx] <mm:ss.xx> line 2 word 1 <mm:ss.xx> line 2 word 2 <mm:ss.xx> ... line 2 last word <mm:ss.xx>

这种在最前面单独有个行时间戳,以兼容普通lrc歌词。

jitwxs commented 1 year ago

学习了,下个版本加上

warm-ice0x00 commented 1 year ago

写了一个把下载的逐字歌词转换为兼容性更好的增强 LRC 格式的脚本

示例

转换前:

[01:35.69]こ[01:36.07]の[01:36.48]両[01:37.31]手[01:37.70]か[01:38.24]ら[01:39.10]零[01:39.98]れ[01:40.73]そ[01:40.94]う[01:41.24]な[01:41.46]ほ[01:41.88]ど[01:42.29]
[01:42.27]几乎要自两手中洒出的
[01:42.64]君[01:42.94]に[01:43.21]貰[01:44.01]っ[01:44.21]た[01:44.82]愛[01:45.69]は[01:46.55]ど[01:47.10]こ[01:47.54]に[01:47.88]捨[01:48.30]て[01:48.75]よ[01:48.97]う[01:49.41]?[01:49.59]
[01:49.57]你所给的爱要扔到哪好?

转换后:

[01:35.69]<01:35.69>こ<01:36.07>の<01:36.48>両<01:37.31>手<01:37.70>か<01:38.24>ら<01:39.10>零<01:39.98>れ<01:40.73>そ<01:40.94>う<01:41.24>な<01:41.46>ほ<01:41.88>ど<01:42.29>
[01:42.27]几乎要自两手中洒出的
[01:42.64]<01:42.64>君<01:42.94>に<01:43.21>貰<01:44.01>っ<01:44.21>た<01:44.82>愛<01:45.69>は<01:46.55>ど<01:47.10>こ<01:47.54>に<01:47.88>捨<01:48.30>て<01:48.75>よ<01:48.97>う<01:49.41>?<01:49.59>
[01:49.57]你所给的爱要扔到哪好?
tylearymf commented 1 year ago

我发现qq音乐返回的末尾字是有时间的,只是代码处理的时候漏掉了

jitwxs commented 1 year ago

since v5.9 fix this bug.