mirror of https://github.com/devine-dl/devine.git
feat(dl): Try find SSAv4 fonts in System OS fonts folder
Currently only Windows is supported. Feel free to make a pull request to add Linux or mac OS support.
This commit is contained in:
parent
eeab8a4f39
commit
45ccc129ce
|
@ -50,7 +50,7 @@ from devine.core.titles import Movie, Song, Title_T
|
||||||
from devine.core.titles.episode import Episode
|
from devine.core.titles.episode import Episode
|
||||||
from devine.core.tracks import Audio, Subtitle, Tracks, Video
|
from devine.core.tracks import Audio, Subtitle, Tracks, Video
|
||||||
from devine.core.tracks.attachment import Attachment
|
from devine.core.tracks.attachment import Attachment
|
||||||
from devine.core.utilities import get_binary_path, is_close_match, time_elapsed_since
|
from devine.core.utilities import get_binary_path, get_system_fonts, is_close_match, time_elapsed_since
|
||||||
from devine.core.utils.click_types import LANGUAGE_RANGE, QUALITY_LIST, SEASON_RANGE, ContextData, MultipleChoice
|
from devine.core.utils.click_types import LANGUAGE_RANGE, QUALITY_LIST, SEASON_RANGE, ContextData, MultipleChoice
|
||||||
from devine.core.utils.collections import merge_dict
|
from devine.core.utils.collections import merge_dict
|
||||||
from devine.core.utils.subprocess import ffprobe
|
from devine.core.utils.subprocess import ffprobe
|
||||||
|
@ -607,13 +607,23 @@ class dl:
|
||||||
font_names.append(line.removesuffix("Style: ").split(",")[1])
|
font_names.append(line.removesuffix("Style: ").split(",")[1])
|
||||||
|
|
||||||
font_count = 0
|
font_count = 0
|
||||||
|
system_fonts = get_system_fonts()
|
||||||
for font_name in set(font_names):
|
for font_name in set(font_names):
|
||||||
family_dir = Path(config.directories.fonts, font_name)
|
family_dir = Path(config.directories.fonts, font_name)
|
||||||
|
fonts_from_system = [
|
||||||
|
file
|
||||||
|
for name, file in system_fonts.items()
|
||||||
|
if name.startswith(font_name)
|
||||||
|
]
|
||||||
if family_dir.exists():
|
if family_dir.exists():
|
||||||
fonts = family_dir.glob("*.*tf")
|
fonts = family_dir.glob("*.*tf")
|
||||||
for font in fonts:
|
for font in fonts:
|
||||||
title.tracks.add(Attachment(font, f"{font_name} ({font.stem})"))
|
title.tracks.add(Attachment(font, f"{font_name} ({font.stem})"))
|
||||||
font_count += 1
|
font_count += 1
|
||||||
|
elif fonts_from_system:
|
||||||
|
for font in fonts_from_system:
|
||||||
|
title.tracks.add(Attachment(font, f"{font_name} ({font.stem})"))
|
||||||
|
font_count += 1
|
||||||
else:
|
else:
|
||||||
self.log.warning(f"Subtitle uses font [text2]{font_name}[/] but it could not be found...")
|
self.log.warning(f"Subtitle uses font [text2]{font_name}[/] but it could not be found...")
|
||||||
|
|
||||||
|
|
|
@ -277,6 +277,27 @@ def get_extension(value: Union[str, Path, ParseResult]) -> Optional[str]:
|
||||||
return ext
|
return ext
|
||||||
|
|
||||||
|
|
||||||
|
def get_system_fonts() -> dict[str, Path]:
|
||||||
|
if sys.platform == "win32":
|
||||||
|
import winreg
|
||||||
|
with winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) as reg:
|
||||||
|
key = winreg.OpenKey(
|
||||||
|
reg,
|
||||||
|
r"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",
|
||||||
|
0,
|
||||||
|
winreg.KEY_READ
|
||||||
|
)
|
||||||
|
total_fonts = winreg.QueryInfoKey(key)[1]
|
||||||
|
return {
|
||||||
|
name.replace(" (TrueType)", ""): Path(r"C:\Windows\Fonts", filename)
|
||||||
|
for n in range(0, total_fonts)
|
||||||
|
for name, filename, _ in [winreg.EnumValue(key, n)]
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
# TODO: Get System Fonts for Linux and mac OS
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
class FPS(ast.NodeVisitor):
|
class FPS(ast.NodeVisitor):
|
||||||
def visit_BinOp(self, node: ast.BinOp) -> float:
|
def visit_BinOp(self, node: ast.BinOp) -> float:
|
||||||
if isinstance(node.op, ast.Div):
|
if isinstance(node.op, ast.Div):
|
||||||
|
|
Loading…
Reference in New Issue