intro-outro-generator/sonoj19/__init__.py
2024-02-07 20:09:24 +01:00

150 lines
4.4 KiB
Python

#!/usr/bin/python3
from renderlib import *
from schedulelib import *
from easing import *
from math import sin, pi
scheduleUrl = 'https://babelmonkeys.de/~florob/sj19-schedule.xml'
def introFrames(p):
handle1_off = 120
handle2_off = 247
handle3_off = 80
# kurz stehen bleiben
frames = int(0.5 * fps)
for i in range(0, frames):
yield (
('handle1', 'attr', 'transform', "translate(0, {})".format(handle1_off)),
('handle2', 'attr', 'transform', "translate(0, {})".format(handle2_off)),
('handle3', 'attr', 'transform', "translate(0, {})".format(handle3_off)),
)
# handle 1 anheben
frames = 3 * fps
for i in range(0, frames):
y = (1.0 - i / frames) * handle1_off
yield (
('handle1', 'attr', 'transform', "translate(0, {})".format(y)),
('handle2', 'attr', 'transform', "translate(0, {})".format(handle2_off)),
('handle3', 'attr', 'transform', "translate(0, {})".format(handle3_off)),
)
# kurz stehen bleiben
frames = int(0.2 * fps)
for i in range(0, frames):
yield (
('handle2', 'attr', 'transform', "translate(0, {})".format(handle2_off)),
('handle3', 'attr', 'transform', "translate(0, {})".format(handle3_off)),
)
# handle 2 anheben
frames = 3 * fps
for i in range(0, frames):
y = (1.0 - i / frames) * handle2_off
yield (
('handle2', 'attr', 'transform', "translate(0, {})".format(y)),
('handle3', 'attr', 'transform', "translate(0, {})".format(handle3_off)),
)
# kurz stehen bleiben
frames = int(0.2 * fps)
for i in range(0, frames):
yield (
('handle3', 'attr', 'transform', "translate(0, {})".format(handle3_off)),
)
# handle 3 anheben
frames = 3 * fps
for i in range(0, frames):
y = (1.0 - i / frames) * handle3_off
yield (
('handle3', 'attr', 'transform', "translate(0, {})".format(y)),
)
# kurz stehen bleiben
frames = int(0.5 * fps)
for i in range(0, frames):
yield ()
def pauseFrames(p):
handle1_off = 110
handle2_off = 150
handle3_off = 110
frames = 10 * fps
for i in range(0, frames):
yield (
('handle1', 'attr', 'transform', "translate(0, {})".format(sin(2 * pi * i / frames) * handle1_off)),
('handle2', 'attr', 'transform', "translate(0, {})".format(sin(2 * pi * i / frames + 0.5 * pi) * handle2_off)),
('handle3', 'attr', 'transform', "translate(0, {})".format(sin(2 * pi * i / frames + 1.0 * pi) * handle3_off)),
)
def outroFrames(p):
# 5 Sekunde stehen lassen
frames = 5 * fps
for i in range(0, frames):
yield ()
def debug():
render(
'intro.svg',
'../18271.ts',
introFrames,
{
'$date': "October 27th, 2018",
'$title': "Welcome",
'$subtitle': 'What is Open Source?',
'$personnames': 'Nils Hilbricht'
}
)
render(
'outro.svg',
'../outro.ts',
outroFrames
)
def tasks(queue, args, idlist, skiplist):
# iterate over all events extracted from the schedule xml-export
for event in events(scheduleUrl):
if not (idlist == []):
if 000000 in idlist:
print("skipping id (%s [%s])" % (event['title'], event['id']))
continue
if int(event['id']) not in idlist:
print("skipping id (%s [%s])" % (event['title'], event['id']))
continue
# generate a task description and put them into the queue
queue.put(Rendertask(
infile='intro.svg',
outfile=str(event['id']) + ".ts",
sequence=introFrames,
parameters={
'$date': "October 4th, 2017",
'$id': event['id'],
'$title': event['title'],
'$subtitle': event['subtitle'] or '',
'$personnames': event['personnames']
}
))
if not "pause" in skiplist:
queue.put(Rendertask(
infile='pause.svg',
outfile='pause.ts',
sequence=pauseFrames
))
# place a task for the outro into the queue
if not "out" in skiplist:
queue.put(Rendertask(
infile='outro.svg',
outfile='outro.ts',
sequence=outroFrames
))