Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

是否可以提供译文歌词时间戳后移的功能? #171

Open
ArgentRaider opened this issue Mar 28, 2023 · 9 comments
Open

是否可以提供译文歌词时间戳后移的功能? #171

ArgentRaider opened this issue Mar 28, 2023 · 9 comments

Comments

@ArgentRaider
Copy link

在获取歌词译文时,译文时间戳与原文时间戳一致。不过这样导出的歌词文件在(部分?)音乐播放器的桌面歌词中效果不好

如下图,我使用foobar2000的ESLyrics插件显示桌面歌词,实际显示的双行歌词为第1句中文歌词+第2句日文原文歌词
Snipaste_2023-03-28_21-58-59
Snipaste_2023-03-28_22-00-04

这种情况下为了同时显示原文与译文歌词,则需要将译文歌词的时间戳改为下一句原文歌词的时间戳
Snipaste_2023-03-28_22-04-15
Snipaste_2023-03-28_22-04-42

(自己写的乐色代码实在没法发pull request,只好来issue问问了。又或者是否有播放器能正常显示前者情况的双行歌词?)

@daoxi
Copy link
Contributor

daoxi commented Apr 2, 2023

巧了,我也使用类似的方法来保证原文+译文的歌词能在任何播放器中都正常显示(注意译文歌词永远不会高亮,而是在显示原文歌词时顺带显示),但我的格式跟你稍有不同,我不但“将译文歌词的时间戳改为下一句原文歌词的时间戳”,在此之上还对这句译文歌词的时间戳减去最小时间单位,比如:

[00:01.50]第1句歌词原文
[00:02.49]第1句歌词译文
[00:02.50]第2句歌词原文
[00:03.49]第2句歌词译文
[00:03.50]第3句歌词原文
(第3句歌词译文的时间戳 = 第4句歌词原文的时间戳 - 最小时间单位)
......

之所以要“减去最小时间单位”,是因为理论上LRC格式并不支持时间戳完全相同的多行歌词(因为理论上每次仅高亮一行歌词,绝大多数播放器都是这样),故播放器在遇到这种情况时的处理方法也各不相同(比如有的可能仅显示Unicode编号最靠前的那一行),所以“减去最小时间单位”这步可以保证歌词绝对在自己想要的顺序被显示



顺便说下我是如何用Notepad++转换成以上所述格式的:

  1. 首先你要有一份原文歌词,一份译文歌词,并且保证这两份歌词的有效歌词部分(不包含如歌曲名,歌手名等信息的那些“非歌词”内容)能逐行对应(两者的时间戳有细微差别也没关系,因为我们可统一使用原文歌词的时间戳以规避此问题),并且原文歌词的最后一句歌词需是空白歌词
  2. 复制原文歌词的时间戳部分(不含歌词本身),并将这些时间戳减去最小时间单位(我用的是LyricEditor),之后将译文歌词粘贴到这些时间戳的下移一行后的位置
  3. (非必要)按时间戳进行排序(Notepad++的某排序功能可以实现),类似于变成app里的“合并”格式




不知道作者能否考虑在app中添加自动生成以上格式的功能?(算是个兼容性要好很多的“合并”歌词格式,在几乎任何播放器里(包含传统的竖向滚动模式和题主说的卡拉OK模式)都能正常显示)
实现该功能时可能遇到的歌词例外(exception):

  • 原文/译文歌词的时间戳有误差:使用已有的“译文匹配精度”解决
  • 原文歌词没有对应时间戳的译文歌词:使用已有的“译文缺省规则”解决
  • 最后一句歌词不是空白歌词(这会导致最后一句译文歌词没有可参照的时间戳):自动填充为[59:59.99]

@x1ntt
Copy link

x1ntt commented Apr 3, 2023

巧了,我也使用类似的方法来保证原文+译文的歌词能在任何播放器中都正常显示(注意译文歌词永远不会高亮,而是在显示原文歌词时顺带显示),但我的格式跟你稍有不同,我不但“将译文歌词的时间戳改为下一句原文歌词的时间戳”,在此之上还对这句译文歌词的时间戳减去最小时间单位,比如:

[00:01.50]第1句歌词原文 [00:02.49]第1句歌词译文 [00:02.50]第2句歌词原文 [00:03.49]第2句歌词译文 [00:03.50]第3句歌词原文 (第3句歌词译文的时间戳 = 第4句歌词原文的时间戳 - 最小时间单位) ......

之所以要“减去最小时间单位”,是因为理论上LRC格式并不支持时间戳完全相同的多行歌词(因为理论上每次仅高亮一行歌词,绝大多数播放器都是这样),故播放器在遇到这种情况时的处理方法也各不相同(比如有的可能仅显示Unicode编号最靠前的那一行),所以“减去最小时间单位”这步可以保证歌词绝对在自己想要的顺序被显示。 顺便说下我是如何用Notepad++转换成以上所述格式的:

  1. 首先你要有一份原文歌词,一份译文歌词,并且保证这两份歌词的有效歌词部分(不包含如歌曲名,歌手名等信息的那些“非歌词”内容)能逐行对应(两者的时间戳有细微差别也没关系,因为我们可统一使用原文歌词的时间戳以规避此问题),并且原文歌词的最后一句歌词需是空白歌词
  2. 复制原文歌词的时间戳部分(不含歌词本身),并将这些时间戳减去最小时间单位(我用的是LyricEditor),之后将译文歌词粘贴到这些时间戳的下移一行后的位置
  3. (非必要)按时间戳进行排序(Notepad++的某排序功能可以实现),类似于变成app里的“合并”格式

不知道作者能否考虑在app中添加自动生成以上格式的功能?(算是个兼容性要好很多的“合并”歌词格式,在几乎任何播放器里(包含传统的竖向滚动模式和题主说的卡拉OK模式)都能正常显示) 实现该功能时可能遇到的歌词例外(exception):

  • 原文/译文歌词的时间戳有误差:使用已有的“译文匹配精度”解决
  • 原文歌词没有对应时间戳的译文歌词:使用已有的“译文缺省规则”解决
  • 最后一句歌词不是空白歌词(这会导致最后一句译文歌词没有可参照的时间戳):自动填充为[59:59.99]

这确实是一个很棒的解决方案,可惜navidrome不支持多行(好气

如果只使用本地播放,那么手机和电脑的歌单似乎没有很好的办法同步吧

@daoxi
Copy link
Contributor

daoxi commented Apr 3, 2023

这确实是一个很棒的解决方案,可惜navidrome不支持多行(好气
如果只使用本地播放,那么手机和电脑的歌单似乎没有很好的办法同步吧

上面这个格式的最大好处是,哪怕播放器不支持同时显示多行歌词(其实大多数都不支持...),只要能在显示当前歌词的时候能看到下一行歌词是什么就行(常见的滚动歌词应该是可以的),如果navidrome是只能看到一行歌词的话那确实是没办法了

同步要手动弄这个确实是本地播放的痛点(对于更新音乐库不频繁的我影响不大),Plex(我没用过但之前见很多人推荐)应该类似于navidrome,就是不知道对同步歌词的支持如何

@x1ntt
Copy link

x1ntt commented Apr 4, 2023

这确实是一个很棒的解决方案,可惜navidrome不支持多行(好气
如果只使用本地播放,那么手机和电脑的歌单似乎没有很好的办法同步吧

上面这个格式的最大好处是,哪怕播放器不支持同时显示多行歌词(其实大多数都不支持...),只要能在显示当前歌词的时候能看到下一行歌词是什么就行(常见的滚动歌词应该是可以的),如果navidrome是只能看到一行歌词的话那确实是没办法了

同步要手动弄这个确实是本地播放的痛点(对于更新音乐库不频繁的我影响不大),Plex(我没用过但之前见很多人推荐)应该类似于navidrome,就是不知道对同步歌词的支持如何

了解了 我去看看 😊

@daoxi
Copy link
Contributor

daoxi commented Apr 7, 2023

了解了 我去看看 😊

根据Plex官网关于本地歌词的介绍,其支持外挂的.lrc同步歌词(“The following formats are supported for external/sidecar lyric files: LRC (.lrc) – timed lyric file using the LRC format”),但很遗憾的是目前不支持内嵌歌词("Note: Lyrics embedded in track metadata (such as ID3 tags) are not currently supported.")

@x1ntt
Copy link

x1ntt commented Apr 10, 2023

了解了 我去看看 😊

根据Plex官网关于本地歌词的介绍,其支持外挂的.lrc同步歌词(“The following formats are supported for external/sidecar lyric files: LRC (.lrc) – timed lyric file using the LRC format”),但很遗憾的是目前不支持内嵌歌词("Note: Lyrics embedded in track metadata (such as ID3 tags) are not currently supported.")
我已经部署了Emby,目前看来是没有问题的。只不过它的歌词功能需要开会员,或者自行选择开心版。看起来还是比较好用的。
image
之后打算给我的工具加上你上面描述的功能,以便让Emby支持多语歌词~

@daoxi
Copy link
Contributor

daoxi commented Apr 10, 2023

我已经部署了Emby,目前看来是没有问题的。只不过它的歌词功能需要开会员,或者自行选择开心版。看起来还是比较好用的。
image
之后打算给我的工具加上你上面描述的功能,以便让Emby支持多语歌词~

所以你是说Emby也没法同时显示双行时间戳相同的歌词,对吗?那样的话,2楼提到的格式应该确实能解决此问题。

顺带问一下,你用的Emby支持的是内嵌歌词AND/OR外挂歌词?如果支持内嵌歌词的话,用之前跟你说的方法内嵌歌词后的MP3文件能在Emby中正常滚动同步歌词吗?

@x1ntt
Copy link

x1ntt commented Apr 11, 2023

我已经部署了Emby,目前看来是没有问题的。只不过它的歌词功能需要开会员,或者自行选择开心版。看起来还是比较好用的。
image
之后打算给我的工具加上你上面描述的功能,以便让Emby支持多语歌词~

所以你是说Emby也没法同时显示双行时间戳相同的歌词,对吗?那样的话,2楼提到的格式应该确实能解决此问题。

顺带问一下,你用的Emby支持的是内嵌歌词AND/OR外挂歌词?如果支持内嵌歌词的话,用之前跟你说的方法内嵌歌词后的MP3文件能在Emby中正常滚动同步歌词吗?

按照上面的思路是可以的,效果如下
image
这是按照你的思路合并的歌词
image
很赞~

上面说的是flac,实测mp3也是可以的,对Emby来说效果是一样的 (写入的是USLT标签)
image

@Sedimcpu
Copy link

Sedimcpu commented Jul 1, 2023

LyricsAdjustmentAssistant.zip
写了一个可以适应部分音乐软件多行歌词显示的歌词格式调整工具(作为这个软件的临时补充,以这个软件生成的文件为源文件)
image
image
image
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants