intro-outro-generator/osmodevcon2019/__init__.py
Kévin Redon faa6c5b036 add intro/outro for osmodevcon 2019
warning: the generated .ts (with the --debug option) are incorrect
because the not all animations have the same number of frames
while the rendered does not remove the frames generated from the
previous rendering before assembling all individual frames into a
.ts animation.
this bug will remain if the .frames cache folder is not cleared
before using ./make.py (also without --debug)
2019-04-26 16:56:20 +02:00

147 lines
4.2 KiB
Python

#!/usr/bin/python3
from renderlib import *
from easing import *
# URL to Schedule-XML
scheduleUrl = 'https://pretalx.sysmocom.de/osmodevcon2019/schedule/export/schedule.xml'
def introFrames(args):
#fade in title
frames = 3*fps
for i in range(0, frames):
yield(
('title', 'style', 'opacity', easeInQuad(i, 0, 1, frames)),
)
# fade in subtitle and names
frames = 1*fps
for i in range(0, frames):
yield(
('title', 'style', 'opacity', 1),
('subtitle', 'style', 'opacity', easeInQuad(i, 0, 1, frames)),
('personnames', 'style', 'opacity', easeInQuad(i, 0, 1, frames)),
)
#show whole image for 2 seconds
frames = 2*fps
for i in range(0, frames):
yield(
('title', 'style', 'opacity', 1),
('personnames', 'style', 'opacity', 1),
('subtitle', 'style', 'opacity', 1),
)
def backgroundFrames(parameters):
frames = 5*fps
for i in range(0, frames):
yield(
('logo', 'style', 'opacity', 1),
)
def outroFrames(args):
frames = 2*fps
for i in range(0, frames):
yield(
('logo', 'style', 'opacity', 1),
('sublogo', 'style', 'opacity', 1),
('cclogo', 'style', 'opacity', 1),
)
# fade out
frames = 3*fps
for i in range(0, frames):
yield(
('logo', 'style', 'opacity', "%.4f" % easeInCubic(i, 1, -1, frames)),
('sublogo', 'style', 'opacity', "%.4f" % easeInCubic(i, 1, -1, frames)),
('cclogo', 'style', 'opacity', "%.4f" % easeInCubic(i, 1, -1, frames)),
)
def pauseFrames(args):
#fade in pause
frames = 4*fps
for i in range(0, frames):
yield(
('pause', 'style', 'opacity', "%.4f" % easeInCubic(i, 0.2, 1, frames)),
)
# fade out
frames = 4*fps
for i in range(0, frames):
yield(
('pause', 'style', 'opacity', "%.4f" % easeInCubic(i, 1, -0.8, frames)),
)
def debug():
render('intro.svg',
'../intro.ts',
introFrames,
{
'$id': 7776,
'$title': 'Configuring + running GPRS/EDGE data services with OsmoPCU, OsmoSGSN and OpenGGSN',
'$subtitle': 'With some subtitle!',
'$personnames': 'Alexander Chemeris + Harald Welte'
}
)
render('outro.svg',
'../outro.ts',
outroFrames
)
render(
'background.svg',
'../background.ts',
backgroundFrames
)
render('pause.svg',
'../pause.ts',
pauseFrames
)
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 = {
'$id': event['id'],
'$title': event['title'],
'$subtitle': event['subtitle'],
'$personnames': event['personnames']
}
))
# 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
))
# place the pause-sequence into the queue
if not "pause" in skiplist:
queue.put(Rendertask(
infile = 'pause.svg',
outfile = 'pause.ts',
sequence = pauseFrames
))
# place the background-sequence into the queue
if not "bg" in skiplist:
queue.put(Rendertask(
infile = 'background.svg',
outfile = 'background.ts',
sequence = backgroundFrames
))