Frab-Based Into- and Outro-Generator
Find a file
2024-08-28 16:22:17 +02:00
00_example_render_byid Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
1c2 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
13np Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
14np Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
16c3 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
30-jahre-btx Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
32c3sz Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
35c3 with outro 2018-12-24 17:20:02 +01:00
35c3-chaoswest 35c3: fix chaoswest outro 2018-12-28 19:38:16 +01:00
35c3-wikipakawg 35c3: fix wikipakawg outro 2018-12-28 19:38:34 +01:00
36c3 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
afu Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
afu-tm18 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
archconf2020 [TIDY] Refactor renderlib into two parts 2023-10-22 21:43:24 +02:00
asg2017 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
asg2018/artwork asg2018 assets 2018-10-19 20:11:37 +02:00
asg2019 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
bigbrotherawards2019/artwork/pngs Add 2019 events on local disk for future reference 2019-12-14 21:33:16 +01:00
bornhack2021 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
bub2018 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
camp1999 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
camp2023 update make-ffmpeg render 2023-08-11 01:04:00 +02:00
cc15 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
cccamp15 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
cccamp19 Backport changes introduced by "update make-ffmpeg" 2023-10-22 21:36:45 +02:00
chaosradio Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
coreboot16 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
datengarten Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
dcgtw intro/outro/pause for dcgtw 2018-06-04 01:41:31 +02:00
denog7 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
denog8 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
denog11 Backport changes introduced by "update make-ffmpeg" 2023-10-22 21:36:45 +02:00
divoc-hs Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
divoc-ptt Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
djangocon2018 missing file? 2018-11-25 13:59:35 +01:00
ds14 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
DS2016 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
eh14 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
eh15 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
eh17 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
emf2016 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
emf2018 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fiffkon Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fiffkon16 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fiffkon17 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fiffkon18 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fiffkon21 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
forumoe Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
forumoe19 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
foss4g-2016 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
foss4g-2019 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fossgis14 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fossgis15 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fossgis16 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fossgis17 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fossgis19 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fossgis20 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
froscon2014 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
froscon2015 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
froscon2016 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
froscon2017 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
froscon2018 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
froscon2019 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
froscon2020 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
froscon2022 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fusion16 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fusion18 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fusion19 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
fusion22 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
glt19 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
glt22 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
gpn15 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
gpn16 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
gpn17 plane into bgloop 2017-05-25 15:14:03 +02:00
gpn18 gpn18 workshop outro2 2018-05-12 20:46:28 +02:00
gpn19 intro/outro GPN19 2019-05-29 00:16:46 +02:00
gpn20 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
guadec16 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
hackerhotel2024 hackerhotel 2024 update 2024-02-08 12:39:13 +01:00
hackmas2024 hackmas2024: init 2024-08-28 12:26:45 +02:00
jh16-berlin Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
jh16-nord Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
jh16-sued Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
jh16-west Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
jh18-berlin Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
jh18-koeln Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
jh18-ulm Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
jh19-berlin Backport changes introduced by "update make-ffmpeg" 2023-10-22 21:36:45 +02:00
jh19-hh Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
jh19-rostock Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
jh19-ulm Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
jh20-jue Backport changes introduced by "update make-ffmpeg" 2023-10-22 21:36:45 +02:00
jh21-rn Backport changes introduced by "update make-ffmpeg" 2023-10-22 21:36:45 +02:00
jugendhackt Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
ke1 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
lac18 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
mch2022 mch2022 init 2022-07-17 03:42:54 +02:00
minilac16 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
mrmcd2014 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
mrmcd2016 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
mrmcd2017 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
mrmcd2018 mrmcd2018: bgloop hinzugefügt 2018-09-03 19:49:52 +02:00
mrmcd2019 Backport changes introduced by "update make-ffmpeg" 2023-10-22 21:36:45 +02:00
muccc add intro/outro hack!friday 2020-01-13 12:56:58 +01:00
nixcon2015 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
occ16 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
occon18 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
osc16 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
osc16_dv Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
osc17 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
osc18 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
osc19 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
osc21 chore: add some old osc stuff and hackerhotel2024 2024-02-08 00:31:37 +01:00
osc22 chore: add some old osc stuff and hackerhotel2024 2024-02-08 00:31:37 +01:00
osmocon17 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
osmocon18 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
osmodevcon18 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
osmodevcon19 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
osmodevcon24 added osmodevcon24 2024-05-03 11:53:27 +02:00
ppw15b Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
pwb18 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
pycon14 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
pydata14 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
pydata15 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
qtcon2016 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
qtws2017 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
rc3 add rc3 assembly intro/outro 2021-01-09 20:04:31 +01:00
rc3-2021 rc3 2021: csh / gehacktes intros 2021-12-28 18:23:29 +01:00
sendezentrum14 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
SHA2017 Fixed media.ccc.de link 2017-07-20 00:13:18 +02:00
smarthomeday2018 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
sonoj19 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
sotm2019 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
sotm2020 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
sotmeu14 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
subscribe Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
subscribe10 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
suselabs18 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
systemd-conf-15 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
systemd-conf-16 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
systemkonform Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
taskforce_biometrics Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
vcfb Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
vcfb15 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
vcfb16 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
vcfb17 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
vcfb18 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
vcfb19 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
vcfb22 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
vcfb23 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
voc Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
voc-pauseloop motionblur anknipsen 2017-05-25 12:08:21 +02:00
voc_ae get comp by name 2018-12-19 15:50:45 +01:00
voc_blender add sample intro based on franconian.net 2021-03-25 02:33:07 +01:00
voc_geekend18 voc geekend18 2018-10-19 20:36:23 +02:00
wikidatacon2017 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
wikidatacon2019 Fix old projects after renderlib split 2024-02-07 20:09:24 +01:00
.gitignore ignore pngs not in artwork 2019-08-28 00:14:01 +02:00
.pep8 [TIDY] Apply autopep8 formatting 2023-10-29 11:53:59 +01:00
apple-prores-4444.compressorsetting use h264 directly 2019-11-16 19:40:25 +01:00
c3t_rpc_client.py fix parameter quoting to that it works both with filter-dicts and multiline-values including spaces 2014-07-23 01:07:01 +02:00
easing.py [TIDY] Apply autopep8 formatting 2023-10-29 11:53:59 +01:00
hd1080p.compressorsetting use h264 directly 2019-11-16 19:40:25 +01:00
make-adobe-after-effects.py makde-ae: bump version to 2024, add mp4 preview 2023-10-30 09:32:26 +01:00
make-apple-motion.py [TIDY] Apply autopep8 formatting 2023-10-29 11:53:59 +01:00
make-blender.py [TIDY] Apply autopep8 formatting 2023-10-29 11:53:59 +01:00
make-ffmpeg-fade.py [TIDY] Apply autopep8 formatting 2023-10-29 11:53:59 +01:00
make-ffmpeg.py hackmas: patch in font border 2024-08-28 16:22:17 +02:00
make-overlay.sh export overlay for HD-Stream 2016-06-27 12:00:41 +02:00
make-snapshots.sh Override snapshots 2017-04-14 13:06:06 +02:00
make.py [TIDY] Apply autopep8 formatting 2023-10-29 11:53:59 +01:00
README.md Fix typos 2023-10-22 19:33:20 +02:00
README_AE.md Readme for After Effects intro generator 2018-04-09 12:39:54 +02:00
renderlib.py [TIDY] Apply autopep8 formatting 2023-10-29 11:53:59 +01:00
requirements.txt Bump lxml from 4.6.3 to 4.9.1 2023-10-22 21:33:41 +02:00
schedulelib.py [TIDY] Apply autopep8 formatting 2023-10-29 11:53:59 +01:00
script-Z-preroll-generator.py [TIDY] Apply autopep8 formatting 2023-10-29 11:53:59 +01:00
script-Z-tracker-changes.sql initial implementation 2014-07-19 15:20:04 +02:00
svgtemplate.py [TIDY] Apply autopep8 formatting 2023-10-29 11:53:59 +01:00

Frab-Based Into- and Outro-Generator

This is a scripted pre-, postroll and pause-clip generator. It takes a Frab/frab schedule-xml and artwork as svg and generates .dv- or .ts-clips ready-to-use with the VOC-CRS (Conference Recording System) or any other System. It can aĺso be modified to generate Lossless h264 or something different if reqired.

Following the requirements of the CRS-Setup it generates one postroll, one pause-sequence and multiple prerolls - one per Talk in your Schedule-xml, but it should be simple to modify this if your Setup needs it.

Yes! That's what I want!

Okay, let's go.

  • 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.
  • Open artwork/intro.svg (preroll template) in inkscape and modify it. You can also just create a new one. For the VOC-Setup you should use a Pixel-Resolution of 1920×1080 (or for the legacy SD/.dv-Pipeline 1024×576).
  • Group things together that should be animated together (like subtitle and speaker-text)
  • Use Flow-Text (in Inkscape drag an Area of Text instead of just placing a single line). This way the text will automatically wrap inside the specified area if it gets too long.
  • Type Placeholder-Texts where the script should substitute content from your schedule.xml. By default the following placeholders are substituted
    • $id - Talk-ID (useful in links to the Frab-Page)
    • $title - Title of the Talk
    • $subtitle - You guessed it...
    • $personnames - Comma-Separated list of Speaker-Names
  • Give IDs to the Objects and Groups you want to animate (Inkscape Shift-Ctrl-O)
  • Edit your copy of init.py - this is your project configuration
    • set scheduleUrl to the url of your schedule.xml-file
    • modify introFrames (preroll) - see section about the frame-generators below
    • 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 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.
    • Viewing through those pngs to check if all intros are looking good with the real-world titles- and person-names
    • Viewing through the pngs is faster then opening each clip and waiting 5 seconds.

Python3 virtualenv

Create virtualenv and fetch python deps:

$ virtualenv -p python3 env  
$ . ./env/bin/activate
$ pip3 install -r requirements.txt
Debian

On debian you need to install ImageMagick and Python lxml dependencies:

sudo apt-get install python3-pil libmagickwand-dev libmagickcore5-extra libxml2-dev libxslt1-dev

Quick start

Start your own project by copying "00_example_render_byid" folder which contains all changes to use the new features.

Just type ./make.py or ./make.py -h in the main directory and you'll get the following help information.

usage: see help with option -h

C3VOC Intro-Outro-Generator

positional arguments:

  yourproject/
    Path to your project is a required argument.
    Usage: ./make.py yourproject/
    Without any further argument(s) given, your whole project will be rendered.
                            

optional arguments:

  -h, --help

    show this help message and exit

  --debug

    Run script in debug mode and just render the debug values
    given in your projects __init.py__
    This argument must not be used together with --id
    Usage: ./make.py yourproject/ --debug
                            
  --id ID [ID ...]

    Only render the given ID(s) from your projects schedule.
    This argument must not be used together with --debug
    Usage: ./make.py yourproject/ --id 4711 0815 4223 1337
    To skip all IDs (just generate intro/outro/background files) use it with --id 000000
                            
  --skip SKIP [SKIP ...]

    Skip outro, pause and/or background files in rendering if not needed.
    This argument must not be used together with --debug
    Usage: ./make.py yourproject/ --skip pause out bg
    Example - only generate outro: ./make.py yourproject/ --skip pause bg
    Example - only generate pause and background: ./make.py yourproject/ --skip out

The Frame-Generators

The animation sequence is controlled by the three frame-generator routines vorspanFrames, abspannFrames and pauseFrames. Each of them yields one tupel per frame. This Frame-Tupel contains one Sub-Tupel per Animated Element, which has one of two forms:

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 a fade-in-opacity-animation, the frame-generator could look like this:

# three seconds of animation
frames = 3*fps
for i in range(0, frames):
	yield (
		('logo',  'style',    'opacity', "%.4f" % easeInCubic(i, 0, 1, frames)),
	)

easeInCubic is an easing-function stolen from the jquery-easing plugin (easing-cheat-sheet). They take 4 parameters:

  • t: current time
  • b: beginning value
  • c: change In value
  • d: duration (of time)

So to fade the logo out, the generator yould look like this:

# three seconds of animation
frames = 3*fps
for i in range(0, frames):
	yield (
		('logo',  'style',    'opacity', "%.4f" % easeInCubic(i, 1, -1, frames)),
	)

By yielding multiple sub-tuples, you can animate multiple elements at the same time using different easings. Its up to you to find a combination that looks nice with your artwork.

XML-Attribute-Modifications

The other form a sub-tuble can have is ('box', 'attr', 'transform', 'translate(0,0)') - locate object with id box in the svg, and set its transform-attribute to translate(0,0). This can be used to animate things not specifiable by css - like the spacial translation of an object. A suitable generator, that animates the element box in an upward movement, could look like this:

# three seconds of animation
frames = 3*fps
for i in range(0, frames):
	yield (
		('box',   'attr',     'transform', 'translate(0,%.4f)' % easeOutQuad(i, 100, -100, frames) ),
	)

FEM/VOC-Tracker-Integration

that script-Z-thingy The FEM and the VOC 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 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

  • to test it on dark as well as bright background and add a glow or a backround-box if neccessary
  • avoid thin lines or small text that will not be visible in the final size
  • set an opacity of 0.8 to 1.0 (below 0.8 it usually won't be recognizable on a bumpy background) Save your file as artwork/overlay.svg

When you're done, call ./make-overlay.sh yourproject/ which will generate three .pngs in your artwork directory. One of them looks squeezed - don't worry, that is correct.

It works! It doesn't work!

If it works, push your code to github. This way everybody can see which beautiful animations you created and we can all learn from each other. If it doesn't work, ask on IRC or on the Mailinglist and we'll see that we can solve your problem. If you think you found a bug, file an Issue. Or even better, fix it and send a Pull-Request.