Es gibt sicherlich viele Wege die nach Rom führen und auch ebenso viele Wege, die zu einer mehr oder weniger perfekten Super Video CD (SVCD) führen. Viele Leute habe schon diverse Programme und Scripte entwickelt, um dies immer beliebtere Format nutzbar zu machen. Es gibt auch eine ganze Anzahl von kommerziellen Programmen (Nero, ...) oder auch Freeware/OpenSource (VCDImagerEasy, ...), die versuchen dieses Problem über ein ausgefeiltes GUI vor dem Anwender zu verbergen.
Um jedoch die vielen aufgenommene Filme aus dem hervorragenden VDR (Klaus Schmidinger u.a.) halbwegs automatisch und ohne viele Eingriffe von außen auf CD zu brennen bedarf es einer ganzen Anzahl von Einzelschritten, die schon gut durch Programme oder Scripten (Perl, Shell, ...) abgedeckt sind. Wenn man dann allerdings noch zusätzliche Wünsche hat oder nicht immer im Sinne des jeweiligen Programmierers von den Kodeschnipzeln Gebrauch machen will gibt es immer wieder Brüche im Ablauf, welche dann durch eigenes Programmieren und Scripting ausgewetzt werden müssen.
Vor diesem Problem stand ich, und wie man anhand der immer wieder gestellten Fragen in der VDR Maillist sehen kann, andere wohl auch. Um nun nicht immer nur von anderen zu profitieren und nichts selbst beizutragen, habe ich mich mal dieses Problems angenommen und einen kompletten Weg für mich entwickelt, den ich hier vorstellen möchte und anhand der von mir geschriebenen Scripten gerne mit anderen teile.
Mein VDR besteht aus:
ASUS A7VI-VM 800MHz Duron und 128MB Ram
10GByte für Linux (z.Z. Suse 8.0) (/)
30GByte für SVCD-Images (/mpeg)
120GByte XFS (/video)
1xDVB-S V1.3 (Galaxy)
Mein Brenner ist in meiner W2k/Linux(Debian Woody)-Workstation (750MHz Athlon), wo noch mehr GBytes vorhanden sind.
Netzwerk ist 100Mbit
Grundsätzlich sollte es also möglich sein die Umwandlung vom VDR Format ins SVCD Format und das anschließende Zusammenstellen und Brennen der Videos auf CD zwischen diesen beiden Systemen aufzuteilen. Hierbei ist zu beachten, daß die zeit- und rechenaufwändigen Schritte an dem System gemacht werden sollten, welches nicht dauernd von den anderen Familienmitgliedern für allerlei Interaktives mit häufigerem Reboot und soweiter benutzt wird. Der langwierigste Schritt ist immer die Umrechnung vom VDR Format ins SVCD Format mit anschließendem Erstellen der SVCD-Images. Dies lasse ich also auf dem VDR System im Hintergrund abarbeiten. Das anschließende Brennen mache ich dann auf dem W2k/Linux System unter Linux(sofern mich meine Leute lassen). Hier ist auch der Brenner angeschlossen.
Vielen Leuten auf der VDR Mailinglist reicht es, die VDR Files nur von dem Werbemüll zu bereinigen um dann alles mit der höchstmöglichen Packungsdichte auf die SVCD oder ein anderes Format (DVD od. Divx) zu bringen. Dabei wird dann die CD vollgeschrieben und die nächste angefangen ohne auf Scenenwechsel oder Dialoge zu achten. Das mag gut sein, wenn man hinterher die Files wieder zurückkopiert und wieder als Ganzes anschaut. Die ersten Schnittversionen von Klaus ließen dann auch immer nur feste Filegrößen zu. Ich habe Ihn damals gefragt ob man nicht auch die Schnittgrenzen als Filegrenzen nehmen könnte und er hat dann diese Möglichkeit eingebaut (SplitEditedFiles = 1).
Meine SVCDs sollen also an logischen (Szene) Grenzen enden. Außerdem möchte ich meine SVCDs möglichst auch in einem Standart DVD Player laufen lassen. Also wird die SVCD auch gewechselt (übrigens ein guter Zeitpunkt um neues Bier zu holen). Und da ich nun schon nicht mehr der junge Springer bin würde ich schon mal den ersten Halbsatz vergessen, wenn der Schnitt nicht an einer sinnvollen Stelle gemacht wird.
Also, der Wunsch besteht hier nach einer möglichst Standardkonformen SVCD. Aber man kann ja nicht alles haben. Da ich tosvcd (von Werner Schweer) benutze zum Umwandeln von VDR Format ins SVCD Format mit allen dahinter geschalteten tools (MJPEG, ...) muß ich, wie auch Werner, auf einen standardgemäßen Ton verzichten. Die 48kHz frißt mein DVD Player aber klaglos und ich hoffe, daß auch spätere Geräte dies noch können (aber vieleicht kopieren wir später sowieso alles auf eine TESA Rolle oder auf einen BioSpeicher, sprich Misthaufen).
Was ich nun noch gerne haben wollte ist ein vernünftiges Menu, in dem ich die meistens hervorragende Information von www.tvtv.de (epg2timer) zu einem Film unterbringen könnte. Als summary.vdr liegt sie ja als Text vor. Und auch die EPG Infos könnten ja verwendet werden (wenn die Sender das endlich mal gebacken kriegen).
Da ich bei meinen allerersten Brennversuchen einer SVCD und verschiedenen Windows Tools manchmal Probleme mit dem Start und dem Ende einer SVCD hatte, besonders als ich sie noch direkt mit dem SVCD Patch (erste Versionen) abgespielt habe, starte ich jede CD mit einem kurzen Vorspann Movie und beende sie auch mit etwas ähnlichem.
Hier folgt nun eine kurze Ablaufbeschreibung der gesamten Schritte. Die Details können dann aus den Kommentaren der beiden angefügten Scripten entnommen werden. Die Kommentare sind in "simple english" gehalten, damit auch unsere Freunde aus dem englischsprachigem Ausland etwas damit anfangen können.
Fett gedruckt sind die Automatischen Schritte mit meinen Scripten
Das reine Brennen wird nun wieder durch ein Script (cdrdaobatch.sh) auf meiner W2K/Linux Workstation unter Debian gesteuert. Dies ist allerdings ein nur halbautomatischer Vorgang da ich keinen CD Wechsler zum Brennen habe sondern immer noch den Discjockey spielen muß. Hier habe ich per Samba das /mpeg Verzeichnis gemounted (Samba - weil ich auch von W2K auf dies Verzeichnis zugreife).
Für das Erstellen des toconvert.txt files benutze ich ein kleines Shell Script:
todolist.sh
#!/bin/bash
#set -x TODOLIST=/video/toconvert.txt[ `echo $1 >> ${TODOLIST}` ] && echo "Fehler mit der TODOLIST ${TODOLIST}!!!"
Dies wird mit dem "-Z" parameter im runvdr script bei Aufruf von VDR mit übergeben. Sollte aus irgendeinem Grund kein Eintrag in die ToDoList vorgenommen werden können (echo Command schlägt fehl) wird eine Fehlermeldung auf der Konsole ausgegeben.
Das Script svcd.sh wird nicht direkt aus der commands.conf aufgerufen sondern aus einem weiteren kleinen script:
tosvcd.sh
#!/bin/bash
#set -x
nice -n 19 /usr/local/bin/svcd.sh
In meiner commands.conf sind dann folgende Einträge für die Umwandlung von Bedeutung:
commands.conf
run conversion : if [ `ps -ef | grep -e "/svcd.sh"| grep -c -v grep` -eq 0 ];then at now -f /usr/local/bin/tosvcd.sh && echo "conversion gestartet";else echo "Läuft schon";fi
status conversion : [ -f /mpeg/status ] && cat /mpeg/status; [ -f /mpeg/TOSVCD.log ] && cat /mpeg/TOSVCD.log |tr "\r" "\n"|tail -1
view jobs : cat /video/toconvert.txt|cut -c1-38
clear jobs : rm -f /video/toconvert.txt && echo "clean"
list /mpeg : cd /mpeg; du -sk */*.mpg |cut -c1-38
Der Status der Conversion wird über zwei Logfiles festgestellt. Das Statusfile enthällt nur Meldungen über den groben Ablauf, während TOSVCD.log auch alle Details über die Umwandlung enthällt. Hier interessiert mich aber eigentlich nur die Zeit der eigentlichen Blöcke. Darum wird nur der letzte Eintrag angezeigt.
Hier noch ein kleiner Tip für Leute, die das NVRAM WAKEUP Programm benutzen:
Während der Umwandlung mit externen Scripten weiß natürlich VDR nichts von dem was so ein Rechner gerade treibt. Daher sollte der automatische shutdown nach der inactivity Zeit vermieden werden. Ich mache das auf diese Weise:
vdrshutdown.sh
#!/bin/bash
#set -x
# $Id: vdrshutdown,v 1.10 2002/03/15 22:25:38 bistr-o-math Exp $if [ `ps -ef | grep svcd.sh | grep -c -v grep` -eq 0 ] then/sbin/hwclock_wrapper --systohc NVRAMCMD=/usr/local/bin/nvram-wakeup $NVRAMCMD -ls $1 case $PIPESTATUS in 0) # all went ok - new date and time set shutdown -h now EXITSTATUS=0 ;; 1) # all went ok - new date and time set. # # *** but we need to reboot. *** # # for some boards this is needed after every change. # # for some other boards, we only need this after changing the # status flag, i.e. from enabled to disabled or the other way. # For plan A (see README file for more details) - uncomment # the touch line (don't forget to change your boot script) # and comment out the lilo line # # For plan B - uncomment the lilo line and comment out the touch line # (don't forget to install the modified kernel image first) # # touch /nvramboot lilo -R PowerOff shutdown -r now EXITSTATUS=0 ;; 2) # something went wrong # don't do anything - just exit with status 1 EXITSTATUS=1 ;; esacelse echo `date`">>>>>>>>> no shutdown - svcd.sh ist active <<<<<<<<<">>/var/log/messages EXITSTATUS=1 fi# exit with 0 if everything went ok. # exit with 1 if something went wrong exit $EXITSTATUS
| vdcimager | http://www.vcdimager.org/ |
| tosvcd | http://muse.seh.de/tosvcd/ |
| netpbm | http://sourceforge.net/projects/netpbm/ |
| cdrdao | http://cdrdao.sourceforge.net/ |
Alles andere an Software (z.B. mjpegtools...) muß dann mit der jeweiligen Software mitgeladen werden. Hier hilft bestimmt wieder die Beschreibung von Hubertus Sandmann (http://home.t-online.de/home/hubertus.sandmann) und natürlich das VDR-Portal (http://www.vdrportal.de).
alle, die an VDR mitgearbeitet haben (bes. Klaus Schmidinger) und an alle, die Patches und Plugins und viele gute Ideen beigesteuert haben.
Und für die guten Ideen und Beschreibungen von Stefan
Uchrin (edv-tip) und Tony (TJW)
(Tip von Jürgen Hahn) natürlich auch.
| Version 1.0 | 15.09.2002 | erste Version |
| Version 1.1 | 06.10.2002 |
bessere Logfiles für svcd.sh |
| Version 1.2 | 13.10.2002 | English translation |
| Version 2.0 | 07.09.2003 | Integration der Imageerzeugung in svcd.sh |