MPEG2 Demuxer in Java |
1. Demuxer - was ist das und warum braucht man sowas? |
2. MPEG2 PES Demuxer in Java |
3. Download des Java Demuxers (Neue Version 1.2!) |
4. Links zum Thema MPEG2 |
MPEG-Dateien (oder Streams) enthalten Daten, die unterschiedliche Arten von Informationen enthalten; z.B. Video-Daten, Audio-Daten (evtl. in mehreren Sprachen), Untertitel etc. Diese Information werden jeweils in Blöcke (Packets) unterteilt. Da für das korrekte Abspielen so einer Audio oder Video-Datei die passenden Blöcke zum korrekten Zeitpunkt vorliegen müssen, ist es nötig, diese Blöcke in geeigneter Weise anzuordnen. Der Fachjargon nennt man das "Multiplexen".
Das Format in dem die VDR-Software Aufzeichnungen ablegt wird als MPEG2-PES-Stream bezeichnet. PES steht für "packetized elementary stream". Diese Format lässt sich direkt nur mit wenigen Programmen abspielen. Wer sich für den Aufbau so eines Streams interessiert, sollte die unten aufgeführten Links besuchen. Da ich mir VDR-Aufnahmen auch mal für spätere Zwecke aufheben und evtl. auf DVD/CD brennen möchte, suchte ich nach Software, mit der sich diese PES-Streams in geeigneter Weise umwandeln lassen. Der Vorgang, bestimmte Packete, die eine bestimmte Art von Information enthalten, als eigene Datei zu schreiben (oder anders zu verarbeiten), bezeichnet man als "Demultiplexen".
Im Konkreten-Fall sollte der MPEG2-PES-Stream in einen "MPEG2 Program Stream" umgewandelt werden. Solche Dateien können dann z.B. direkt von MPlayer, "Windows-Media-Player" abgespielt werden oder sehr einfach als Video-DVD gebrannt werden.
Doch diese Umwandlung stellte sich als etwas problematisch heraus. Nach längerem Herumprobieren fand ich zwei Programme, die diese Aufgabe erledigten: PVA-Strumento und Project-X (ehemals DS.JAR). Beide hatten aber für meine Zwecke entscheidende Nachteile: PVA-Strumento war eine Windows-Anwendung, die nur mit größeren Problemen (Windows Emulation) unter Linux zu betreiben war. Project-X war zwar in Java geschrieben, benötigte aber eine grafische Oberfläche (d.h. X-Windows). Es soll zwar mit einigen Tricks auch ohne eine X-Server möglich sein es zu betreiben, aber das schien mir auch ziemlich "hacky".
Zuerst versuchte ich aus Project-X die Anbindung an die graphische Oberfläche zu entfernen, bedingt durch den Programmier-Stil des Authors fand ich mich aber in dem Source-Code nicht zurecht. Also ließ ich diese Idee wieder fallen und sagt mir: "das geht wohl schneller, wenn Du es selbst machst".
Zuerst machte ich mich auf die Suche nach Dokumentation zu MPEG-Streams und nach ca. einer Woche hatte ich eine erste Version fertig gestellt.
Wer den Demuxer ausprobieren will, kann sich meine Version herunterladen und sich noch bei Bedarf das aktuelle Java Runtime Environment (JRE) oder SDK besorgen. (Java @ Sun.com). Nach dem Entpacken des Archivs erhält man den kompletten Source-Code (*.java) sowie eine JAR Datei.
Der Aufruf des Demuxers funktioniert so:
java -jar demuxer.jar -iInputfile,[Inputfile] [-vVideoOutFile] [-aAudioOutFile]
Wird nur ein Input-File angegeben, erhält man eine kurze Information über das Format der Input-Datei. Werden mehrere Input-Files angegeben, so wird dies als zusammengehöriger Film gesehen und die Input-Files in EINE Video/Audio Datei konvertiert. Wird nur eine Output-Variante (nur Video oder nur Audio) benötigt, kann die andere Option einfach weggelassen werden.
Am Ende der Konversion wird die Delay-Zeit zwischen dem Video- und Audio-Stream ausgegeben. Dies ist wichtig für ein erfolgreiches Remultiplexen der beiden Streams. Für das Erzeugen eines entsprechenden MPEG2 Program Stream benutze ich derzeit das Tool mplex aus den mjpegtools.
Der Remultiplex funktioniert dann so:
mplex [-O AV-Delay] -o ProgramStreamFile.mpg VideoOutFile AudioOutFile
Die so entstandene MPG-Datei lässt sich dann mit allen gängigen Videoprogrammen abspielen und eignet sich auch als Grundlage für DVD-Author.
Über Bugs und sonstige Rückmeldungen zu meinem Tool würde ich mich freuen. Die Nutzung der Software geschieht auf eigene Gefahr. Jegliche Ansprüche auf Gewährleistung oder Schadenersatz sind hiermit ausgeschlossen. Nutzung und Verbreitung meiner Software ist an die GPL Richtlinien gebunden.
Abschließen möchte ich noch Andrew Duncan meinen Dank ausprechen. Er hat auf seiner Internet-Seite das MPEG2 Format gut aufbereitet, was das Verständnis sehr erleichert hat.
Bekannte Probleme/Bugs:
Mathieu @ GNU.ORG Weitere Link zum Thema MPEG
MJPEG-Tools Konvertierungstools für MPEG Formate
MPEG Audio Format Beschreibung
Howto zum Erstellen von DVDs unter Linux
Zurück zur Projekt-Seite
Schreiben Sie Ihre Anmerkungen oder Kritik doch in mein Gästebuch
Erstellt von A.Rosenberg am 17.10.2003 - Letzter Update am 06.03.2004
Diese Seite wurde seit dem 17.10.2003 mal abgerufen.