From fc9b79172a9784f851e13021b1db07639261f7da Mon Sep 17 00:00:00 2001 From: Christoph Stahl Date: Wed, 9 Oct 2024 16:16:48 +0200 Subject: [PATCH] play entries and static images --- syng/player_libmpv.py | 45 +++++++++++++++++++++++++------ syng/static/background.png | Bin 0 -> 22764 bytes syng/static/background20perc.png | Bin 0 -> 19645 bytes 3 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 syng/static/background.png create mode 100644 syng/static/background20perc.png diff --git a/syng/player_libmpv.py b/syng/player_libmpv.py index 93445da..bc80080 100644 --- a/syng/player_libmpv.py +++ b/syng/player_libmpv.py @@ -1,8 +1,12 @@ +import tempfile from typing import Optional from qrcode.main import QRCode import mpv import os -import ctypes +from PIL.Image import Image + + +from .entry import Entry __dirname__ = os.path.dirname(__file__) @@ -12,11 +16,11 @@ class Player: if self.qr_overlay: self.mpv.remove_overlay(self.qr_overlay.overlay_id) - osd_width = self.mpv.osd_width - osd_height = self.mpv.osd_height + osd_width: int = self.mpv.osd_width + osd_height: int = self.mpv.osd_height - x_pos = osd_width - self.qr.width - 20 - y_pos = osd_height - self.qr.height - 20 + x_pos = osd_width - self.qr.width - 10 + y_pos = osd_height - self.qr.height - 10 print(osd_width, osd_height) print(x_pos, y_pos) @@ -31,27 +35,52 @@ class Player: self.mpv.audio_add(self.audio) def eof_handler(self, *args): - print("EOF", args) + if self.mpv.filename not in ["background.png", "background20perc.png"]: + self.callback() def __init__(self): self.mpv = mpv.MPV(ytdl=True, input_default_bindings=True, input_vo_keyboard=True, osc=True) self.mpv.keep_open = "yes" self.audio = None self.qr_overlay = None - qr = QRCode(box_size=10, border=2) + qr = QRCode(box_size=5, border=1) qr.add_data("https://syng.rocks/") qr.make() self.qr = qr.make_image().convert("RGBA") self.mpv.play( - f"{__dirname__}/static/syng.png", + f"{__dirname__}/static/background.png", ) + self.callback = lambda: None self.mpv.register_event_callback(self.event_handler) self.mpv.observe_property("eof-reached", self.eof_handler) self.mpv.observe_property("osd-width", self.osd_size_handler) self.mpv.observe_property("osd-height", self.osd_size_handler) + def play_entry(self, entry: Entry, video: str, audio: Optional[str] = None): + self.queue_next(entry) + self.play(video, audio) + + def queue_next(self, entry: Entry): + self.play_image(f"{__dirname__}/static/background20perc.png", 3) + subtitle: str = f"""1 +00:00:00,00 --> 00:05:00,00 +{entry.artist} - {entry.title} +{entry.performer}""" + with tempfile.NamedTemporaryFile(delete=False) as tmpfile: + print(tmpfile.name) + tmpfile.write(subtitle.encode()) + tmpfile.flush() + self.mpv.sub_pos = 50 + self.mpv.sub_add(tmpfile.name) + + def play_image(self, image: str, duration: int): + self.mpv.image_display_duration = duration + self.mpv.keep_open = "yes" + self.mpv.play(image) + self.mpv.pause = False + def play(self, video: str, audio: Optional[str] = None): self.audio = audio self.mpv.pause = True diff --git a/syng/static/background.png b/syng/static/background.png new file mode 100644 index 0000000000000000000000000000000000000000..92ef46252e31710c10061a3514cfa22743eae3b4 GIT binary patch literal 22764 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 XyRewEbR>jOfy(1RP#Cp#KO_G?q)Q|) literal 0 HcmV?d00001 diff --git a/syng/static/background20perc.png b/syng/static/background20perc.png new file mode 100644 index 0000000000000000000000000000000000000000..2f202104901ae0e13fd971bae01fd268db9c63d3 GIT binary patch literal 19645 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