Kartonage

Wer Videos im Netz bereitstellen will, muss wohl oder übel mehrere Formate anbieten. Oft ist es jedoch unnötig, Dateien mit hohem Zeit- und Rechenaufwand neu zu codieren.

In Pocket speichern vorlesen Druckansicht 3 Kommentare lesen
Lesezeit: 5 Min.
Von
  • Michael Riepe

Videodateien enthalten selten nur bewegte Bilder. Ein Film besitzt in der Regel eine oder mehrere Tonspuren, eventuell auch Untertitel. Die Komponenten sind üblicherweise in einer Containerdatei zusammengefasst. Beim Abspielen muss der Player die Datenströme wieder trennen (demultiplexen), separat decodieren und an die Ausgabegeräte weiterreichen.

Welches Containerformat man verwendet, hängt in erster Linie von der Anwendung ab. Beim digitalen Fernsehen etwa sind Bild und Ton in einen MPEG-2 Transport Stream (TS) eingepackt, der sich dank seiner einfachen Paketstruktur gut fürs Streaming eignet. Varianten des Formats kommen auch auf Blu-ray-Discs und in HD-Camcordern zum Einsatz. Video-DVDs hingegen enthalten MPEG-2 Program Streams (PS). Sie sind in erster Linie für das Speichern von Videos konzipiert, weniger für deren Übertragung.

Mit MPEG-4 kam das MP4-Format hinzu, eine Ausprägung des ISO Base Media File Format, das sich wiederum an Apples QuickTime-Containerformat anlehnt. Vom ISO-Format abgeleitet ist auch der für den Einsatz in Mobiltelefonen optimierte 3GPP-Container. In der IT-Welt findet man außerdem AVI (Audio Video Interleave), Adobes Flash Video (FLV), Microsofts Advanced Systems Format (ASF) sowie die „freien“ Containerformate Matroska und Ogg.

Leider akzeptiert nicht jedes Endgerät alle Formate. Das Android-Smartphone einer Kollegin etwa gibt klaglos H.264-codierte Videos wieder – aber nicht, wenn sie im falschen Container stecken, zum Beispiel in einer AVI-Datei. Ähnliche Schwierigkeiten sind bei Browsern zu erwarten, die das HTML5-Element video unterstützen: Das W3C hat es nicht nur versäumt, sich auf bestimmte Codecs festzulegen, sondern auch die Frage der Verpackung offengelassen. Wer Videodateien im Netz anbietet und möglichst viele Nutzer bedienen will, muss mehrere Versionen bereithalten, selbst wenn er sich auf je einen Audio- und Video-Codec beschränkt.

Da das Umcodieren von Videodaten relativ viel Rechenleistung erfordert und obendrein mit Qualitätsverlusten einhergeht, empfiehlt es sich, lediglich das Containerformat anzupassen. Dazu extrahiert man die Audio- und Videodatenströme und fügt sie neu zusammen. MPEG-2 Transport Streams etwa lassen sich mit Project-X zerlegen, für Program Streams oder AVI-Dateien eignen sich die Programme tcdemux und tcextract aus dem Programmpaket transcode. (De-)Multiplexer für die Formate Matroska und Ogg sind in den Programmpaketen oggvideotools und mkvtoolnix enthalten.

Allerdings hat das Verfahren einen gravierenden Nachteil: Viele Container enthalten Zeitstempel, die es dem Abspieler ermöglichen, Bild und Ton synchron zu halten. Sie gehen beim Demultiplexen in der Regel verloren. Das führt zu einer zeitlichen Verschiebung von Bild und Ton, die mehrere Sekunden betragen und unter Umständen sogar im Laufe der Zeit wachsen kann, etwa durch Rundungsfehler.

Bessere Ergebnisse lassen sich mit einem Programm erzielen, das die Umwandlung in einem Schritt durchführt und dabei auch die Zeitstempel berücksichtigt und umrechnet – MPEG-2-Container etwa verwenden für alle Datenströme eine gemeinsame Uhr, die 90 000-mal in der Sekunde tickt, während Audio und Video in AVI-Dateien separate Zeitbasen mit unterschiedlicher Auflösung besitzen können.

In der Praxis hat sich ffmpeg als geeignetes Instrument erwiesen. Das Schweizer Videomesser kann Videos aufnehmen, umcodieren und transformieren, aber sie auch einfach nur mit einer neuen Verpackung versehen. Dazu muss der Nutzer ihm lediglich mitteilen, dass es die Originaldaten kopieren soll:

ffmpeg -i <eingabedatei> -acodec copy -vcodec copy <ausgabedatei> 

übernimmt die Audio- und Videodaten unverändert in die Ausgabedatei. Wer nur die Tonspur umwandeln will, kann mit –acodec <codec> das gewünschte Format angeben. ffmpeg –codecs zeigt alle unterstützten Codecs an.

Das Format der Eingabedatei sollte ffmpeg automatisch erkennen; falls nicht, kann man ihm mit –f <format> auf die Sprünge helfen. Das Zielformat leitet das Programm aus der Endung der Ausgabedatei ab. Der Nutzer kann jedoch mit –f ein anderes Format erzwingen. Dabei ist zu beachten, dass die Option sich auf die jeweils folgende Datei in der Kommandozeile bezieht: Steht sie vor dem –i, interpretiert ffmpeg ihr Argument als Eingabeformat, andernfalls als Ausgabeformat.

Eine Liste der unterstützten Formate liefert ffmpeg –formats. Fehlt das gesuchte, lohnt es sich unter Umständen, das Programm selbst zu übersetzen. Linux-Distributionen etwa enthalten in der Regel eine eingeschränkte Version des Programms; Grund dafür sind sich widersprechende Lizenzbedingungen für einzelne Komponenten, die das Weitergeben der Vollversion nicht gestatten.

Wer ein Programm mit grafischer Oberfläche bevorzugt, findet eine vergleichbare Funktion beim VLC Media Player: Unter dem Menüpunkt „Konvertieren/Speichern“ bietet das Programm die Möglichkeit, Videodateien in diverse andere Formate zu übersetzen, einschließlich vom Nutzer definierter.

iX-Link: www.ix.de/ix1006151 (mr)