Frab-Based Into- and Outro-Generator
Find a file
2018-05-06 01:09:52 +02:00
00_example_render_byid fixed bug in __init.py__ which conflicts if idlist is None 2017-04-15 16:19:45 +02:00
1c2 1c2: Final versions 2015-05-16 11:31:02 +02:00
13np 13np: cc-by 2017-09-04 13:37:55 +02:00
16c3 16c3: Long titles are long. Never understimate lon 2017-08-13 11:27:23 +02:00
30-jahre-btx 30 jahre btx intro 2014-11-19 14:25:27 +01:00
32c3sz 32c3 sendezentrum supersource-based pause 2016-04-14 01:59:40 +02:00
afu add missing .pngs by adjusting gitignore 2016-06-20 16:00:47 +02:00
afu-tm18 intros/outro Münchner Amateurfunktagung 2018 2018-03-10 16:41:45 +01:00
asg2017 adjusted asg background 2017-10-28 11:42:33 +02:00
camp1999 release version 2.0 of camp99 artwork 2015-05-28 18:36:47 +02:00
cc15 cc15: SD overlay 2015-05-05 12:35:53 +02:00
cccamp15 add missing .pngs by adjusting gitignore 2016-06-20 16:00:47 +02:00
coreboot16 added coreboot16 (schedule url still missing) 2016-10-03 23:07:59 +02:00
cr CR217 intro 2015-11-03 22:43:59 +01:00
denog7 Fix outro 2015-11-08 15:58:14 +01:00
denog8 denog8 2016-11-12 15:30:37 +01:00
dg added occ16 2016-09-12 17:18:06 +02:00
ds14 use slugged filename 2014-09-13 16:52:50 +02:00
DS2016 COeins changed it to comply more with to DS2016 CI 2016-10-21 00:47:51 +02:00
eh14 migrate to new Rendertask-Class 2014-07-23 01:45:51 +02:00
eh15 set ids of elements 2015-05-24 00:38:31 +02:00
eh17 eh17 - Fixed event id list parameter evaluation - fixed layout of lasers talk 2017-04-15 15:04:27 +02:00
emf2016 updated emf2016 graphics 2016-07-31 19:31:25 +01:00
fiffkon emergency fiffcon intros 2014-11-05 12:25:10 +01:00
fiffkon16 Add fiffkon16 2016-11-26 01:05:13 +01:00
foss4g-2016 foss4g backdrop 2016-09-29 00:24:56 +02:00
fossgis14 color output if termcolor is installed 2014-07-23 23:36:19 +02:00
fossgis15 Implement Speaker-Names als FlowRoot so they can Wrap 2015-03-11 13:29:35 +01:00
fossgis16 fix function sig 2016-06-21 19:14:19 +02:00
fossgis17 fossgis17 overlay 2017-04-13 18:41:36 +02:00
froscon2014 froscon2015 intros 2015-08-22 11:06:21 +02:00
froscon2015 outro licence to cc-by 2015-08-23 14:49:31 +02:00
froscon2016 added froscon background 2016-08-20 15:09:37 +02:00
froscon2017 Adjust outro 2017-08-19 10:40:33 +02:00
fusion16 fusion svg 2016-08-19 00:37:10 +02:00
gpn15 add gpn15 2015-05-31 00:58:49 +02:00
gpn16 move the glow onto the icon 2016-05-26 00:09:57 +02:00
gpn17 plane into bgloop 2017-05-25 15:14:03 +02:00
gpn18 gpn18 font/layout fixes 2018-05-06 01:08:47 +02:00
guadec16 guadec16: redo pause frame to be seamless pulsing logo 2016-08-10 14:51:50 +02:00
jh16-berlin updated jh16 2016-10-16 11:56:14 +02:00
jh16-nord Added intro, outro, pause and background - TS-Files for Jugend hackt 2016 - Nord+Sued+West 2016-06-12 02:48:31 +02:00
jh16-sued Added intro, outro, pause and background - TS-Files for Jugend hackt 2016 - Nord+Sued+West 2016-06-12 02:48:31 +02:00
jh16-west Added intro, outro, pause and background - TS-Files for Jugend hackt 2016 - Nord+Sued+West 2016-06-12 02:48:31 +02:00
ke1 ke1: Design fixes 2018-01-26 16:43:11 +01:00
minilac16 dv -> ts 2016-04-09 19:39:29 +02:00
mrmcd2014 fix typo in mrmcd-pause 2014-09-13 16:44:36 +02:00
mrmcd2016 added feature: read commandline-options with argparse and printout a nice help view 2016-09-09 15:53:09 +02:00
mrmcd2017 MRMCD17 Intro 2017-08-31 22:04:33 +02:00
nixcon2015 nixcon2015: i hate whitespace-sensitive languages 2015-11-12 00:39:05 +01:00
occ16 added occ16 2016-09-12 17:18:06 +02:00
osc16 Improve intro/outro for osc16 2016-06-22 14:18:13 +02:00
osc16_dv Small adjustments 2016-06-24 11:52:29 +02:00
osc17 commit like a boss 2017-05-26 14:28:52 +02:00
osc18 adding osc18 artwork to repo 2018-04-29 11:42:05 +02:00
osmocon17 osmocon17 intro outro pause background 2017-04-21 01:01:59 +02:00
osmodevcon18 OsmoDevCon 2018, dunno if the xml URL works this way... the rest looks good. (#23) 2018-04-14 12:39:16 +02:00
ppw15b Use .dv as output 2015-11-19 15:41:50 +01:00
pycon14 Add a Note to why the given-frames were removed and where they can be fetched from 2015-03-04 16:45:18 +01:00
pydata14 fix scaled overlay size 2014-07-25 20:25:23 +02:00
pydata15 pydata pause loop 2015-05-29 12:54:43 +02:00
qtcon2016 added filter for . and - in speakername and title==subtitle 2016-09-03 15:24:39 +02:00
qtws2017 add supersource 2017-10-10 19:54:38 +02:00
sendezentrum14 migrate to new Rendertask-Class 2014-07-23 01:45:51 +02:00
SHA2017 Fixed media.ccc.de link 2017-07-20 00:13:18 +02:00
sotmeu14 migrate to new Rendertask-Class 2014-07-23 01:45:51 +02:00
subscribe subscribe: optimized svg 2017-10-27 14:43:03 +02:00
systemd-conf-15 Remove commited out code 2015-11-05 11:50:14 +01:00
systemd-conf-16 systemd-conf-16 artwork 2016-09-29 00:32:21 +02:00
taskforce_biometrics add related 2017-05-20 21:08:50 +02:00
vcfb fix stuff. 2015-10-03 12:05:32 +02:00
vcfb15 added vcfb15 files 2016-06-25 10:53:18 +02:00
vcfb16 Fix intro for some long titles 2016-10-02 10:45:53 +02:00
vcfb17 updated vcfb to current init.py 2017-10-07 13:38:03 +02:00
voc fix imports 2016-01-31 20:27:44 +01:00
voc-pauseloop motionblur anknipsen 2017-05-25 12:08:21 +02:00
voc_ae Add generator for Adobe After Effects + Template 2018-04-09 02:10:19 +02:00
wikidatacon2017 wdc2017: more visual layout improvments 2017-10-28 13:03:24 +02:00
.gitignore unignore relevant .png files 2017-05-24 11:44:58 +02:00
apple-prores-4444.cmprstng use a local copy of tthe prores profile, fixes #17 2017-08-05 14:34:21 +02: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 add ease*Cubic easings back 2015-08-28 11:23:30 +02:00
make-adobe-after-effects.py move event print before execution 2018-05-06 01:09:52 +02:00
make-apple-motion.py Merge branch 'SHA2017' of https://github.com/ramdyne/intro-outro-generator into sha 2017-08-17 18:09:29 +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 add command line option to render one specific frame, e.g. titles for debugging 2017-10-26 22:41:40 +02:00
README.md Documented python virtual env creation and dependencies 2017-04-13 21:17:23 +02:00
README_AE.md Readme for After Effects intro generator 2018-04-09 12:39:54 +02:00
renderlib.py Always use max quality 2018-01-26 16:44:11 +01:00
requirements.txt Add svg.path to requirements 2017-08-07 15:23:23 +02:00
script-Z-preroll-generator.py use /usr/bin/env in shebang 2015-05-04 21:31:48 +02:00
script-Z-tracker-changes.sql initial implementation 2014-07-19 15:20:04 +02: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 (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 an 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, for python lxml dependencies:

sudo apt-get install 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 an 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 an 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.