Beim jährlichen Aufräumen stolperte ich wieder einmal über die drei Feuerwerke vom letzten Züri Fäscht. Dieses Jahr steht das nächste an, eine gute Motivation, mich über diese kalten Winterabende um die Idee zu kümmern, aus Bildern und Soundtrack einen Film zu basteln.
Vielleicht habe ich im Herbst 2016 die falschen Suchbegriffe geggogelt, vielleicht gab es PhotoFilmStrip noch nicht in der Art. Er macht eigentlich genau das, was ich brauche - aus einem Soundfile und Bildern einen Film. Freundlicherweise gibt es ein fertiges Ubuntu Paket, ich starte meine passende VM, installiere es und stelle erfreut fest, dass die Metadaten vom Programm in einer SQLite Datenbank gespeichert werden. Das lässt sich prima hacken
So entsteht ein ziemlich hässliches Perlscript, dass die EXIF Aufnahmedaten in Zeitdauern umrechnet und SQL ausspuckt, mit dem die SQLite Datenbank gepatcht werden kann:
#!/usr/bin/perl -w use strict; use Time::Local; my $lastfile; my $lasttime; opendir DIR, "."; my @files=sort readdir DIR; closedir DIR; while($_=shift @files) { if (/(CT9C.*\.jpg)/) { my $file=$1; my $pid=open IN, "-|"; if ($pid==0) { exec "exiftool", "-DateTimeOriginal", $file; exit 1; } $_=<IN>; / : (\d+):(\d+):(\d+) (\d+):(\d+):(\d+)/; my $time=timelocal($6, $5, $4, $3, $2-1, $1); if (defined $lastfile) { # print "$lastfile ".($time-$lasttime)."\n"; my $duration=$time-$lasttime; my $transition_duration=.4377; if ($duration>3) { print << "EOF"; update picture set duration=$duration, transition_duration=$transition_duration where filename='/scratch/Pictures/Temp/$lastfile'; EOF } else { if ($duration>1) { $duration=$duration-1; } else { $transition_duration=0; } print << "EOF"; update picture set width=1800, height=1200, start_left=0, start_top=0, start_width=1800, start_height=1200, target_left=0, target_top=0, target_width=1800, target_height=1200, rotation=0, duration=$duration, movement=1, effect=0, transition=1, transition_duration=$transition_duration where filename='/scratch/Pictures/Temp/$lastfile'; EOF } } $lastfile=$file; $lasttime=$time; close IN; } } print << "EOF"; update picture set duration=4, transition_duration=0.5 where filename='/scratch/Pictures/Temp/$lastfile'; EOF
Es brauchte dann doch einige Anläufe, bis der Film komplett war: PhotoFilmStrip hat ein mächtiges Memory Leak, mehr als 720p bekomme ich nicht aus den 4G RAM, die ich meiner VM geben kann. Sporadisch verhaspeln sich auch die Threads, so jedes dritte mal gibt es einen Python Stacktrace und das Resultat bricht irgendwo zufällig ab. Das Programm in einem Terminal zu starten ist eine gute Idee, dann zeigen sich die Fehlermeldungen gleich prominent.
Die Bildaufnahmen eines Dings in der Oeffentlichkeit kann zumindest in der Schweiz nicht geschützt werden, bei der Musik ist es anders - so gibt es hier nur einen kleinen Ausschnitt des kompletten Filmes. 1)
Starring Magic Lantern, digiKam, RawTherapee, VLC, Audacity, PhotoFilmStrip, ImageMagick, ExifTool, Perl and a bit of Beat 2):
Für mit ohne Flash: feuerwerk.mp4
Aber ja, einmal mehr muss ich sagen, dass Video nicht meins ist. Der Umgang mit der dritten Dimension „Zeit“ ist etwas, was ich nicht einmal im Ansatz beherrsche, aber sehr wohl weiss, wie es sein müsste. Nach ein paar Videoaufnahmen 1988, einem Musikvideo aus einem Konzert Lifemitschnitt 2012 und dem Feuerwerk jetzt kann ich das mit gutem Gewissen sagen. Ich bleibe beim Fotografieren, werde mich aber sicher früher oder später wieder an einem Video versuchen - sei es einfach, um mir zu beweisen, dass ich es wirklich nicht kann