LRC Lyrics stop being read past 1 hour #6596

Closed
opened 2025-12-22 04:32:10 +01:00 by backuprepo · 3 comments
Owner

Originally created by @mihawk90 on GitHub (Dec 21, 2024).

This issue respects the following points:

  • This is a bug, not a question or a configuration issue; Please visit our forum or chat rooms first to troubleshoot with volunteers, before creating a report. The links can be found here.
  • This issue is not already reported on GitHub (I've searched it).
  • I'm using an up to date version of Jellyfin Server stable, unstable or master; We generally do not support previous older versions. If possible, please update to the latest version before opening an issue.
  • I agree to follow Jellyfin's Code of Conduct.
  • This report addresses only a single issue; If you encounter multiple issues, kindly create separate reports for each one.

Description of the bug

I mentioned this previously in #11518, however this issue was closed when #12543 because it (probably) did fix the original issue. Also, the situation has changed slightly so I'm making a separate report.

I recently re-scanned some files that still had old cached lyrics data, and I noticed that now instead of the lyrics being recognised as unsynced, they are indeed recognised as synced, but cut off at the 1 hour mark.
As mentioned in the linked comment this was previously broken already, but it cut off when the minutes got into 3-digits, now however it cuts off at any timestamp after 1 hour.

I'm not sure if this is an issue with the LrcParser library or with JF itself. However, I have reason to believe this is an issue with JF's import, see Additional Information section below.

Reproduction steps

  1. Import some file with embedded lyrics going past 60 minutes
  2. check the imported lyrics either via "View Lyrics" or "Edit Lyrics" submenu
  3. check the last timestamp/line

What is the current bug behavior?

The lyrics cut off at the 1 hour mark, i.e. the last line before 1 hour is still shown, the first line after 1 hour is not.

What is the expected correct behavior?

Lyrics should be shown in their entirety.

Jellyfin Server version

10.10.0+

Specify commit id

No response

Specify unstable release number

No response

Specify version number

No response

Specify the build version

10.10.3

Environment

- OS: TrueNAS scale
- Linux Kernel: 6.6.32-production+truenas
- Virtualization: - (Docker/Kubernetes)
- Clients: WebUI, JMP
- Browser: Vivaldi
- FFmpeg Version: ffmpeg-jellyfin (official container)
- Playback Method: -
- Hardware Acceleration: -
- GPU Model: -
- Plugins: -
- Reverse Proxy: -
- Base URL: -
- Networking: -
- Storage: ZFS on HDD

Jellyfin logs

[2024-12-21 05:57:27.936 +01:00] [INF] [53] Emby.Server.Implementations.HttpServer.WebSocketManager: WS "192.168.0.10" closed
[2024-12-21 06:00:05.773 +01:00] [INF] [72] Emby.Server.Implementations.HttpServer.WebSocketManager: WS "192.168.0.10" request
[2024-12-21 06:00:12.694 +01:00] [INF] [63] Emby.Server.Implementations.HttpServer.WebSocketManager: WS "192.168.0.10" request
[2024-12-21 06:00:40.380 +01:00] [INF] [51] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Starting "/usr/lib/jellyfin-ffmpeg/ffprobe" with args "-analyzeduration 200M -probesize 1G -i file:\"/mnt/media/music/Podcasts/A State of Trance/ASOT/A State Of Trance Episode 846 (#ASOT846) [ASOT Year Mix 2017]-lE_9u7sTiyw.ogg\" -threads 0 -v warning -print_format json -show_streams -show_format"
[2024-12-21 06:00:40.709 +01:00] [INF] [63] MediaBrowser.Providers.Lyric.LyricManager: Saving lyrics to "/config/metadata/library/6c/6cf338ee5173ff8d91b1816623c4037e/A State Of Trance Episode 846 (#ASOT846) [ASOT Year Mix 2017]-lE_9u7sTiyw.lrc"
[2024-12-21 06:00:45.317 +01:00] [INF] [63] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Starting "/usr/lib/jellyfin-ffmpeg/ffprobe" with args "-analyzeduration 200M -probesize 1G -i file:\"/mnt/media/music/Podcasts/A State of Trance/ASOT/A State Of Trance Episode 846 (#ASOT846) [ASOT Year Mix 2017]-lE_9u7sTiyw.ogg\" -threads 0 -v warning -print_format json -show_streams -show_format"
[2024-12-21 06:00:50.590 +01:00] [INF] [72] Jellyfin.Plugin.KodiSyncQueue.EntryPoints.LibrarySyncNotification: Started library sync
[2024-12-21 06:00:50.918 +01:00] [INF] [72] Jellyfin.Plugin.KodiSyncQueue.EntryPoints.LibrarySyncNotification: Library Sync: Updated 1 items
[2024-12-21 06:00:50.918 +01:00] [INF] [72] Jellyfin.Plugin.KodiSyncQueue.EntryPoints.LibrarySyncNotification: Finished library sync, taking "00:00:00.3285531"

FFmpeg logs


Client / Browser logs

No response

Relevant screenshots or videos

"Edit Lyrics" menu:
Image

Additional information

ffprobe of the sample file:

$ ffprobe *846*.ogg
[...]
Input #0, ogg, from 'A State Of Trance Episode 846 (#ASOT846) [ASOT Year Mix 2017]-lE_9u7sTiyw.ogg':
  Duration: 01:58:45.53, start: 0.007500, bitrate: 128 kb/s
[...]
      LYRICS          : [00:00.00] A State Of Trance - Intro 
                      : [00:48.00] Armin van Buuren - Introduction at Year Mix 2017 
[...]
                      : [57:43.00] Kyau & Albert - Trace
                      : [58:28.00] Assaf Feat. Nathan Nicholson - Lost Souls (Radion6 Remix) 
                      : [59:40.00] Robert Nickson - Heliopause 
                      : [60:25.00] Alexander Popov - Awake The Flow 
                      : [61:29.00] Kyau & Albert - Mein Herz (Davey Asprey Remix) 
[...]
                      : [118:17.00] A State Of Trance - Outro 
[...]

I also checked the LRC file generated by JF in the metadata directory. I noticed it's rewriting the timestamps, but it seems the format being written is not actually recognised:

% pwd && find . -name "*846*lrc" && cat "$(find . -name "*846*lrc")"
/config/metadata
./library/6c/6cf338ee5173ff8d91b1816623c4037e/A State Of Trance Episode 846 (#ASOT846) [ASOT Year Mix 2017]-lE_9u7sTiyw.lrc

[00:00.0]A State Of Trance - Intro
[00:48.0]Armin van Buuren - Introduction at Year Mix 2017
[...]
[57:43.0]Kyau & Albert - Trace
[58:28.0]Assaf Feat. Nathan Nicholson - Lost Souls (Radion6 Remix)
[59:40.0]Robert Nickson - Heliopause
[01:00:25.0]Alexander Popov - Awake The Flow
[01:01:29.0]Kyau & Albert - Mein Herz (Davey Asprey Remix)
[...]
[01:58:17.0]A State Of Trance - Outro

Note the difference in timestamps from mm:ss.fff to h:mm:ss.f.

I wouldn't think the library would rewrite the timestamps, but then again I don't really have any reason to think why it wouldn't.

Originally created by @mihawk90 on GitHub (Dec 21, 2024). ### This issue respects the following points: - [x] This is a **bug**, not a question or a configuration issue; Please visit our forum or chat rooms first to troubleshoot with volunteers, before creating a report. The links can be found [here](https://jellyfin.org/contact/). - [x] This issue is **not** already reported on [GitHub](https://github.com/jellyfin/jellyfin/issues?q=is%3Aopen+is%3Aissue) _(I've searched it)_. - [x] I'm using an up to date version of Jellyfin Server stable, unstable or master; We generally do not support previous older versions. If possible, please update to the latest version before opening an issue. - [x] I agree to follow Jellyfin's [Code of Conduct](https://jellyfin.org/docs/general/community-standards.html#code-of-conduct). - [x] This report addresses only a single issue; If you encounter multiple issues, kindly create separate reports for each one. ### Description of the bug I mentioned this previously in [#11518](https://github.com/jellyfin/jellyfin/issues/11518#issuecomment-2181946604), however this issue was closed when #12543 because it (probably) did fix the original issue. Also, the situation has changed slightly so I'm making a separate report. I recently re-scanned some files that still had old cached lyrics data, and I noticed that now instead of the lyrics being recognised as unsynced, they are indeed recognised as synced, but cut off at the 1 hour mark. As mentioned in the linked comment this was previously broken already, but it cut off when the minutes got into 3-digits, now however it cuts off at any timestamp after 1 hour. I'm not sure if this is an issue with the LrcParser library or with JF itself. However, I have reason to believe this is an issue with JF's import, see Additional Information section below. ### Reproduction steps 1. Import some file with embedded lyrics going past 60 minutes 2. check the imported lyrics either via "View Lyrics" or "Edit Lyrics" submenu 3. check the last timestamp/line ### What is the current _bug_ behavior? The lyrics cut off at the 1 hour mark, i.e. the last line before 1 hour is still shown, the first line after 1 hour is not. ### What is the expected _correct_ behavior? Lyrics should be shown in their entirety. ### Jellyfin Server version 10.10.0+ ### Specify commit id _No response_ ### Specify unstable release number _No response_ ### Specify version number _No response_ ### Specify the build version 10.10.3 ### Environment ```markdown - OS: TrueNAS scale - Linux Kernel: 6.6.32-production+truenas - Virtualization: - (Docker/Kubernetes) - Clients: WebUI, JMP - Browser: Vivaldi - FFmpeg Version: ffmpeg-jellyfin (official container) - Playback Method: - - Hardware Acceleration: - - GPU Model: - - Plugins: - - Reverse Proxy: - - Base URL: - - Networking: - - Storage: ZFS on HDD ``` ### Jellyfin logs ```shell [2024-12-21 05:57:27.936 +01:00] [INF] [53] Emby.Server.Implementations.HttpServer.WebSocketManager: WS "192.168.0.10" closed [2024-12-21 06:00:05.773 +01:00] [INF] [72] Emby.Server.Implementations.HttpServer.WebSocketManager: WS "192.168.0.10" request [2024-12-21 06:00:12.694 +01:00] [INF] [63] Emby.Server.Implementations.HttpServer.WebSocketManager: WS "192.168.0.10" request [2024-12-21 06:00:40.380 +01:00] [INF] [51] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Starting "/usr/lib/jellyfin-ffmpeg/ffprobe" with args "-analyzeduration 200M -probesize 1G -i file:\"/mnt/media/music/Podcasts/A State of Trance/ASOT/A State Of Trance Episode 846 (#ASOT846) [ASOT Year Mix 2017]-lE_9u7sTiyw.ogg\" -threads 0 -v warning -print_format json -show_streams -show_format" [2024-12-21 06:00:40.709 +01:00] [INF] [63] MediaBrowser.Providers.Lyric.LyricManager: Saving lyrics to "/config/metadata/library/6c/6cf338ee5173ff8d91b1816623c4037e/A State Of Trance Episode 846 (#ASOT846) [ASOT Year Mix 2017]-lE_9u7sTiyw.lrc" [2024-12-21 06:00:45.317 +01:00] [INF] [63] MediaBrowser.MediaEncoding.Encoder.MediaEncoder: Starting "/usr/lib/jellyfin-ffmpeg/ffprobe" with args "-analyzeduration 200M -probesize 1G -i file:\"/mnt/media/music/Podcasts/A State of Trance/ASOT/A State Of Trance Episode 846 (#ASOT846) [ASOT Year Mix 2017]-lE_9u7sTiyw.ogg\" -threads 0 -v warning -print_format json -show_streams -show_format" [2024-12-21 06:00:50.590 +01:00] [INF] [72] Jellyfin.Plugin.KodiSyncQueue.EntryPoints.LibrarySyncNotification: Started library sync [2024-12-21 06:00:50.918 +01:00] [INF] [72] Jellyfin.Plugin.KodiSyncQueue.EntryPoints.LibrarySyncNotification: Library Sync: Updated 1 items [2024-12-21 06:00:50.918 +01:00] [INF] [72] Jellyfin.Plugin.KodiSyncQueue.EntryPoints.LibrarySyncNotification: Finished library sync, taking "00:00:00.3285531" ``` ### FFmpeg logs ```shell ``` ### Client / Browser logs _No response_ ### Relevant screenshots or videos "Edit Lyrics" menu: ![Image](https://github.com/user-attachments/assets/c4190760-090d-473d-80f6-6fdc51c97c7d) ### Additional information `ffprobe` of the sample file: ``` $ ffprobe *846*.ogg [...] Input #0, ogg, from 'A State Of Trance Episode 846 (#ASOT846) [ASOT Year Mix 2017]-lE_9u7sTiyw.ogg': Duration: 01:58:45.53, start: 0.007500, bitrate: 128 kb/s [...] LYRICS : [00:00.00] A State Of Trance - Intro : [00:48.00] Armin van Buuren - Introduction at Year Mix 2017 [...] : [57:43.00] Kyau & Albert - Trace : [58:28.00] Assaf Feat. Nathan Nicholson - Lost Souls (Radion6 Remix) : [59:40.00] Robert Nickson - Heliopause : [60:25.00] Alexander Popov - Awake The Flow : [61:29.00] Kyau & Albert - Mein Herz (Davey Asprey Remix) [...] : [118:17.00] A State Of Trance - Outro [...] ``` I also checked the LRC file generated by JF in the metadata directory. I noticed it's rewriting the timestamps, but it seems the format being written is not actually recognised: ``` % pwd && find . -name "*846*lrc" && cat "$(find . -name "*846*lrc")" /config/metadata ./library/6c/6cf338ee5173ff8d91b1816623c4037e/A State Of Trance Episode 846 (#ASOT846) [ASOT Year Mix 2017]-lE_9u7sTiyw.lrc [00:00.0]A State Of Trance - Intro [00:48.0]Armin van Buuren - Introduction at Year Mix 2017 [...] [57:43.0]Kyau & Albert - Trace [58:28.0]Assaf Feat. Nathan Nicholson - Lost Souls (Radion6 Remix) [59:40.0]Robert Nickson - Heliopause [01:00:25.0]Alexander Popov - Awake The Flow [01:01:29.0]Kyau & Albert - Mein Herz (Davey Asprey Remix) [...] [01:58:17.0]A State Of Trance - Outro ``` Note the difference in timestamps from `mm:ss.fff` to `h:mm:ss.f`. I wouldn't think the library would rewrite the timestamps, but then again I don't really have any reason to think why it wouldn't.
backuprepo 2025-12-22 04:32:10 +01:00
  • closed this issue
  • added the
    bug
    label
Author
Owner

@gnattu commented on GitHub (Dec 21, 2024):

Our music tag parsing library is formatting timestamp in DDdHH:MM:SS format but the LrcParser we are using is matching the pattern with only minutes and seconds which caused this.

There’s no "absolutely correct" behavior in this case because the LRC format wasn’t well-defined. Its original format only supports [mm:ss.xx] timestamps, which doesn’t consider long songs as a potential use case and how to handle such songs now becomes implementation-specific. It looks like popular implementations choose to extend minutes part beyond double digits when necessary.

@gnattu commented on GitHub (Dec 21, 2024): Our music tag parsing library is formatting timestamp in DDdHH:MM:SS format but the LrcParser we are using is matching the pattern with only minutes and seconds which caused this. There’s no "absolutely correct" behavior in this case because the LRC format wasn’t well-defined. Its original format only supports [mm:ss.xx] timestamps, which doesn’t consider long songs as a potential use case and how to handle such songs now becomes implementation-specific. It looks like popular implementations choose to extend minutes part beyond double digits when necessary.
Author
Owner

@mihawk90 commented on GitHub (Dec 21, 2024):

So it is a dependency issue, alright.

Guess that must have changed recently though given that it used to work up to 99 😅

And yes I agree it's not a typical usecase. These are live sets and I'm using the lyrics tag as a tracklist. Of course that's not what they were designed for and I get that, but a CUE sheet would fill the library with tons of short duration tracks, so this felt more reasonable.

@mihawk90 commented on GitHub (Dec 21, 2024): So it is a dependency issue, alright. Guess that must have changed recently though given that it used to work up to 99 😅 And yes I agree it's not a typical usecase. These are live sets and I'm using the lyrics tag as a tracklist. Of course that's not what they were designed for and I get that, but a CUE sheet would fill the library with tons of short duration tracks, so this felt more reasonable.
Author
Owner

@mihawk90 commented on GitHub (Jan 24, 2025):

Fixed in 10.10.4 (tested and confirmed on the same file)

@mihawk90 commented on GitHub (Jan 24, 2025): Fixed in [10.10.4](https://github.com/jellyfin/jellyfin/releases/tag/v10.10.4#:~:text=Backport%20ATL%20update%206.11%20to%2010.10%20%5BPR%20%2313280%5D%2C%20by%20%40gnattu) (tested and confirmed on the same file)
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: starred/jellyfin#6596
No description provided.