OK, ihr habt es so gewollt!
Die Version geht schon irgendwie, aber zu ausgiebigen Tests bin ich noch nicht gekommen! Ich veröffentliche auch nur, damit ihr euch mal das Ganze ansehen könnt und mir bei evt. Fehlersuche helfen könnt! Bisher hab ich alles nur unter Linvdr getestet und daher in dem Archiv auch nur für Linvdr compilierte Binaries bei. Wer auf andern Platformen testen will muß sich die Tools selber hinzufügen (also vobcopy usw). Ich kann für die Fehlerfrei Funktion keine Garantie übernehmen, aber es sollte auch ungefährlich sein, die Scripte zu benutzen/testen!
Voraussetzung unter Linvdr sind die aktuellen Tarandor-Libs und das DVDSwitch 0.1.1. Alternativ kann man das script auch in der Komando-Zeile ausführen (dabei muß man allerdings beachten das nicht $3 den Pfad zum DVD-Mount-Point beinhaltet, sondern $4 (also wird $3 ignoriert!)!
Hie mal zwei der Zentralen Scripte:
#Extended DVD-Rip-Script by Toxic-Tonic
#
#You will need vobread for this (lpn.rnbhq.org/download)
#
#2006-02-20 The Beginning (first Beta)
#
#!/bin/bash
CONFFILE="/etc/vdr/plugins/dvdswitch/ext_dvdread/extended_dvdread.conf"
if [ -e $CONFFILE ]; then
source $CONFFILE
if [ ! "$DVDPATH" ]; then DVDPATH="/mnt/dvd"
fi
#Wenn keine Parameter übergeben werden, dann Hilfe
if [ -z $ISOPATH ]; then
echo
echo "Bitte Folgende Parameter angeben:"
echo
echo "extended_dvdrip.sh Iso-Pfad Iso-Name DVD-Mountpoint"
echo
echo "Iso-Pfad - Pfad für das fertige Iso"
echo "Iso-Name - Name für die Iso-Datei (ohne .iso)"
echo "DVD-Mountpoint - Der Pfad zum DVD-LW-Mountpoint (z.B. /mnt/dvd)"
echo
echo "Das Script ist eigentlich für die Einbindung in das DVDSwitch-Plugin gedacht!"
#...sonst
else
svdrpsend.pl MESG "DVD-RIP wird gestartet..."
#Video-DVD vorhanden?
mount $DVDPATH
if [ -e $DVDPATH/VIDEO_TS -o -e $DVDPATH/video_ts ]; then
#Größe prüfen...
DVDSIZE=$[$(du -c $DVDPATH|tail -n1|awk '{print $1}')/1024]
rm $TMPPATH/$DVDNAME.sh
rm $TMPPATH/dvd-$DVDNAME.log
#Wenn kleiner DVD+-R dann 1:1 sonst reqantisieren!
if [ $DVDSIZE -le $DVDRSIZE ]; then
echo "#!/bin/sh">>$TMPPATH/$DVDNAME.sh
echo "bash rip_norequant.sh $ISOPATH $DVDNAME $DVDPATH $TMPPATH $FORMAT &>$TMPPATH/dvd-$DVDNAME.log">>$TMPPATH/$DVDNAME.sh
chmod 777 $TMPPATH/$DVDNAME.sh
at now -f $TMPPATH/$DVDNAME.sh
else
echo "#!/bin/sh">>$TMPPATH/$DVDNAME.sh
echo "bash rip_requant.sh $ISOPATH $DVDNAME $DVDPATH $TMPPATH $DVDRSIZE $ENAUDIO $XMLROOT $MINVOBSIZE $FORMAT &>$TMPPATH/dvd-$DVDNAME.log">>$TMPPATH/$DVDNAME.sh
chmod 777 $TMPPATH/$DVDNAME.sh
at now -f $TMPPATH/$DVDNAME.sh
fi
else
svdrpsend.pl MESG "Keine Video-DVD erkannt!"
umount $DVDPATH
eject $DVDPATH
fi
fi
else
svdrpsend.pl MESG "Abbruch wegen fehlender Konfigurationsdatei!"
fi
Alles anzeigen
#Extended DVD-Rip-Script by Toxic-Tonic
#
#You will need vobread for this (lpn.rnbhq.org/download)
#
#2006-02-20 The Beginning (first Beta)
#
#!/bin/bash
ISOPATH="$1"
DVDNAME="$2"
DVDPATH="$3"
TMPPATH="$4"
DVDRSIZE="$5"
ENAUDIO="$6"
XMLROOT="$7"
MINVOBSIZE="$8"
FORMAT="$9"
RDVDNAME=`volname|cut -d " " -f 1`
#Vorbereiten damit keine Dateien durcheinander kommen
rm -r $TMPPATH/$RDVDNAME
mkdir $TMPPATH/$RDVDNAME
cd $TMPPATH/$RDVDNAME
#DVD komplett auslesen
dvdunauthor $DVDPATH
#Audio-ID der deutschen und der enlischen Tonspur ermitteln (Priorität AC3, Stereo, Mono)
DEASP=`mplayer dvd:// -v -frames 0 2>/dev/null|grep "audio stream:"|grep "language: de"|grep "ac3"|awk '{print $12}'`
if [ -z "$DEASP" ]; then DEASP=`mplayer dvd:// -v -frames 0 2>/dev/null|grep "audio stream:"|grep "language: de"|grep "stereo"|awk '{print $12}'`
fi
if [ -z "$DEASP" ]; then DEASP=`mplayer dvd:// -v -frames 0 2>/dev/null|grep "audio stream:"|grep "language: de"|grep "mono"|awk '{print $12}'`
fi
if [ "$ENAUDIO" -eq "1" ]; then
ENASP=`mplayer dvd:// -v -frames 0 2>/dev/null|grep "audio stream:"|grep "language: en"|grep "ac3"|awk '{print $12}'`
if [ -z "$ENASP" ]; then ENASP=`mplayer dvd:// -v -frames 0 2>/dev/null|grep "audio stream:"|grep "language: en"|grep "stereo"|awk '{print $12}'`
fi
if [ -z "$ENASP" ]; then ENASP=`mplayer dvd:// -v -frames 0 2>/dev/null|grep "audio stream:"|grep "language: en"|grep "mono"|awk '{print $12}'`
fi
fi
#DVD-Laufwerk wieder freigeben
umount $DVDPATH
eject $DVDPATH
#Menü-VOBs löschen
rm *m.vob
#Die XML-Datei für DVDAuthor wird angefangen
while read LINE; do
echo "$LINE">>$RDVDNAME.xml
done<$XMLROOT/dvd-head.xml
#VOBs kleiner MINVOBSIZE werden gelöscht, außer sie gehören zum vorherigen Track (zur Sicherheit).
#Gegebenenfalls den Wert verringern oder erhöhen um alle Tracks zu erhalten oder zu entfernen!
while read NAME; do
VTSIZE=$[$(ls -l "$NAME"|awk '{ print $5 }')/1024/1024]
THISVOB=`echo $NAME|cut -c 1-6`
if [ "$LASTVOB" == "$THISVOB" ]; then
VOBSIZE=$[$VOBSIZE+$VTSIZE]
LASTVOB=$THISVOB
else
if [ "$VTSIZE" -le "$MINVOBSIZE" ]; then rm $NAME
else
VOBSIZE=$[$VOBSIZE+$VTSIZE]
LASTVOB=$THISVOB
fi
fi
done< <(ls *t.vob)
#Requantisierungs-Faktor wird berechnet
REQFACT=$(echo $VOBSIZE/$DVDRSIZE|bc -l|cut -c 1-6)
#Der TrackCount wird auf 2 gesetzt, damit der post-tag für den Sprung richtig berechnet wird
TRACKCOUNT="2"
#Alle übergebliebenen VOBs demuxen, requantisieren und remuxen
while read NAME; do
#Deutsche Spur demuxen
if [ -n "$DEASP" ]; then
mplayer -vo null -aid $DEASP -dumpaudio -dumpfile tmp_$NAME-de.mp2 $NAME
if [ ! -s tmp_$NAME-de.mp2 ]; then rm tmp_$NAME-de.mp2
fi
fi
#Englische Spur demuxen
if [ -n "$ENASP" ]; then
mplayer -vo null -aid $ENASP -dumpaudio -dumpfile tmp_$NAME-en.mp2 $NAME
if [ ! -s tmp_$NAME-en.mp2 ]; then rm tmp_$NAME-en.mp2
fi
fi
#Wenn beide Tonspur leer sind, testet er die Tonspur 0
if [ ! -e tmp_$NAME-de.mp2 -a ! -e tmp_$NAME-en.mp2 ]; then
mplayer -vo null -aid 0 -dumpaudio -dumpfile tmp_$NAME-de.mp2 $NAME
if [ ! -s tmp_$NAME-de.mp2 ]; then rm tmp_$NAME-de.mp2
fi
fi
#Wenn dann wenigstens eine Spur vorhanden ist folgt requant, remux
#und in XML-Datei schreiben
if [ -e tmp_$NAME-de.mp2 -o -e tmp_$NAME-en.mp2 ]; then
mpeg2desc -v0 -s <$NAME|requant $REQFACT >tmp_$NAME.m2v
rm $NAME
mplex -f 8 -o $NAME tmp_$NAME.m2v tmp_$NAME*.mp2
CHAPTERS=`rip_chapterextract.sh dvdauthor.xml $NAME`
echo "<vob file=\"$NAME\" chapters=\"$CHAPTERS\" />">>$RDVDNAME.xml
echo "<post> jump title $TRACKCOUNT; </post>">>$RDVDNAME.xml
TRACKCOUNT=$[$TRACKCOUNT+1]
while read LINE; do
echo "$LINE">>$RDVDNAME.xml
done<$XMLROOT/dvd-nexttrack.xml
rm tmp_$NAME*.m2v
rm tmp_$NAME*.mp2
else
#Sonst gehört die Datei nicht zu den Hauptfilmen (oder ist ein Stumm-Film ;-))
#und wird gelöscht!
rm $NAME
fi
done< <(ls *t.vob)
#XML-Datei abschließen
while read LINE; do
echo "$LINE">>$RDVDNAME.xml
done<$XMLROOT/dvd-tail.xml
#DVD authorn
mkdir $TMPPATH/$RDVDNAME/DVDAUTHOR
dvdauthor -o $TMPPATH/$RDVDNAME/DVDAUTHOR -x $RDVDNAME.xml
#Aufräumen
rm $TMPPATH/$RDVDNAME/*.vob
#ISO erstellen wenn das Authorn soweit geklappt hat
if [ -e $TMPPATH/$RDVDNAME/DVDAUTHOR/VIDEO_TS/VIDEO_TS.IFO -a ! -e $ISOPATH/$DVDNAME ]; then
case $FORMAT in
1)
mkisofs -dvd-video -V $RDVDNAME -o $ISOPATH/$DVDNAME $TMPPATH/$RDVDNAME/DVDAUTHOR
;;
*)
mkdir $ISOPATH/$DVDNAME
mv $TMPPATH/$RDVDNAME/DVDAUTHOR/* $ISOPATH/$DVDNAME
;;
esac
fi
#Wieder aufräumen
rm -r $TMPPATH/$RDVDNAME
#Fertig!?!
if [ -e $ISOPATH/$DVDNAME ]; then svdrpsend.pl MESG "DVD-Image erfolgreich erzeugt!"
else
svdrpsend.pl MESG "Fehler beim erzeugen des DVD-Images!"
fi
Alles anzeigen
Also viel Spaß beim testen, die Weiterentwicklung wird wohl noch etwas dauern, ich plane noch Menüs zu generieren und ein paar Schönheitsfehler auszumerzen!
Wie gesagt, versprecht euch nicht zuviel, aber wenn ihr Fragen oder Vorschläge habt, immer ran damit!!
Ach ja, das kopieren von Urheberrechtlich geschützten DVD wird von mir natürlich nicht unterstützt!!!
Gruß
Toxic