feat: save ttml lyrics
Some checks failed
/ Build Windows (push) Has been cancelled

This commit is contained in:
世界观察日志
2025-11-28 12:51:14 +08:00
parent 4b97c40c9b
commit a4c5541485
5 changed files with 14 additions and 8 deletions

View File

@@ -1,5 +1,5 @@
# DO NOT EDIT IT # DO NOT EDIT IT
version = "0.0.7" version = "0.0.8"
[instance] [instance]
url = "127.0.0.1:8080" url = "127.0.0.1:8080"
@@ -91,6 +91,8 @@ playlistDirPathFormat = "downloads/playlists/{playlistName}"
playlistSongNameFormat = "{playlistSongIndex:02d}. {artist} - {title}" playlistSongNameFormat = "{playlistSongIndex:02d}. {artist} - {title}"
# Save lyrics as .lrc file # Save lyrics as .lrc file
saveLyrics = true saveLyrics = true
# lrc or ttml
lyricsFormat = "ttml"
saveCover = true saveCover = true
coverFormat = "jpg" coverFormat = "jpg"
coverSize = "5000x5000" coverSize = "5000x5000"

View File

@@ -5,7 +5,7 @@ from creart import exists_module
from creart.creator import AbstractCreator, CreateTargetInfo from creart.creator import AbstractCreator, CreateTargetInfo
from pydantic import BaseModel from pydantic import BaseModel
CONFIG_VERSION = "0.0.7" CONFIG_VERSION = "0.0.8"
class Instance(BaseModel): class Instance(BaseModel):
@@ -43,6 +43,7 @@ class Download(BaseModel):
playlistDirPathFormat: str = "downloads/playlists/{playlistName}" playlistDirPathFormat: str = "downloads/playlists/{playlistName}"
playlistSongNameFormat: str = "{playlistSongIndex:02d}. {artist} - {title}" playlistSongNameFormat: str = "{playlistSongIndex:02d}. {artist} - {title}"
saveLyrics: bool = True saveLyrics: bool = True
lyricsFormat: str = "lrc"
saveCover: bool = True saveCover: bool = True
coverFormat: str = "jpg" coverFormat: str = "jpg"
coverSize: str = "5000x5000" coverSize: str = "5000x5000"

View File

@@ -7,7 +7,7 @@ from pydantic import BaseModel
from src.api import WebAPI from src.api import WebAPI
from src.models import AlbumMeta from src.models import AlbumMeta
from src.models.song_data import Datum from src.models.song_data import Datum
from src.utils import ttml_convent_to_lrc, count_total_track_and_disc from src.utils import ttml_convent, count_total_track_and_disc
NOT_INCLUDED_FIELD = ["playlistIndex", "bit_depth", "sample_rate", "sample_rate_kHz", NOT_INCLUDED_FIELD = ["playlistIndex", "bit_depth", "sample_rate", "sample_rate_kHz",
"track_total", "disk_total", "cover_url"] "track_total", "disk_total", "cover_url"]
@@ -75,7 +75,7 @@ class SongMetadata(BaseModel):
if key in NOT_INCLUDED_FIELD: if key in NOT_INCLUDED_FIELD:
continue continue
if key == "lyrics": if key == "lyrics":
lrc = ttml_convent_to_lrc(value) lrc = ttml_convent(value)
tags.append(f"{key}={lrc}") tags.append(f"{key}={lrc}")
continue continue
if key.lower() in ('upc', 'isrc'): if key.lower() in ('upc', 'isrc'):
@@ -97,7 +97,7 @@ class SongMetadata(BaseModel):
if key in NOT_INCLUDED_FIELD: if key in NOT_INCLUDED_FIELD:
continue continue
if key == "lyrics": if key == "lyrics":
lrc = ttml_convent_to_lrc(value) lrc = ttml_convent(value)
tags.update({TAG_MAPPING[key]: lrc}) tags.update({TAG_MAPPING[key]: lrc})
continue continue
if key == "tracknum": if key == "tracknum":

View File

@@ -6,7 +6,7 @@ from creart import it
from src.config import Config from src.config import Config
from src.metadata import SongMetadata from src.metadata import SongMetadata
from src.models import PlaylistInfo from src.models import PlaylistInfo
from src.utils import ttml_convent_to_lrc, get_song_name_and_dir_path, get_suffix from src.utils import ttml_convent, get_song_name_and_dir_path, get_suffix
def save(song: bytes, codec: str, metadata: SongMetadata, playlist: PlaylistInfo = None): def save(song: bytes, codec: str, metadata: SongMetadata, playlist: PlaylistInfo = None):
@@ -21,7 +21,7 @@ def save(song: bytes, codec: str, metadata: SongMetadata, playlist: PlaylistInfo
with open(cover_path.absolute(), "wb") as f: with open(cover_path.absolute(), "wb") as f:
f.write(metadata.cover) f.write(metadata.cover)
if it(Config).download.saveLyrics and metadata.lyrics: if it(Config).download.saveLyrics and metadata.lyrics:
lrc = ttml_convent_to_lrc(metadata.lyrics) lrc = ttml_convent(metadata.lyrics)
if lrc: if lrc:
lrc_path = dir_path / Path(song_name + ".lrc") lrc_path = dir_path / Path(song_name + ".lrc")
lrc_path.write_text(lrc, encoding="utf-8") lrc_path.write_text(lrc, encoding="utf-8")

View File

@@ -87,7 +87,10 @@ def get_digit_from_string(text: str) -> int:
return int(''.join(filter(str.isdigit, text))) return int(''.join(filter(str.isdigit, text)))
def ttml_convent_to_lrc(ttml: str) -> str: def ttml_convent(ttml: str) -> str:
if it(Config).download.lyricsFormat == "ttml":
return ttml
b = BeautifulSoup(ttml, features="xml") b = BeautifulSoup(ttml, features="xml")
lrc_lines = [] lrc_lines = []