From f7f192b0369d09ade9adb74e5215768acbba1307 Mon Sep 17 00:00:00 2001 From: Alexander Brock Date: Mon, 28 Aug 2023 16:27:42 +0200 Subject: [PATCH 01/10] Add missing dependency. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2d5ef38..30b4322 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Yes! That's what I want! ------------------------ Okay, let's go. - - Install python3, python3-lxml, python3-cssutils (or use virtualenv, see below), inkscape and libav-tools + - Install python3, python3-lxml, python3-cssutils, python3-wand (or use virtualenv, see below), inkscape and libav-tools - Fork this repo on github and clone your personal fork to your local system. - Copy one of the existing setup: 00_example_render_byid - If you are using a newer version of intro-outro-generator, don't copy any of the other projects, as the __init.py__ may not contain all mandatory parameters in the tasks function. From 154efeb3a401a84e24058479021f1d4355f31354 Mon Sep 17 00:00:00 2001 From: Alexander Brock Date: Mon, 28 Aug 2023 16:28:06 +0200 Subject: [PATCH 02/10] Fix typo: Add missing 'd' --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 30b4322..aef7eeb 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Okay, let's go. - search for `def debug()` and comment the sections about outro (postroll) and pause - run `./make.py yourproject/ --debug` to generate your first intro - if it looks good, duplicate intro.svg to outro.svg (postroll) and pause.svg (pause-loop) and modify them according to your needs. You can use different IDs in your SVG if required - - modify outroFrames and pauseFrames like before an test them using `./make.py yourproject/ --debug` + - modify outroFrames and pauseFrames like before and test them using `./make.py yourproject/ --debug` - if everything look like you'd want them to, run `./make.py yourproject/`. - You can use any debianesque linux (can be headless) to generate the videos. More cores help more. - Run `./make-snapshots.sh yourproject/` to generate a png from a specific time-index of your .ts or .dv-files. You can run `./make-snapshots.sh yourproject/ 5` to get a png for the frame at the 5th second of all your clips. Default is 3 seconds. From fb49295aadcf421e133ba175a4e4f732ae152476 Mon Sep 17 00:00:00 2001 From: Alexander Brock Date: Wed, 30 Aug 2023 00:55:53 +0200 Subject: [PATCH 03/10] Fix typos --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index aef7eeb..7143770 100644 --- a/README.md +++ b/README.md @@ -109,7 +109,7 @@ The animation sequence is controlled by the three frame-generator routines vorsp ### CSS-Style-Modifications `('logo', 'style', 'opacity', 1),` - locate object with id `logo` in the svg, parse its `style`-attribute as css-inline-string and change the value of the css-property `opacity` to 1. The Tupel-Element `'style'` is fixed and declares the type of action which is applied to the specified element. All other tupel-mebers can be modified to suit your needs. -To form an fade-in-opacity-animation, the frame-generator could look like this: +To form a fade-in-opacity-animation, the frame-generator could look like this: # three seconds of animation frames = 3*fps @@ -150,7 +150,7 @@ FEM/VOC-Tracker-Integration *that script-Z-thingy* The [FEM](http://fem.tu-ilmenau.de/) and the [VOC](https://c3voc.de/) uses a special Ticket-Tracker to keep track of the Talks on an event. Various tasks are performed around the recorded Videomaterial (preparing, cutting, encoding, releasing) - synchronized by the Tracker. The files starting with `script-Z` are experiments to integrate the intro-rendering into this process. On some Events the Schedule is very fluid with talks being addes or names changing over the whole conference. Using the Scripts to render the prerols when they are actually needed (and not some days before the conference) would help to get the always-freshest prerolls but it would an additional (computational intense) task to the publishing process. -Generating an Live-Stream-Overlay +Generating a Live-Stream-Overlay --------------------------------- While your working on your Video-Artwork you can create another required asset: the stream overlay. When we'll live-stream your Talks we can't send prerolls ovet the live-stream. To let your viewer now what program they are watching at, we usually overlay a transparent image over the live-stream like most television programs do, too. Just create another SVG of the size 1920×1080 (or 1024×576 if you're only targeting the legacy SD-Pipeline) and throw your logo into your prefered corner. To have it looking good we would suggest From a6b1355ce78865cb73d4be199cf5de6123f8b921 Mon Sep 17 00:00:00 2001 From: alexander Date: Wed, 30 Aug 2023 11:46:03 +0200 Subject: [PATCH 04/10] Add git swap files to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b5f2439..693b7ba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.swp *.mp4 *.dv *.ts From d3db151e01ddcb06b24e4250b8802de3da2d008c Mon Sep 17 00:00:00 2001 From: Alexander Brock Date: Wed, 30 Aug 2023 11:48:03 +0200 Subject: [PATCH 05/10] First draft for MRMCD2023 animations --- mrmcd2023/__init__.py | 492 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 492 insertions(+) create mode 100644 mrmcd2023/__init__.py diff --git a/mrmcd2023/__init__.py b/mrmcd2023/__init__.py new file mode 100644 index 0000000..a5dbf0f --- /dev/null +++ b/mrmcd2023/__init__.py @@ -0,0 +1,492 @@ +#!/usr/bin/python3 + +from renderlib import * +from easing import * + +import math + +# URL to Schedule-XML +scheduleUrl = 'https://talks.mrmcd.net/2023/schedule.xml' + +speedfactor=1 +def introFrames(args): +#sleep .5s + frames = round(.5*fps*speedfactor) + for i in range(0, frames*2): + yield ( + ('houses', 'style', 'opacity', 0), + ('vr', 'style', 'opacity', 0), + ('person', 'style', 'opacity', 0), + ('personhit', 'style', 'opacity', 0), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#fade in houses and sleep one second + frames = round(1*fps*speedfactor) + for i in range(0, frames*2): + yield ( + ('houses', 'style', 'opacity', easeInQuad(i, 0, 1, frames)), + ('vr', 'style', 'opacity', 0), + ('person', 'style', 'opacity', 0), + ('personhit', 'style', 'opacity', 0), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#Move in person + frames = round(1*fps*speedfactor) + for i in range(0, frames): + t=i/frames + pos=420*(1-t) + print('i {}, t {}, pos {}'.format(i, t, pos)) + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 0), + ('person', 'style', 'opacity', 1), + ('person', 'attr', 'transform', 'translate(0.0, {})'.format(pos)), + ('personhit', 'style', 'opacity', 0), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) + +#wait 1s + for i in range(0, round(1*fps*speedfactor)): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 0), + ('person', 'style', 'opacity', 1), + ('personhit', 'style', 'opacity', 0), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#look around + for i in range(0, round(.5*fps*speedfactor)): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 0), + ('person', 'style', 'opacity', 1), + ('person', 'attr', 'transform', 'matrix(-1,0,0,1,1420.2663,0)'), + ('personhit', 'style', 'opacity', 0), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) + for i in range(0, round(.5*fps*speedfactor)): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 0), + ('person', 'style', 'opacity', 1), + ('personhit', 'style', 'opacity', 0), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#wait 1s + for i in range(0, round(1*fps*speedfactor)): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 0), + ('person', 'style', 'opacity', 1), + ('personhit', 'style', 'opacity', 0), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#bonk once + for i in range(0, math.ceil(.1*fps*speedfactor)): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 1), + ('person', 'style', 'opacity', 0), + ('personhit', 'style', 'opacity', 1), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#wait 1s + for i in range(0, 1*fps*speedfactor): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 0), + ('person', 'style', 'opacity', 1), + ('personhit', 'style', 'opacity', 0), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#bonk twice + for j in range(0,2): + for i in range(0, math.ceil(.1*fps*speedfactor)): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 1), + ('person', 'style', 'opacity', 0), + ('personhit', 'style', 'opacity', 1), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) + for i in range(0, round(.1*fps*speedfactor)): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 0), + ('vr-blurry', 'style', 'opacity', j), + ('person', 'style', 'opacity', 0), + ('personhit', 'style', 'opacity', 1), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) + for i in range(0, round(.2*fps*speedfactor)): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 0), + ('vr-blurry', 'style', 'opacity', j), + ('person', 'style', 'opacity', 1), + ('personhit', 'style', 'opacity', 0), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#wait 1s + for i in range(0, round(1*fps*speedfactor)): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 0), + ('vr-blurry', 'style', 'opacity', 1), + ('person', 'style', 'opacity', 1), + ('personhit', 'style', 'opacity', 0), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#bonk for speaker + for i in range(0, round(.1*fps*speedfactor)): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 0), + ('person', 'style', 'opacity', 0), + ('personhit', 'style', 'opacity', 1), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#wait 1s + for i in range(0, round(1*fps*speedfactor)): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 1), + ('person', 'style', 'opacity', 1), + ('personhit', 'style', 'opacity', 0), + ('motto', 'style', 'opacity', 0), + ('logotext', 'style', 'opacity', 0), + ('text', 'style', 'opacity', 0), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#fade in speaker + frames = round(1*fps*speedfactor) + for i in range(0, frames): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 1), + ('person', 'style', 'opacity', 1), + ('personhit', 'style', 'opacity',0), + ('motto', 'style', 'opacity', 0), + ('text', 'style', 'opacity', easeInQuad(i, 0, 1, frames)), + ('vr-darkening', 'style', 'opacity', easeInQuad(i, 0, .4, frames)), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#fade in wgdh + frames = round(1*fps*speedfactor) + for i in range(0, frames): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 1), + ('person', 'style', 'opacity', 1), + ('personhit', 'style', 'opacity',0), + ('motto', 'style', 'opacity', easeInQuad(i, 0, 1, frames)), + ('text', 'style', 'opacity', 1), + ('vr-darkening', 'style', 'opacity', .4), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) +#sleep 1 + frames = round(6*fps*speedfactor) + for i in range(0, frames): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 1), + ('person', 'style', 'opacity', 1), + ('personhit', 'style', 'opacity',0), + ('motto', 'style', 'opacity', 1), + ('text', 'style', 'opacity', 1), + ('vr-darkening', 'style', 'opacity', .4), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) + +def backgroundFrames(parameters): + # 40 Sekunden + + frames = 20*fps + for i in range(0, frames): + xshift = (i+1) * 300/frames + yshift = ((i+1) * (150/frames)) + yield( + ('pillgroup', 'attr', 'transform', 'translate(%.4f, %.4f)' % (xshift, yshift)), + ) + + frames = 20*fps + for i in range(0, frames): + xshift = 300 - ((i+1) * (300/frames)) + yshift = 150 - ((i+1) * (150/frames)) + yield( + ('pillgroup', 'attr', 'transform', 'translate(%.4f, %.4f)' % (xshift, yshift)), + ) + +def outroFrames(args): +#fadein outro graphics + frames = 3*fps + for i in range(0, frames): + yield( + ('pillgroup', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), + ('logotext', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), + ('c3voclogo', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), + ('c3voctext', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), + ('bysalogo', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), + ('bysatext', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), + ) + frames = 3*fps + for i in range(0, frames): + yield( + ('pillgroup', 'style', 'opacity', 1), + ('logotext', 'style', 'opacity', 1), + ('c3voclogo', 'style', 'opacity', 1), + ('c3voctext', 'style', 'opacity', 1), + ('bysalogo', 'style', 'opacity', 1), + ('bysatext', 'style', 'opacity', 1), + ) + +def pauseFrames(args): +#typing + for j in range(0,8): + typespeed = .2 + for i in range(0, round(typespeed*fps)): + yield( + ('person-default', 'style', 'opacity', 1), + ('person-key', 'style', 'opacity', 0), + ('person-frown', 'style', 'opacity', 0), + ('person-vr', 'style', 'opacity', 0), + ) + for i in range(0, round(typespeed*fps)): + yield( + ('person-default', 'style', 'opacity', 0), + ('person-key', 'style', 'opacity', 1), + ('person-frown', 'style', 'opacity', 0), + ('person-vr', 'style', 'opacity', 0), + ) +#sleep + for i in range(0, round(1*fps)): + yield( + ('person-default', 'style', 'opacity', 1), + ('person-key', 'style', 'opacity', 0), + ('person-frown', 'style', 'opacity', 0), + ('person-vr', 'style', 'opacity', 0), + ('graffiti', 'style', 'opacity', 0), + ) +#frown + for i in range(0, round(1*fps)): + yield( + ('person-default', 'style', 'opacity', 0), + ('person-key', 'style', 'opacity', 0), + ('person-frown', 'style', 'opacity', 1), + ('person-vr', 'style', 'opacity', 0), + ('graffiti', 'style', 'opacity', 0), + ) +#bonk headset + for j in range(0,3): + bonkspeed = .2 + for i in range(0, round(bonkspeed*fps)): + yield( + ('person-default', 'style', 'opacity', 0), + ('person-key', 'style', 'opacity', 0), + ('person-frown', 'style', 'opacity', 1), + ('person-vr', 'style', 'opacity', 0), + ('graffiti', 'style', 'opacity', 0), + ) + for i in range(0, round(bonkspeed*fps)): + yield( + ('person-default', 'style', 'opacity', 0), + ('person-key', 'style', 'opacity', 0), + ('person-frown', 'style', 'opacity', 0), + ('person-vr', 'style', 'opacity', 1), + ('graffiti', 'style', 'opacity', 0), + ) +#frown + for i in range(0, round(1*fps)): + yield( + ('person-default', 'style', 'opacity', 0), + ('person-key', 'style', 'opacity', 0), + ('person-frown', 'style', 'opacity', 1), + ('person-vr', 'style', 'opacity', 0), + ('graffiti', 'style', 'opacity', 1), + ) +#smile + for i in range(0, round(1*fps)): + yield( + ('person-default', 'style', 'opacity', 1), + ('person-key', 'style', 'opacity', 0), + ('person-frown', 'style', 'opacity', 0), + ('person-vr', 'style', 'opacity', 0), + ('graffiti', 'style', 'opacity', 1), + ) + + +def debug(): +# render('intro.svg', +# '../intro.ts', +# introFrames, +# { +# '$id': 7776, +# '$title': 'StageWar live!', +# '$subtitle': 'Metal Konzert', +# '$persons': 'www.stagewar.de' +# } +# ) + +# 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 event['room'] not in ('Chirurgie (Saal 1.04)', 'Kreißsaal (Saal 1.11)'): + print("skipping room %s (%s [%s])" % (event['room'], event['title'], event['id'])) + continue + 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'], + '$persons': 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 + )) From 4037c5af0dcc68ff1350153f7094edf53428d0c8 Mon Sep 17 00:00:00 2001 From: Alexander Brock Date: Wed, 30 Aug 2023 12:07:18 +0200 Subject: [PATCH 06/10] Add readme for MRMCD2023 with font info --- mrmcd2023/README | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 mrmcd2023/README diff --git a/mrmcd2023/README b/mrmcd2023/README new file mode 100644 index 0000000..b6f3655 --- /dev/null +++ b/mrmcd2023/README @@ -0,0 +1,4 @@ +Font: +https://blankidsfonts.com/product/gemstone/ + + From b25f59cdb9434cf5be04bb46981ccf2d19d260bf Mon Sep 17 00:00:00 2001 From: Alexander Brock Date: Wed, 30 Aug 2023 12:44:10 +0200 Subject: [PATCH 07/10] Add intro.svg and pause.svg for MRMCD2023 --- mrmcd2023/artwork/intro.svg | 6432 +++++++++++++++++++++++++++++++++++ mrmcd2023/artwork/pause.svg | 1008 ++++++ 2 files changed, 7440 insertions(+) create mode 100644 mrmcd2023/artwork/intro.svg create mode 100644 mrmcd2023/artwork/pause.svg diff --git a/mrmcd2023/artwork/intro.svg b/mrmcd2023/artwork/intro.svg new file mode 100644 index 0000000..b315311 --- /dev/null +++ b/mrmcd2023/artwork/intro.svg @@ -0,0 +1,6432 @@ + + $title $subtitle $persons diff --git a/mrmcd2023/artwork/pause.svg b/mrmcd2023/artwork/pause.svg new file mode 100644 index 0000000..f8f1f9c --- /dev/null +++ b/mrmcd2023/artwork/pause.svg @@ -0,0 +1,1008 @@ + + From 274bdbd21b524cf8062c88d1afd3885a1cab58ab Mon Sep 17 00:00:00 2001 From: Alexander Brock Date: Wed, 30 Aug 2023 17:15:45 +0200 Subject: [PATCH 08/10] Add debugging code for MRMCD2023 to see how long titles are handled. --- mrmcd2023/__init__.py | 62 ++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/mrmcd2023/__init__.py b/mrmcd2023/__init__.py index a5dbf0f..17c304e 100644 --- a/mrmcd2023/__init__.py +++ b/mrmcd2023/__init__.py @@ -277,7 +277,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#sleep 1 +#sleep frames = round(6*fps*speedfactor) for i in range(0, frames): yield ( @@ -294,6 +294,23 @@ def introFrames(args): ('id', 'style', 'opacity', 0), ) +def introShort(parameters): + frames = round(3*fps*speedfactor) + for i in range(0, frames): + yield ( + ('houses', 'style', 'opacity', 1), + ('vr', 'style', 'opacity', 1), + ('person', 'style', 'opacity', 1), + ('personhit', 'style', 'opacity',0), + ('motto', 'style', 'opacity', 1), + ('text', 'style', 'opacity', 1), + ('vr-darkening', 'style', 'opacity', .4), + ('title', 'style', 'opacity', 0), + ('subtitle', 'style', 'opacity', 0), + ('persons', 'style', 'opacity', 0), + ('id', 'style', 'opacity', 0), + ) + def backgroundFrames(parameters): # 40 Sekunden @@ -315,25 +332,9 @@ def backgroundFrames(parameters): def outroFrames(args): #fadein outro graphics - frames = 3*fps + frames = 6*fps for i in range(0, frames): yield( - ('pillgroup', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), - ('logotext', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), - ('c3voclogo', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), - ('c3voctext', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), - ('bysalogo', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), - ('bysatext', 'style', 'opacity', easeInQuad(i, 0.01, 1, frames)), - ) - frames = 3*fps - for i in range(0, frames): - yield( - ('pillgroup', 'style', 'opacity', 1), - ('logotext', 'style', 'opacity', 1), - ('c3voclogo', 'style', 'opacity', 1), - ('c3voctext', 'style', 'opacity', 1), - ('bysalogo', 'style', 'opacity', 1), - ('bysatext', 'style', 'opacity', 1), ) def pauseFrames(args): @@ -417,11 +418,22 @@ def debug(): # introFrames, # { # '$id': 7776, -# '$title': 'StageWar live!', -# '$subtitle': 'Metal Konzert', -# '$persons': 'www.stagewar.de' +# '$title': 'Memetische Agitation des jungen Rechtsaußenspektrums: Mechanismen, Strategien, Narrative', +# '$subtitle': '', +# '$persons': 'Vincent Knopp' # } # ) + + render('intro.svg', + '../intro.ts', + introShort, + { + '$id': 7776, + '$title': 'Memetische Agitation des jungen Rechtsaussen-Spektrums: Mechanismen, Strategien, Narrative', + '$subtitle': '', + '$persons': 'Vincent Knopp' + } + ) # render('outro.svg', # '../outro.ts', @@ -434,10 +446,10 @@ def debug(): # backgroundFrames # ) # - render('pause.svg', - '../pause.ts', - pauseFrames - ) +# render('pause.svg', +# '../pause.ts', +# pauseFrames +# ) def tasks(queue, args, idlist, skiplist): From 8764a80f58e93d23ea9d628708e56d69001f6843 Mon Sep 17 00:00:00 2001 From: Alexander Brock Date: Wed, 30 Aug 2023 21:17:41 +0200 Subject: [PATCH 09/10] Update intro.svg with better font, move person to the left. --- mrmcd2023/__init__.py | 72 ++++++------- mrmcd2023/artwork/intro.svg | 198 ++++++++++++++++++++++++------------ 2 files changed, 167 insertions(+), 103 deletions(-) diff --git a/mrmcd2023/__init__.py b/mrmcd2023/__init__.py index 17c304e..d9c438d 100644 --- a/mrmcd2023/__init__.py +++ b/mrmcd2023/__init__.py @@ -10,7 +10,7 @@ scheduleUrl = 'https://talks.mrmcd.net/2023/schedule.xml' speedfactor=1 def introFrames(args): -#sleep .5s +# sleep .5s frames = round(.5*fps*speedfactor) for i in range(0, frames*2): yield ( @@ -26,7 +26,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#fade in houses and sleep one second +# fade in houses and sleep one second frames = round(1*fps*speedfactor) for i in range(0, frames*2): yield ( @@ -42,7 +42,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#Move in person +# move in person frames = round(1*fps*speedfactor) for i in range(0, frames): t=i/frames @@ -63,7 +63,7 @@ def introFrames(args): ('id', 'style', 'opacity', 0), ) -#wait 1s +# sleep 1s for i in range(0, round(1*fps*speedfactor)): yield ( ('houses', 'style', 'opacity', 1), @@ -78,7 +78,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#look around +# look around for i in range(0, round(.5*fps*speedfactor)): yield ( ('houses', 'style', 'opacity', 1), @@ -108,7 +108,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#wait 1s +# sleep 1s for i in range(0, round(1*fps*speedfactor)): yield ( ('houses', 'style', 'opacity', 1), @@ -123,7 +123,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#bonk once +# bonk once for i in range(0, math.ceil(.1*fps*speedfactor)): yield ( ('houses', 'style', 'opacity', 1), @@ -138,7 +138,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#wait 1s +# wait 1s for i in range(0, 1*fps*speedfactor): yield ( ('houses', 'style', 'opacity', 1), @@ -153,7 +153,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#bonk twice +# bonk twice for j in range(0,2): for i in range(0, math.ceil(.1*fps*speedfactor)): yield ( @@ -169,21 +169,21 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) - for i in range(0, round(.1*fps*speedfactor)): - yield ( - ('houses', 'style', 'opacity', 1), - ('vr', 'style', 'opacity', 0), - ('vr-blurry', 'style', 'opacity', j), - ('person', 'style', 'opacity', 0), - ('personhit', 'style', 'opacity', 1), - ('motto', 'style', 'opacity', 0), - ('logotext', 'style', 'opacity', 0), - ('text', 'style', 'opacity', 0), - ('title', 'style', 'opacity', 0), - ('subtitle', 'style', 'opacity', 0), - ('persons', 'style', 'opacity', 0), - ('id', 'style', 'opacity', 0), - ) +# for i in range(0, round(.1*fps*speedfactor)): +# yield ( +# ('houses', 'style', 'opacity', 1), +# ('vr', 'style', 'opacity', 0), +# ('vr-blurry', 'style', 'opacity', j), +# ('person', 'style', 'opacity', 0), +# ('personhit', 'style', 'opacity', 1), +# ('motto', 'style', 'opacity', 0), +# ('logotext', 'style', 'opacity', 0), +# ('text', 'style', 'opacity', 0), +# ('title', 'style', 'opacity', 0), +# ('subtitle', 'style', 'opacity', 0), +# ('persons', 'style', 'opacity', 0), +# ('id', 'style', 'opacity', 0), +# ) for i in range(0, round(.2*fps*speedfactor)): yield ( ('houses', 'style', 'opacity', 1), @@ -199,7 +199,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#wait 1s +# wait 1s for i in range(0, round(1*fps*speedfactor)): yield ( ('houses', 'style', 'opacity', 1), @@ -215,7 +215,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#bonk for speaker +# bonk for speaker for i in range(0, round(.1*fps*speedfactor)): yield ( ('houses', 'style', 'opacity', 1), @@ -230,7 +230,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#wait 1s +# wait 1s for i in range(0, round(1*fps*speedfactor)): yield ( ('houses', 'style', 'opacity', 1), @@ -245,7 +245,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#fade in speaker +# fade in speaker frames = round(1*fps*speedfactor) for i in range(0, frames): yield ( @@ -261,7 +261,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#fade in wgdh +# fade in wgdh frames = round(1*fps*speedfactor) for i in range(0, frames): yield ( @@ -277,7 +277,7 @@ def introFrames(args): ('persons', 'style', 'opacity', 0), ('id', 'style', 'opacity', 0), ) -#sleep +# sleep frames = round(6*fps*speedfactor) for i in range(0, frames): yield ( @@ -426,12 +426,12 @@ def debug(): render('intro.svg', '../intro.ts', - introShort, + introFrames, { '$id': 7776, - '$title': 'Memetische Agitation des jungen Rechtsaussen-Spektrums: Mechanismen, Strategien, Narrative', + '$title': 'Memetische Agitation des jungen Rechtsaußenspektrums: Mechanismen, Strategien, Narrative', '$subtitle': '', - '$persons': 'Vincent Knopp' + '$persons': 'Berlin Busters Social Club' } ) @@ -455,9 +455,9 @@ def debug(): def tasks(queue, args, idlist, skiplist): # iterate over all events extracted from the schedule xml-export for event in events(scheduleUrl): - if event['room'] not in ('Chirurgie (Saal 1.04)', 'Kreißsaal (Saal 1.11)'): - print("skipping room %s (%s [%s])" % (event['room'], event['title'], event['id'])) - continue +# if event['room'] not in ('Chirurgie (Saal 1.04)', 'Kreißsaal (Saal 1.11)'): +# print("skipping room %s (%s [%s])" % (event['room'], event['title'], event['id'])) +# continue if not (idlist==[]): if 000000 in idlist: print("skipping id (%s [%s])" % (event['title'], event['id'])) diff --git a/mrmcd2023/artwork/intro.svg b/mrmcd2023/artwork/intro.svg index b315311..8218f3c 100644 --- a/mrmcd2023/artwork/intro.svg +++ b/mrmcd2023/artwork/intro.svg @@ -26,9 +26,9 @@ inkscape:pageopacity="0.0" inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" - inkscape:zoom="1.9666667" - inkscape:cx="1345.9322" - inkscape:cy="512.54236" + inkscape:zoom="0.24583334" + inkscape:cx="1431.8644" + inkscape:cy="1350.5084" inkscape:window-width="1916" inkscape:window-height="1161" inkscape:window-x="0" @@ -5914,7 +5914,7 @@ inkscape:label="personhit" style="display:inline"> $title $subtitle $persons + style="display:inline">$title $subtitle$persons From 219332a5412b89899696cb5aa70030f65bf9efe4 Mon Sep 17 00:00:00 2001 From: Alexander Brock Date: Wed, 30 Aug 2023 23:53:38 +0200 Subject: [PATCH 10/10] Add outro.svg for MRMCD2023 --- mrmcd2023/artwork/outro.svg | 234 ++++++++++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 mrmcd2023/artwork/outro.svg diff --git a/mrmcd2023/artwork/outro.svg b/mrmcd2023/artwork/outro.svg new file mode 100644 index 0000000..f37dc4e --- /dev/null +++ b/mrmcd2023/artwork/outro.svg @@ -0,0 +1,234 @@ + + + + + + + + + C3VOC + + + + + + CC BY-SA 4.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +