I was planning to attend
DebConf New York this year, but for a number of reasons I decided not to go. Fortunately, Ferdinand Thommes organized a
MiniDebConf in Berlin at
LinuxTag and I managed to attend. Thanks, Ferdinand!
There were a number of interesting
Talks. I especially liked the talk of our DPL, and those about piuparts and git-buildpackage. In contrast to the other LinuxTag talks, we had a livestream of our talks and recorded (most) of them. The kudos for setting this up goes to Alexander Wirt, who spent quite a few hours to get it up and running.
I have to apologize for being late in bringing my Notebook, which was intended to do the theora encoding of the livestream. This was a misunderstanding on my part, I should have known that this is not going to be setup in the night before show time So to compensate the extra hours he had to put in for me, I offered to do the post processing of the videos.
Basic approach for post processing
The main goal of post processing the videos was (of course) to compress them to a usable size from the original 143 GB. I also wanted to have a title on each video, and show the sponsors at the end of the video.
My basic idea to implement that consisted of the following steps:
- Create a title animation template.
- Generate title animations from template for all talks.
- Use a video editor to create a playlist of the parts title talk epilogue.
- Run the video editor in batch mode to generate the combined video.
- Encode the resulting video as ogg theora.
As always with technology, it turned out that the original plan needed a few modifications.
Title animations
<video controls="controls" height="288" src="http://www.landschoff.net/blog/uploads/2010/07/mdc2010_title_anim1.ogv" width="360 "></video>
Originally I wanted to use
Blender for the title animation, but I knew it is quite a complicated bit of software. So I looked for something simpler, and stumbled across an
article that pointed me towards
Synfig Studio for 2D animation. This is also in Debian, so I gave it a try.
I was delighted that Synfig Studio has a command line renderer which is just called
synfig and that the file format is XML, which would make it simple to batch-create the title animations. My title template can be found in
this git repository.
Batch creation of title animations
I used a combination of
make and a simple
python script to replace the author name and the title of the talk into the synfig XML file. The data for all talks is another XML file
talks.xml. Basically, I used a simple
XPath expression to find the relevant text node and change the data using the ElementTree API of
lxml python module.
The same could be done using
XSLT of course (for a constant replacement, see
this file) but I found it easier to combine two XML files in python.
Note that I create PNG files with synfig and use
ffmpeg to generate a DV file from those. Originally, I had synfig create DV files directly but those turned out quite gray for some reason. I am now unable to reproduce this problem.
Combining the title animation with the talk
For joining the title animation with the talk, I originally went with
OpenShot, which somebody of the video team had running at the conference. My idea was to mix a single video manually and just replace the underlying data files for each talk. I expected that this would be easy using the
openshot-render command, which renders the output video from the input clips and the
OpenShot project file. However, OpenShot stores the video lengths in the project file and will take those literally, so this did not work for talks of different play times
I considered working with
Kino or
Kdenlive but they did not look more appropriate for this use case. I noticed that OpenShot and Kdenlive both use the
Media Lovin Toolkit under the hood, and OpenShot actually serializes the MLT configuration to
$HOME/.openshot/sequence.xml when rendering. I first tried to read that XML file from python (using the mlt python bindings from the
python-mlt2 package) but did not find an API function to do that. So I just hard coded the
video sequence in python.
I ran into a few gotchas on the way:
- it s easy to segfault MLT from Python (something is wrong with the refcounting)
- generating ogg theora using MLT from Python (which uses libavformat) resulted in a bad audio/video synchronisation of the output (more than 1 second for 1 hour of video)
- generating dv from MLT and running ffmpeg2theora on the result is disk-bound on my quad core system so use a pipe to ffmpeg2theora
Things to improve
While the results look quite okay for me now, there is a lot of room for improvement.
- What bothers me the most is the unequal audio volume between talks. We should apply something like replay gain for normalization. I did not find an easy way to add this to the processing pipeline, otherwise it would have been included already.
- Original recordings have different aspect ratios, so after combining them, there is a letterbox added. This is the case for Goswin s talk on Multiarch for example. I d rather have the title distorted or letter boxed, if I get around to it, I will fix it in the script.
- Most of the recordings concentrate on showing the slides. As we did not keep the raw camera data, but recorded the DVswitch output, we missed the opportunity to show the speaker more often in full screen. Looking at the same slide becomes quite boring after half a minute, so it would be better
to show the speaker more often. That would require quite a bit of man power for post processing though, I have to admit that I did not watch all the hours of video.
- We could cut a bit off the talk at start and end, when the speaker discusses where he is available for questions. It is not of interest anymore after the conference is over.
Availability