Hi Leute!
Ich habe ein kleines Script geschrieben welches vorhandene MPEG/SVCD/VCD Dateien so umwandelt das sie auf eine Video-DVD gebrannt und im normalen DVD-Standalone-Player angeschaut werden können. Ich stelle es euch hier zur Verfügung falls jemand so etwas braucht.
Mit diesem Script ist es nicht nötig die Videos in DVD-konforme MPEG2 Daten umzuwandeln daher läuft es ziemlich schnell. Es werden nur die Audio-Daten der MPEG/VCD/SVCD Daten auf 48khz hochgerechnet und das geht (vergleichsweise) schnell.
Das Script wandelt um:
- beliebige MPEG1 (inkl. VCD/MVCD), PAL/NTSC, egal in welcher Auflösung
- beliebige MPEG2 (inkl. SVCD/RSVCD/VOB), PAL/NTSC, egal in welcher Auflösung
- kein AVI/ASF!
- kein WMV
- kein MOV (Quicktime)
Die so erstellten DVDs sollten in allen DVD-Playern abspielbar sein in denen sie auch als normale VCD/SVCD abspielbar sind. Es ist sogar möglich MPEG1 (VCD) und MPEG2 (SVCD) Dateien zu mischen und auf ein und dieselbe DVD zu brennen und die MPEG Dateien müssen nicht einmal Standardkonform sein. Es sollte sogar möglich sein PAL und NTSC Dateien auf ein und derselben DVD zu brennen doch habe ich leider keine NTSC Dateien um diese Möglichkeit zu testen.
Es wird dabei kein DVD-Menü erstellt (was aber möglich ist, siehe weiter unten) sondern die Videos werden einfach in der Reihenfolge in der sie dem Script übergeben werden auf der DVD erstellt. Es ist dann nur möglich mit der "Nächster Titel"-Taste auf der DVD-Fernbedienung zum nächsten Video zu springen und beim letzten Video springt man dann dementsprechend wieder auf das Erste.
Anleitung
Damit das Script funktioniert müssen folgende Programme installiert sein:
- mpgtx
- mpg123
- sox
- toolame
- tcmplex (aus den 'transcode' Tools)
- dvdauthor
Hier das Script:
Kopiert den Inhalt dieses Scripts in einer Texteditor und speichert ihn ab, z.B. als "svcd2dvd.sh". Am besten in einen leeren, neu erstellten Ordner. Nehmen wir als Beispiel den Ordner "/home/tux/temp/".Code:#!/bin/sh #This script converts all given mpeg files to dvd-format # #Usage: ./svcd2dvd.sh "file1.mpg" "file2.mpg" "file3.mpeg" ... # #Needed tools: mpgtx, mpg123, sox, toolame, tcmplex (from the 'transcode' tools), dvdauthor if [ -z "$1" ]; then echo "No files given." echo "Usage: ./svcd2dvd.sh \"file1.mpg\" \"file2.mpg\" \"file3.mpeg\" ..." exit 0 fi for p in "$@";do clear echo "${p} demultiplex..." echo "------------------------------------------" mpgtx -d "${p}" mv chunk-0.m1v video mv chunk-0.m2v video clear echo "${p} convert mp2 to wav..." echo "------------------------------------------" mpg123 -w "${p}".wav chunk-0.mp2 clear echo "${p} upsample wav to 48khz..." echo "------------------------------------------" sox "${p}".wav -r 48000 "${p}"48khz.wav resample clear echo "${p} convert 48khz wav back to mp2..." echo "------------------------------------------" toolame "${p}"48khz.wav chunk-0.mp2 clear echo "${p} multiplex video and audio..." echo "------------------------------------------" tcmplex -m d -o "${p}".dvd-format.mpg -i video -p chunk-0.mp2 rm video rm *.mp2 rm *.wav done clear echo "Completed. All \"*.dvd-format.mpg\" files ready for dvdauthor." #Comment the following lines out if you want to create your own dvd-menu with dvdauthor. #You just have to author all generated files with the ending: ".dvd-format.mpg" clear echo "Creating dvd-structure..." echo "------------------------------------------" echo "<dvdauthor>" > dvdauthor.xml echo "<vmgm />" >> dvdauthor.xml echo "<titleset>" >> dvdauthor.xml echo "<titles>" >> dvdauthor.xml iMax=$# i=2 for param in "$@";do echo "<pgc>" >> dvdauthor.xml echo "<vob file=\"${param}.dvd-format.mpg\" />" >> dvdauthor.xml if [ $iMax -eq 1 ];then echo "<post>jump title 1;</post>" >> dvdauthor.xml else iMax=$[$iMax+1] if [ $i -eq $iMax ];then echo "<post>jump title 1;</post>" >> dvdauthor.xml else echo "<post>jump title ${i};</post>" >> dvdauthor.xml i=$[$i+1] iMax=$[$iMax-1] fi fi echo "</pgc>" >> dvdauthor.xml done echo "</titles>" >> dvdauthor.xml echo "</titleset>" >> dvdauthor.xml echo "</dvdauthor>" >> dvdauthor.xml mkdir dvd dvdauthor -o dvd/ -x dvdauthor.xml rm *dvd-format.mpg rm dvdauthor.xml clear echo "Completed. Burn the content of the new \"dvd\"-directory." exit 0
Wechselt nun in die Konsole und gebt folgenden Befehl ein:
Kopiert nun alle MPEG Datein die ihr auf die DVD brennen wollt in diesen, neu erstellten Ordner. Falls ihr keine MPEG Dateien habt, sondern nur VCDs/SVCDs dann könnt ihr auch einfach den Inhalt des Ordners "MPEGAV" (bei VCD) bzw. "MPEG2" (bei SVCD) in den neu erstellten Ordner mit dem Script kopieren. Die Endungen der darin enthaltenen Dateien sind in dem Fall egal, das sind alles MPEG Dateien, auch die ".dat" Dateien von VCDs.Code:chmod 755 /home/tux/temp/svcd2dvd.sh
Bedenkt die Größe der Dateien: Nach der Umrechnung sind die Dateien ca. um 10% größer, da der Audiostrom auf 48khz upgesampelt wird. Also wenn ihr normale 4,5 GB Rohlinge habt, würde ich maximal ca. 4 GB in diesen Ordner zum Umrechnen stellen. (dementsprechend sollte auch noch genug Platz auf der Festplatte sein da während des Umrechnens zusätzliche Dateien erzeugt werden)
Nun startet das Script mit z.B.:
Es werden nun alle Dateien der Reihe nach umgerechnet. Das kann, je nach Größe der Dateien und Geschwindigkeit des PCs schon etwas länger dauern. Ich brauche auf meinem AMD XP1600+ für eine SVCD ca. 10-20 Minuten, je nachdem wieviel ich nebenbei am PC arbeite.Code:./svcd2dvd.sh "Datei 1.mpeg" "Datei 2.mpg" "Datei 3.mpg"
Wenn das Script erfolgreich durchgelaufen ist, befindet sich jetzt in dem Ordner ein weiterer Ordner namens "dvd". Den Inhalt dieses Ordners könnt ihr jetzt einfach auf eine DVD brennen. (z.B. mit K3b) Es empfiehlt sich testweise zuerst DVD-RWs zu benutzen um nicht umsonst teure Rohlinge zu verbraten falls der DVD-Player die so erstellte DVD doch nicht abspielen kann.
Man kann die so erstellte DVD-Struktur auch mit xine testen bevor man sie brennt:
Wenn ihr doch lieber Menüs auf der DVD wollt dann macht folgendes:Code:xine dvd:/home/tux/temp/dvd/
Alle Zeilen nach der Zeile die im Script mit "#Comment the following lines out..." anfängt einfach auskommentieren. (ein "#" Zeichen am Anfang der Zeile setzen) Dann wird kein "dvd"-Verzeichnis erstellt sondern die umgerechneten MPEG Dateien bleiben im Ordner und haben die Endung ".dvd-format.mpg". Diese Dateien lassen sich dann einfach weiterverarbeiten mit DVD-Authoring Programmen wie Q DVD Author oder DVDStyler.
Ich stelle das Script frei zur Verfügung, jeder kann damit machen was er will. Ihr könnt es verändern, kopieren oder auch einfach wieder löschen. Ich übernehme keine Garantie für irgendetwas noch übernehme ich die Verantwortung für entstandene Schäden jedweder Art. Ich habe dieses Script in ein paar Stunden fertig geschrieben und bis jetzt erst sehr wenig getestet, also zur Sicherheit lieber mit Kopien von Dateien arbeiten. (obwohl die Original-Dateien eigentlich nicht verändert werden)
Falls ihr Vorschläge habt wie man das Script verbessern könnte, nur zu, ich würde mich über Anregungen sehr freuen. Vor allem würde ich es noch gern hinkriegen das das Umrechnen der Audio Daten über Pipes funktioniert und keine .wav Dateien erzeugt werden müssen. Dadurch würde es noch schneller laufen. Ich hab es aber bisher nicht geschafft "sox" dazu zu kriegen über /dev/stdin im .wav Format zu lesen.
Ich habe nach einer Möglichkeit gesucht meine VCDs/SVCDs mit Linux auf DVD zu brennen, habe aber keine (einfache) Möglichkeit gefunden, deshalb dieses Script. Falls jemand etwas kennt mit dem das noch einfacher geht: Bitte melden! (dann war es eben nur ein bisschen Übung in bash-Programmierung )
Ok, das wars, viel Spaß damit und ich bitte um Feedback!
MfG
Darko
Lesezeichen