From 62544b10bf7388eef400693c7972cdb9df19df0f Mon Sep 17 00:00:00 2001 From: Guido van Dijk Date: Tue, 22 Sep 2026 22:13:09 +0200 Subject: [PATCH] feat(video): beeldvullende modus en eigen bronlabel voor presentatiedia's Met '# vullend: ja' vult een beeld het hele frame, zonder kader, label en voettekst. Dat is nodig voor hele dia's uit een presentatie, die zelf al een kop en een bronregel hebben. Met '# bronlabel: ...' past de slotkaart bij iets anders dan een handleiding. Co-Authored-By: Claude Opus 5 --- _gereedschap/maak_video.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/_gereedschap/maak_video.py b/_gereedschap/maak_video.py index 1281149..91622ff 100644 --- a/_gereedschap/maak_video.py +++ b/_gereedschap/maak_video.py @@ -19,6 +19,7 @@ Opbouw van het script (regels die met [ beginnen zijn koppen, de rest is de gesp # uitvoer: naam-zonder-extensie # reeks: Reeks Copilot-agents voor school (kopregel op de titelkaart en in de voettekst) # bron: git.lexconsultancy.nl/guido/copilot-handleidingen (op de slotkaart) + # vullend: ja beelden vullen het hele frame (hele dia's uit een presentatie) [titel] de titelkaart [beeld: bestand.jpg] een schermafbeelding uit beelden/, met een label [beeld: bestand.jpg | label] @@ -45,6 +46,8 @@ LOGO_LAI = HERE / "logo-ai-netwerk-limburg.png" LOGO_LEX = HERE / "logo-lex.png" BRON = "git.lexconsultancy.nl/guido/copilot-handleidingen" REEKS = "Reeks Copilot-agents voor school" +VULLEND = False # bij "# vullend: ja" vullen de beelden het hele frame (presentatiedia's) +BRONLABEL = "Handleiding, instructies en beelden" # aan te passen met "# bronlabel: ..." def font(size, bold=False): @@ -98,7 +101,7 @@ def kaart_slot(titel, dest): for line in wrap(d, titel, font(80, True), 1300): d.text((128, y), line, font=font(80, True), fill=LIGHT); y += 96 y += 30 - for line in ["Handleiding, instructies en beelden: " + BRON, + for line in [BRONLABEL + ": " + BRON, "Alles mag gekopieerd en bewerkt worden onder CC BY-SA 4.0, met bronvermelding.", "Namen van producten zijn merken van hun eigenaren."]: d.text((128, y), line, font=font(32), fill="#D9DEE6"); y += 48 @@ -121,6 +124,13 @@ def kaart_tekst(kop, regels, dest): def kaart_beeld(pad, label, dest): + if VULLEND: # hele dia's uit een presentatie: beeldvullend, zonder kader en voettekst + shot = Image.open(pad).convert("RGB") + img = Image.new("RGB", (W, Hh), DARK) + k = min(W / shot.width, Hh / shot.height) + shot = shot.resize((round(shot.width * k), round(shot.height * k)), Image.LANCZOS) + img.paste(shot, ((W - shot.width) // 2, (Hh - shot.height) // 2)) + img.save(dest); return img = Image.new("RGB", (W, Hh), LIGHT2); d = ImageDraw.Draw(img) shot = Image.open(pad).convert("RGB") box_w, box_h = W - 2 * 96, Hh - 160 - 80 @@ -226,8 +236,10 @@ def main(): script = Path(sys.argv[1]).resolve() map_ = script.parent meta, segs = lees_script(script) - global BRON, REEKS + global BRON, REEKS, VULLEND, BRONLABEL BRON = meta.get("bron", BRON); REEKS = meta.get("reeks", REEKS) + VULLEND = meta.get("vullend", "nee").lower() in ("ja", "yes", "true") + BRONLABEL = meta.get("bronlabel", BRONLABEL) stem = meta.get("stem", "nl-NL-FennaNeural"); tempo = meta.get("tempo", "-5%") naam = meta.get("uitvoer", script.stem.replace("video-script", "video")) pauze = 0.8 # seconden stilte na elk segment