Open Source im professionellen Einsatz

© dieterwald, Pixelio.de

Perl-Skript am Schneidetisch

Final Cut

Ein handgedrehtes Video sieht mit einem Vorspann gleich professioneller aus. Die Tools Mencoder und Sox helfen bei der Formatfitzelei und ein Perl-Skript automatisiert den Vorgang.

Es ist schon faszinierend, zu wie vielen Themen Youtube Lehrfilme anbietet. Ob ein Hobbykoch sein Leibgericht kochen oder der praktisch veranlagte Autofahrer sein Gefährt reparieren will, auf Youtube findet sich oft Passendes. Ist so ein Lehrvideo erst einmal zusammengeschnipselt, fehlt noch ein Titel. In zwei Sekunden Vorspann kann der Hobbyfilmer mit ein, zwei Zeilen Text darauf hinweisen, was den Zuschauer gleich erwartet.

Das erledigen proprietäre Windows-Programme wie Adobe Premiere, Mac-Software wie I-Movie oder gar Linux-Applikationen wie Cinelerra, doch in der Perl-Kolumne geht es natürlich kurz und schmerzlos von der Kommandozeile aus mit einem kleinen Perl-Skript.

Laufende Bilder

Filme bestehen aus schnell hintereinander abgespielten Einzelbildern, den so genannten Frames. Normale Videokameras nehmen pro Sekunde etwa 30 davon auf, ein Programm wie Mplayer spielt die Einzelbilder wieder in festen Zeitabständen ab. Ein bewegungsloser Videotitel mit ein bisschen Text lässt sich leicht als eine Reihe identischer Jpeg-Bilder erzeugen und mit Mencoder [1] in eine AVI-Datei umwandeln. Wer die beiden Videodateien dann hintereinanderhängt, erhält ein Video mit Titel - wenigstens in der Theorie. In der Praxis stehen doch noch ein paar Hürden im Weg.

Videodateien im AVI-Format dienen als Container für Video- und Audioströme, die ein Player gleichzeitig abspielt. Sowohl Video- als auch Audiodaten in einem AVI-Container können in verschiedenen Formaten gespeichert sein. Die Audiospur liegt meist im rohen PCM-Format oder komprimiert als MP3-Datei vor.

Videodaten hingegen verbrauchen massenhaft Speicher, weil pro Sekunde 30 Bilddateien anfallen. Daher spielt das verwendete Kodierungsverfahren, der so genannte Codec, eine entscheidende Rolle, denn ein guter Codec kann die Daten extrem komprimieren, ohne die Bildqualität allzu sehr in Mitleidenschaft zu ziehen. Codecs gibt es wie Sand am Meer, viele davon sind patentiert.

Obwohl ein AVI-Container verschieden kodierte Video- und Audiodaten aufnehmen kann, darf das Kodierungsverfahren nicht mittendrin wechseln. Um also ein Vorspannschnipsel und ein Video hintereinanderzuhängen, muss der Cutter dafür sorgen, dass beide von Anfang an die gleichen Codecs verwenden, oder aber die unterschiedlich kodierten Daten am Ende in ein gemeinsames Ausgabeformat transformieren.

Kameras im Vergleich

Abbildung 1 zeigt die mit dem Programm in Listing 1 ausgelesenen Metadaten zweier Videos. Es nutzt das Modul Video::FrameGrab vom CPAN, dessen »meta()«-Methode Kenndaten eines Videos einholt und in einem Hash ablegt. Abbildung 1 vergleicht die Metadaten der beiden Videos »coolpix.avi« und »camcorder.avi«. Ersteres ist mit einer kleinen Westentaschenkamera, einer Nikon Coolpix S52, aufgenommen, das zweite mit einem digitalen Camcorder der Marke Canon Elura 100. Beide zeichnen das Video mit etwa 30 Frames pro Sekunde auf (»video_fps«), aber der Canon-Recorder nutzt den Codec »ffdv« und die Nikon »ffmjpeg«.

Listing 1:
»video-meta«

01 #!/usr/local/bin/perl -w
02 use strict;
03 use Data::Dump qw(dump);
04 use Video::FrameGrab;
05
06 my($file) = @ARGV;
07 die "usage: $0 file" unless defined $file;
08
09 my $grabber = Video::FrameGrab->new(
10   video => $file);
11
12 my $meta = $grabber->meta_data();
13 print dump($meta), "n";

Abbildung 1: Metadaten zweier Videos, oben mit Nikon Coolpix S52, unten mit Canon Elura 100.

Abbildung 1: Metadaten zweier Videos, oben mit Nikon Coolpix S52, unten mit Canon Elura 100.

Auch die Audiodaten speichern beide Kameras unterschiedlich. Während der Camcorder zwei Kanäle aufnimmt, kann die Nikon nur Mono. Zudem ist die Audioqualität unterschiedlich, denn der Camcorder nimmt Audio mit 32000 Messpunkten pro Sekunde auf (Feld »audio_rate«), die Nikon gibt sich mit nur 8000 Messpunkten zufrieden.

Abbildung 1 zeigt auch, dass die »audio_rate« von »8000« bei der Nikon einem Wert von »64000« für die »audio_bitrate« in Bit pro Sekunde gegenübersteht. Beim Camcorder hingegen entstehen pro Audio-Messpunkt 32 Bit (1024000 geteilt durch 32000). Pro Kanal sind das 2 Byte Sample Size.

Ein stummes Titelschnipsel könnte also bei unbekannter Kamera nicht ohne Umwandlung vor einem Video stehen. Zum Glück bieten die Tools Mencoder und Sox [2] die nötigen Funktionen, um die Formate so hinzubiegen, dass Titel und Video trotzdem vereint im AVI-Container liegen können.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook