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 on : DVB MPEG-TS nach AVI konvertieren (Teil 2)

Continue reading "DVB MPEG-TS nach AVI konvertieren (Teil 2)"
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

Comments

Display comments as Linear | Threaded

peter

peter on :

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

Add Comment

E-Mail addresses will not be displayed and will only be used for E-Mail notifications.
This blog allows you to add audio comments using audioboo.fm. Create a new boo and enter the link to the page into the boo field.
record
If you enter your twitter name, your timeline will get linked to your comment.
Promote one of your rescent articles
This blog allows you to announce one of your recent blog articles with your comment. Please enter your the corresponding URL as homepage and a selection box will pop up letting you choose an article.
Standard emoticons like :-) and ;-) are converted to images.