#!/bin/bash

# Usage: dvd2dvd [videospur] audiospur


# Video Spur
vs=$1
# Audio Spur
as=$2
# DVD Sourcedevice
sd="/dev/sr0"

maxdvdsize=4300




# Funktion um freien Speicher zu ermitteln:
function fr1 ()
{
	df -m $PWD|awk '{print $4}'|tail -n 1
}


function error()
{
	if [ $? -ne 0 ]; then echo -e "\a\033[1;32m Error\033[0m!!\n"; cat $1 exit 1; else rm $1 2>/dev/null; fi
}


# Argumente werden ueberprueft:
if [ "$#" -lt 1 ]; then echo -e "\n Dieses Skript benoetigt mindestens ein Argument (Audiospur)\n"; exit 1; fi


############################################### 1. Rippen #######################################
# Rippen des Mpegs:
echo -e "\n \033[1;32mRippe Videospur.....\n\033[0m"
tccat -i $sd -T t -L 2>.tccat_out | tcextract -t vob -x mpeg2 > ofile.m2v 
error .tccat_out

# Rippen des Tons
echo -e "\n \033[1;32mRippe Audiotspur.....\n\033[0m"
tccat -i $sd -T t -L 2>.tccat_out | tcextract -t vob -x ac3 -a $as > ofile.ac3 
error .tccat_out

#################################################################################################


# Speichern der groeßen:
moviesize=`du -sm ofile.m2v |awk '{print $1}'`
audiosize=`du -sm ofile.ac3 |awk '{print $1}'`


echo -e "\n\n#########################################"
echo -e  "\033[1;32m Videogroesse: $moviesize MB"
echo -e " Audiogroesse:  $audiosize MB\033[0m"
echo -e "#########################################\n"

# mb = die benoetigte Speicher groesse, fr = freier Speicher
mb=`echo "$moviesize + $audiosize + $maxdvdsize"|bc -l`
#fr=`df -m $PWD|awk '{print $4}'|tail -n 1`


echo -e "\n\033[1;32m Voraussichtlich enoetigter Speicherplatz = $mb Mbyte\033[0m"
echo -e "\n\033[1;32m Freier Speicherplatz =      $( fr1 ) Mbyte\033[0m"

sleep 3

########################################### 2. Requantisierungsfaktor berechnen ############################################

# Audio von der gewuenschten Endgroeße abziehen:
rest=`echo "$maxdvdsize - $audiosize"|bc -l`

# Requantfaktor berechnen ( erhaltene groeße geteilt durch gewuenschte groeße): 
requantfactor=`echo "$moviesize / $rest"|bc -l`


echo -e "\n\n \033[1;32mRequantfaktor = $requantfactor\n\n\033[0m"

############################################################################################################################



############################################# 3. Requantisierung ###########################################################

# Nur wenn der Requantfaktor groesser ist als 1 wird das Video Requantisiert
if [ `echo "$moviesize / $rest"|bc` -ge 1 ]; then

# Benoetigter Speicher fuer Requantisierung berechnen(Movie groesse nach dem Requantisieren):	
b=`echo "$moviesize / $requantfactor"|bc`

# Film requanten:
	   if [ $( fr1) -lt $b ]; then echo -e "\n \a\033[1;32mNicht genuegent Speicherplatz frei! Frei: $fr Mbyte benoetigt: $mb !!\033[0m \n"
	   echo -e "\nContinue? j/n"
	   read INPUT1
	         case $INPUT1 in 
		   j*|J*)
	           echo -e "\n \033[1;32mRequantisierung....\033[0m\n"
	           tcrequant -i ofile.m2v -o movie.m2v -f $requantfactor
                   ;;
                   n*|N*)
		   exit 1
		   ;;
                  esac
	  else 
		  echo -e "\n \033[1;32mRequantisierung....\033[0m\n"
		  tcrequant -i ofile.m2v -o movie.m2v -f $requantfactor
           fi
else
           echo -e "\n-----------------------------------"
	   echo -e "\n\033[1;32m Keine Requantisierung benoetigt\n\033[0m"
	   echo -e "-----------------------------------\n\n"
fi

############################################################################################################################



################################################ 4. Multiplexen ############################################################

# Video und Audio multiplexen:
echo -e "\n\033[1;32m Multiplexen Videospur und Audiospur....\n\033[0m"

# Noch freier Speicher wird ermittelt:
fr=$( fr1 )

# Falls Requantisiert wurde, existiert die datei "movie.m2v" und der benoetigte Speicher wird in "mb" gespeichert:
if [ -s movie.m2v ]; then
	mb=`du -sm movie.m2v|awk '{print $1}'`
else
	mb=`du -sm ofile.m2v|awk '{print $1}'`
fi

# Vom noch freien Speicher wird die doppelte (wegen multiplexen) groesse abgezogen und ueberprueft ob noch Speicher frei ist
a=`echo "$fr - ($mb + $audiosize )" | bc`

if [ $a -ge 0 ]
 then : 
else echo -e "\n \a \033[1;32mFehler!! Nicht genuegend Speicher um zu Multiplexen\n"
     echo -e "\n Frei: $fr Mbyte - benoetigt: $mb Mbyte\n\033[0m"   
     echo -e "\nContinue? j/n"
     read INPUT2
     case $INPUT2 in
	 n*|N*)
         echo -e "\n OK, bye!\n"
	 exit 1
         ;;
     esac
   
fi

if [ -e movie.m2v ] 
 then
#	 mplex -f 8 -o film-neu.vob  movie.m2v ofile.ac3 2>.mplex_out
#	 error .mplex_out
         tcmplex -i movie.m2v -p ofile.ac3 -m d -o film-neu.vob 2>.tcmplex_out
	 error .tcmplex_out
else
	 tcmplex -i ofile.m2v -p ofile.ac3 -m d -o film-neu.vob 2>.tcmplex_out
	 error .tcmplex_out
#	 mplex -f 8 -o film-neu.vob ofile.m2v ofile.ac3 2>.mplex_out
#	 error .mplex_out
fi

################################################## 5. Aufraeumen ##########################################################################


# Freier Speicher wird ermittelt und falls vorraussichtlich kein Speicher mehr zur verfügung steht, nachgefragt ob die Source Files gelöscht werden soll:
fr=$( fr1 ) # freier Speicher 
c=`du -sm film-neu.vob|awk '{print $1}'` # benoetigter Speicher
d=`echo "$fr - $c"|bc` # freier speicher minus benoetigter Speicer muss groesser als null sein

if [ $d -gt 0 ]; then :
else
 echo -e "\a \033[1;32m\n Freier Speicher = $fr\n - benoetigt =  `du -sm film-neu.vob|awk '{print $1}'` Mbyte extra Speicher\033[0m"
 echo -e "\nGerippte Sourcen (ofile.m2v, ofile.ac3) loeschen? j/n"
   read INPUT
   case $INPUT in
    j*|J*)
    rm ofile.m2v movie.m2v ofile.ac3 2>/dev/null
    ;;
    n*|N*)
    ;;
   esac

fi			    

################################################## 6. DVD erstellen ########################################################

# DVD Struktur erstellen:
echo -e "\n \033[1;32mDVD Struktur wird erstellt.....\033[0m\n\n"
dvdauthor -t -a ac3+de -o film-dvd film-neu.vob 2>.dvdauthor_out
error .dvdauthor_out

# IFO Datei erstellen:
echo -e "\n \033[1;32mIFO Datei wird erstllt...\033[0m\n"
dvdauthor -T -o film-dvd 2>.dvdauthor_out
error .dvdauthor_out

############################################################################################################################




################################################## 7. Brennen ##############################################################

echo -e "\n##############################################################################"
echo -e "\n \033[1;32mGesamte DVD groesse:: `du -sm film-dvd |awk '{print $1}'` Mb \n\033[0m"
echo -e "##############################################################################\n"


#echo -e "\n Nun kann mit folgendem Befehl gebrannt werden:\n"
#echo -e "\a\033[1;32mgrowisofs -Z $sd -dvd-video -udf  film-dvd\033[0m"
echo -e "\n"

eject $sd


echo -e "\n Nun können Sie brennen, Rohling einlegen und j druecken oder n um abzubrechen\n\n"
echo -e "\n Wollen Sie nun brennen? j/n\n"
 
 read INPUT
   case $INPUT in
     j*|J*)
     growisofs -Z /dev/$sd -dvd-video film-dvd
     ;;
     n*|N*)
     exit 0
     ;;
  esac
				  
############################################################################################################################

