Skip to content

DVB MPEG-TS nach AVI konvertieren (Teil 1)

Der Fantec MM-HDRTV speichert seine Aufnahmen in Dateien mit der Endung TS. Wenn ich alles richtig verstanden habe, ist dies der direkte Stream, den DVB-T schickt , das MPEG-TS Format. Dieses benutzen offenbar die meisten DVB-T und DVB-S Recorder zum Speichern ihrer Aufnahmen. Das Format ist allerdings relativ schlecht auf dem PC zu benutzen. Es gibt dafür auch Player, allerdings wird DivX AVI von deutlich mehr Standalone Playern abgespielt. Somit suchte ich eine Möglichkeit, diese Dateien zu transcodieren.

Zum Schneiden und umkodieren meiner Video Dateien (z.B. die über OTR bezogenen) benutze ich Avidemux, ein tolles unter Linux, Windows und Mac verfügbares Tool für diesen Zweck, vergleichbar mit VirtuaDub unter Windows. Hier gingen meine Probleme leider schon los: Avidemux kann mit vielen der aufgenommenen TS Dateien nicht richtig umgehen, kann das Seitenverhältnis nicht bestimmen, teilweise können Dateien gar nicht geöffnet werden usw. Hier muss also noch Hand angelgt werden..

Der TS Stream ist ein roher Stream mit allen Übertragungsfehlern. Avidemux bekommt genau deshalb Probleme damit. Dateien, die ich öffnen und in ihnen Werbeunterbrechungen schneiden konnte, waren nachher out of sync, der Ton passte nicht mehr zum Bild. Die TS Datei muss also erst einmal "gesäubert" werden.

MPEG-TS säubern

Um die Datei zu korrigieren, nimmt man am besten Project-X, eine DVB Demux Tool. Project-X ist in Java geschrieben, somit auf nahezu allen Plattformen lauffähig. Für Ubuntu findet man sogar ein Paket im universe Archiv. Zum installieren einfach folgendes in die Kommandozeile eingeben:

sudo apt-get install project-x 

Der erste Aufruf von projectx war bei mir nicht von Erfolg gekrönt:

user@laptop:~$ projectx 
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

Das liegt daran, dass bei mir eine Java 1.5 Runtime am laufen war, die Project-X Anwendung aus dem Paket aber mit Java 1.6 compiliert ist. Falls Java noch gar nicht installiert sein sollte, kann das mit folgendem Befehl nachgeholt werden:

sudo apt-get install  sun-java6-jre

Wenn, wie in meinem Fall, mehrere Runtimes installiert sind, aber die falsche als Standard RTE ausgewählt ist, muss man nun die Java6 RTE als Standard JRE anwählen:

sudo update-java-alternatives -s java-6-sun

Danach sollte projectx von der Kommandozeile starten. Ohne Parameter öffenet es eine Oberfläche, in der man bereits das Video schneiden kann, diese ist mir persönlich allerdings etwas zu unhandlich, ich bevorzuge Avedemux dafür. Also benutze ich Project-X nur zum Umwandeln der MPEG-TS Datei in eine für Avidemux brauchbare MPEG Datei. Das geht angenehmer Weise direkt über die Kommandozeile, somit kann man sich hierfür ein allgemein gültiges Script bauen.

Nehmen wir an, dass die Aufnahmedatei 01.ts heißt, so starten wir nun auf der Kommandozeile:

projectx 01.ts

Project-X versorgt uns mit einigen Ausgaben, danach beendet es und hinterlässt mehrere Dateien:

  1. 01.m2v: Die Videodatei ohne Ton
  2. 01.mp2: Die Stereo Tonspur
  3. 01.ac3: Die Surround Tonspur, so eine vorhanden.

Project-X hat nun also das Video in die einzelne Spuren aufgeteilt, wobei es allerdings diese gleich gesyncht hat und das ist genau das, was wir wollten. Nun können wir die 2-3 Dateien wieder zu einer komplette MPEG Video Datei zusammen führen, die dann problemlos von Avidemux erkannt und bearbeitet werden kann:

mplex -f 8 -o output_file.mpg 01.ac3 01.m2v 01.mp2

Falls man mplex unter Ubuntu noch nicht installiert hat, so sagt einem Ubuntu wie meistens selbst, wie dies nachgeholt werden kann. Hat man keine ac3 Datei erhalten oder möchte keinen Surround Sound mit in das MPEG speichern, lässt man diese einfach auf der Kommandozeile weg. Voila: Als Resultat hat man nun eine Datei namens output_file.mpg, die korrekt gesyncht ist und von Videobearbeitungsprogrammen wie Avidemux problemlos gelesen werden kann.

Als nächstes beschreibe ich, wie man aus dieser mpeg Datei eine DivX AVI Datei macht und wie man sie deinterlaced. Dazu schreibe ich einen Teil 2 dieses Tutorials. Also schaut wieder rein. :-D

(Hauptquelle dieses Artikels: Avidemux Wiki)

Update: Ich habe mir ein kleines bash script dafür gemacht, das ich als ts2mpeg in meinem Sciptverzeichnis hinterlegt habe:

#!/bin/bash

# Parameter 1: TS file

DIR=$(dirname $1)
FILENAME=$(basename $1)
NAME=`echo "$FILENAME" | cut -d'.' -f1`

projectx $1

if [ -f "$DIR/$NAME.ac3" ]
then
mplex -f 8 -o $DIR/$NAME.mpg $DIR/$NAME.ac3 $DIR/$NAME.m2v $DIR/$NAME.mp2
rm $DIR/$NAME.ac3
else
mplex -f 8 -o $DIR/$NAME.mpg $DIR/$NAME.m2v $DIR/$NAME.mp2
fi

rm $DIR/$NAME.m2v
rm $DIR/$NAME.mp2
rm $DIR/"$NAME"_log.txt

Es wird mit der TS Datei als einzigem Parameter aufgerufen und erzeugt eine fertige mpg Datei.

Trackbacks

blog.brockha.us

blog.brockha.us am : DVB MPEG-TS nach AVI konvertieren (Teil 2)

"DVB MPEG-TS nach AVI konvertieren (Teil 2)" vollständig lesen
Im ersten Teil dieses Mini Tutorials wurde aus der TS Datei, die der DVB-T Recorder produziert hat, eine benutzbare MPEG Video Datei erzeugt. Der Name der Datei war output_file.mpg. Nun soll diese nach DivX AVI transkodiert werden, wobei gleich das

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

peter

peter am :

mit weiterem audio-kanal und unterstützung für punkt und leerzeichen im dateinamen:

#!/bin/bash

# Parameter 1: TS file

DIR=$(dirname "$1")

FILENAME=$(basename "$1")

NAME=`perl -e '@a=split(/\./,join(" ",@ARGV));pop @a;print join(".",@a)."\n"' $FILENAME`

FILE=$DIR/$NAME

if [ ! -f "$1" ]; then

echo file does not exist: "$1"

exit 1

fi

projectx "$1"

if [ -f "$FILE.ac3" ]; then

mplex -f 8 -o "$FILE.mpg" "$FILE.ac3" "$FILE.m2v" "$FILE.mp2"

rm "$FILE.ac3"

else

if [ -f "$FILE[1].mp2" ]; then

mplex -f 8 -o "$FILE.mpg" "$FILE.m2v" "$FILE.mp2" "$FILE[1].mp2"

else

mplex -f 8 -o "$FILE.mpg" "$FILE.m2v" "$FILE.mp2"

fi

fi

rm "$FILE.m2v"

rm "$FILE.mp2"

rm "$FILE"_log.txt

if [ -f "$FILE[1].mp2" ]; then

rm "$FILE[1].mp2"

fi

Felix Griewald

Felix Griewald Auf Twitter lesen: am :

Mir hat dein Artikel zumindest teilweise geholfen. Allerdings funktioniert bei mir das Demuxen mit ProjectX nicht (ich hab festgestellt, mein Rekorder erstellt M2TS Dateien) Dafür nutze ich das Programm tsMuxeR, allerdings auch hier gibt es Probleme mit HD-Aufnahmen, SD-Aufnahmen lassen sich aber ohne Probleme demuxen. Dort zeigt er außerdem die Verschiebung der jeweiligen Tonspuren an.

PS: Gibt es eigentlich mittlerweile freie Tools (für Linux bzw. Ubuntu), die auch HD-Inhalte demuxen können? Ich habe bisher nichts gefunden...

Felix Griewald schrieb auch: SparkleShare selbst kompilieren

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Dieses Blog erlaubt Dir, Audio Kommentare über audioboo.fm hinzuzufügen. Erstelle einen neuen Boo und gib hier den Link auf die Seite Deines Boos ein.
record
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
(Bedingung: 1 Kommentare geschrieben)
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
tweetbackcheck