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 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user