#!/bin/bash

## Este script automatiza as tarefas de confecção de um DVD

## Verifica se o video foi passado
if [ -z "$1" ]; then
	echo "Usar: -> $0 video"
	exit
fi

case "`tty`" in
  /dev/tty[1-8])
    MODE=text
    DIALOG=dialog
    ;;
  /dev/pts/*|/dev/ttyp*)
    MODE=x
    export XDIALOG_HIGH_DIALOG_COMPAT=1
    [ -x /usr/bin/gdialog ] && DIALOG=gdialog
    [ -x /usr/bin/Xdialog ] && DIALOG=Xdialog
    [ $DIALOG = dialog ] && MODE=text
    ;;
  *)
    MODE=text
    DIALOG=dialog
    ;;
esac
if [ -z "$DISPLAY" ] ; then
  MODE=text
  DIALOG=dialog
fi

DIRETORIO_TRABALHO="/home/kurumin/dvd"

BT="Montando o DVD"

function dolby() {
	pinners="| / - .\\"
	sox -V $DIRETORIO_TRABALHO/$1.wav -r 48000 -c1 $DIRETORIO_TRABALHO/left.wav avg -l
	sox -V $DIRETORIO_TRABALHO/$1.wav -r 48000 -c1 $DIRETORIO_TRABALHO/right.wav avg -r

	T1=$BT
	M1="Criando o canal surround esquerdo"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	cp -rf $DIRETORIO_TRABALHO/left.wav $DIRETORIO_TRABALHO/left_surround.wav

	T1=$BT
	M1="Criando o canal surround direito"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	cp -rf $DIRETORIO_TRABALHO/right.wav $DIRETORIO_TRABALHO/right_surround.wav

	soxmix -V $DIRETORIO_TRABALHO/left.wav $DIRETORIO_TRABALHO/right.wav -r 48000 -c1 $DIRETORIO_TRABALHO/centre.wav
	sox -V -v 0.5 $DIRETORIO_TRABALHO/centre.wav $DIRETORIO_TRABALHO/lfe.wav lowp 150

	rm -rf $DIRETORIO_TRABALHO/sound.wav

	multimux -d 0,0,0,15,15,0 $DIRETORIO_TRABALHO/left.wav $DIRETORIO_TRABALHO/centre.wav $DIRETORIO_TRABALHO/right.wav $DIRETORIO_TRABALHO/left_surround.wav $DIRETORIO_TRABALHO/right_surround.wav $DIRETORIO_TRABALHO/lfe.wav -o $DIRETORIO_TRABALHO/final.wav
	
	rm $DIRETORIO_TRABALHO/$1.wav $DIRETORIO_TRABALHO/left.wav $DIRETORIO_TRABALHO/centre.wav $DIRETORIO_TRABALHO/right.wav $DIRETORIO_TRABALHO/left_surround.wav $DIRETORIO_TRABALHO/right_surround.wav $DIRETORIO_TRABALHO/lfe.wav

	ffmpeg -i $DIRETORIO_TRABALHO/final.wav -ab 384 -ar 48000 -ac 6 $DIRETORIO_TRABALHO/$1.ac3

	#PID=`ps aux | grep "rm $DIRETORIO_TRABALHO/left.wav $DIRETORIO_TRABALHO/centre.wav $DIRETORIO_TRABALHO/right.wav" | grep -v grep | awk '{print $2}'`
}

function formatacao(){
	$DIALOG --inputbox "Digite o título do $1 para o menu" 0 0  2>$DIRETORIO_TRABALHO/titulo.txt
	titulo=$( cat $DIRETORIO_TRABALHO/titulo.txt )

	$DIALOG --inputbox 'Digite o tamanho do título' 0 0  2>$DIRETORIO_TRABALHO/tamanho.txt
	tamanho=$( cat $DIRETORIO_TRABALHO/tamanho.txt )

	janela_cor "titulo"
}

function janela_cor(){
	$DIALOG --title "Cor do $1"  2>$DIRETORIO_TRABALHO/cor.txt --menubox \
	"Qual a cor do $1?" \
	20 50 0 \
	"Black" "Preto" \
	"White" "Branco" \
	"Gray" "Cinza" \
	"Silver" "Cinza prateado" \
	"darkGray" "Cinza escuro" \
	"khaki" "Caqui" \
	"Yellow" "Amarelo" \
	"Gold" "Amarelo ouro" \
	"Orange" "laranja" \
	"Pink" "Rosa" \
	"fuchsia" "Fuchsia" \
	"Violet" "Violeta" \
	"Red" "Vermelho" \
	"Purple" "Púrpura" \
	"darkRed" "Vermelho escuro" \
	"Green" "Verde" \
	"darkGreen" "Verde escuro" \
	"aqua" "Aqua" \
	"skyBlue" "Azul celeste" \
	"lightBlue" "Azul fosco" \
	"Blue" "Azul" \
	"Cyan" "Azul ciano" \
	"darkBlue" "Azul escuro"

	cor=$( cat $DIRETORIO_TRABALHO/cor.txt )
}

if [ ! -d "$DIRETORIO_TRABALHO" ]; then

	T1=$BT
	M1="Criando nosso diretório de trabalho"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50
	mkdir $DIRETORIO_TRABALHO
fi

if [ ! -f "$DIRETORIO_TRABALHO/menu.png" ]; then

	T1="Criando o menu..."
	M1="Vou abrir o Kaffeine com o video para que você salve um screenshot.\nSalve o mesmo em $HOME/screenshot.png"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 20 50

	kaffeine "$1"

	M1="Minimize este aviso e só dê OK quando já tiver salvo o screenshot"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	mv $HOME/screenshot.png $DIRETORIO_TRABALHO/menu.png
fi

if [ ! -f "$DIRETORIO_TRABALHO/sound.wav" ]; then

	T1=$BT
	M1="Extrai o áudio do video"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	mplayer "$1" -ao pcm:file=$DIRETORIO_TRABALHO/sound.wav
fi

if [ ! -f "$DIRETORIO_TRABALHO/menu.wav" ]; then
	
	T1=$BT
	M1="Criando o arquivo de áudio do menu"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50
	cp -rf $DIRETORIO_TRABALHO/sound.wav $DIRETORIO_TRABALHO/menu.wav

	T1=$BT
	M1="Vou abrir o audacity para que você possa recortar o áudio do menu\nExporte como wav em $HOME/menu.wav"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 20 50
	audacity $DIRETORIO_TRABALHO/menu.wav
	mv $HOME/menu.wav $DIRETORIO_TRABALHO/menu.wav 

	T1=$BT
	M1="Convertendo o áudio do menu para 5.1"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50
	dolby "menu"
fi

if [ ! -f "$DIRETORIO_TRABALHO/sound.ac3" ]; then

	T1=$BT
	M1="Criando o som 5.1"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	dolby "sound"
fi

if [ ! -f "$DIRETORIO_TRABALHO/menu_maior.png" ]; then

	T1="Menu"
	M1="Aumentando a foto para o tamanho da tela"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	montage -geometry 720x480 -background black -quality 100 $DIRETORIO_TRABALHO/menu.png $DIRETORIO_TRABALHO/menu_maior.png

fi

if [ ! -f "$DIRETORIO_TRABALHO/arial.ttf" ]; then

	T1="Menu"
	M1="Baixando a fonte arial da web"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	wget -c http://www.webpagepublicity.com/free-fonts/a/Arial%20Black%20Italic.ttf
	mv Arial\ Black\ Italic.ttf $DIRETORIO_TRABALHO/arial.ttf
fi

aprovado="N"

if [ ! -f "$DIRETORIO_TRABALHO/menu_texto.png" ]; then

	aprovado="N"

	while [ $aprovado = "N" ]; do

		formatacao "DVD"

		convert -font $DIRETORIO_TRABALHO/arial.ttf -pointsize $tamanho -fill $cor -gravity Center -draw "text -25,-150'$titulo'" $DIRETORIO_TRABALHO/menu_maior.png $DIRETORIO_TRABALHO/menu_texto.png

		xzgv $DIRETORIO_TRABALHO/menu_texto.png

		$DIALOG --yesno "Gostou do preview do menu" 15 70
		if [ $? = "1" ];
		then
			aprovado="N"
		else
			aprovado="S"
		fi
	done
fi

if [ ! -f "$DIRETORIO_TRABALHO/menu_capitulos.png" ]; then

	T1="Menu"
	M1="Inserindo os capítulos no menu"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	aprovado="N"

	while [ $aprovado = "N" ]; do

		cp -rf $DIRETORIO_TRABALHO/menu_texto.png $DIRETORIO_TRABALHO/menu_capitulos.png
		cp -rf $DIRETORIO_TRABALHO/menu_texto.png $DIRETORIO_TRABALHO/mascara_capitulos.png

		# Montando o cabeçalho do xml do menu
		echo '<subpictures>' >  $DIRETORIO_TRABALHO/menu.spumux
		echo '  <stream>'    >> $DIRETORIO_TRABALHO/menu.spumux
		echo -n '               <spu start="00:00:00.00" end="00:00:00.00" highlight="' >> $DIRETORIO_TRABALHO/menu.spumux
		echo "mascara_capitulos.png"'" force="yes" >' >> $DIRETORIO_TRABALHO/menu.spumux

		# Montando o XML do DVD
		echo '<dvdauthor dest="'$DIRETORIO_TRABALHO/dvd_final'" jumppad="yes">' > $DIRETORIO_TRABALHO/vmgm.xml
		echo '        <vmgm>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '           <menus>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '   	     <video format="ntsc" resolution="720x480" />' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '               <pgc entry="title" >' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '    		<vob file="menu_mixado.mpg" pause="0" />' >> $DIRETORIO_TRABALHO/vmgm.xml

		echo -n '0' > $DIRETORIO_TRABALHO/capitulos.txt

		terminado="N" 

		let i=1
		let i_proximo=2

		menu_location_x="50"
		menu_location_y="200"

		while [ $terminado = "N" ]; do

			formatacao "capítulo"

			let espessura_botao=$tamanho*2+6
			let menu_final_x=$menu_location_x+185
			let menu_final_y=$menu_location_y+$espessura_botao

			cor_fonte=$cor

			janela_cor "fundo do botão"

			# Montando o botão
			convert -depth 8 -size 185x$espessura_botao xc:$cor -quality 100 -font $DIRETORIO_TRABALHO/arial.ttf -pointsize 12 -fill $cor_fonte -draw "text 20,20'$titulo'" $DIRETORIO_TRABALHO/botao_texto.png

			# Juntando o botão ao menu
		        composite -type TrueColor -depth 8 -geometry +$menu_location_x+$menu_location_y "$DIRETORIO_TRABALHO/botao_texto.png" "$DIRETORIO_TRABALHO/menu_capitulos.png" "$DIRETORIO_TRABALHO/menu_capitulos.png"

			janela_cor "fundo do botão selecionado"

			# Montando o botão
			convert -depth 8 -size 185x$espessura_botao xc:$cor -quality 100 -font $DIRETORIO_TRABALHO/arial.ttf -pointsize 12 -fill $cor_fonte -draw "text 20,20'$titulo'" $DIRETORIO_TRABALHO/mascara_botao.png

			# Juntando o botão ao menu
			composite -type TrueColor -depth 8 -geometry +$menu_location_x+$menu_location_y "$DIRETORIO_TRABALHO/mascara_botao.png" "$DIRETORIO_TRABALHO/mascara_capitulos.png" "$DIRETORIO_TRABALHO/mascara_capitulos.png"

			$DIALOG --inputbox 'Digite o tempo final (no formato mm:ss) do capítulo' 0 0  2>$DIRETORIO_TRABALHO/duracao.txt
			duracao=$( cat $DIRETORIO_TRABALHO/duracao.txt )

			# Guardando a duração da faixa
			echo -n ", $duracao" >> $DIRETORIO_TRABALHO/capitulos.txt 

			#Inserindo as informações no XML do menu
			echo '			<button x0="'$menu_location_x'" y0="'$menu_location_y'" x1="'$menu_final_x'" y1="'$menu_final_y'" />' >> $DIRETORIO_TRABALHO/menu.spumux

			# Inserindo as informações no XML do DVD
			echo '                      <button name="'$i'"> jump title 1 chapter '$i_proximo'; </button>' >> $DIRETORIO_TRABALHO/vmgm.xml


			let menu_location_y=$menu_location_y+$espessura_botao+10
			let i=$i+1
			let i_proximo=$i+2

			$DIALOG --yesno "Mais algum capítulo" 15 70
			if [ $? = "1" ];
			then
				terminado="S"
			else
				terminado="N"
			fi
		done

		# Inserindo o rodapé do xml do menu

		echo '          </spu>' >> $DIRETORIO_TRABALHO/menu.spumux
		echo '  </stream>' >> $DIRETORIO_TRABALHO/menu.spumux
		echo '</subpictures>' >> $DIRETORIO_TRABALHO/menu.spumux

		$DIALOG --inputbox 'Digite o tempo final do video (no formato mm:ss)' 0 0  2>$DIRETORIO_TRABALHO/duracao.txt
		duracao=$( cat $DIRETORIO_TRABALHO/duracao.txt )

		echo -n ", $duracao" >> $DIRETORIO_TRABALHO/capitulos.txt

		capitulos=$( cat $DIRETORIO_TRABALHO/capitulos.txt )

		# Inserindo o rodapé do xml do DVD
		echo "                      <post> jump vmgm menu 1; </post>" >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '                  </pgc>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo ' 		 </menus>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo ' 		</vmgm>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '  <titleset>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '    	<menus>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '      	      <pgc>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '        		    <post>jump vmgm menu;</post>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '                </pgc>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '          </menus>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '          <titles>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '                <pgc>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '    		<vob file="movie_dvd.mpg" chapters="'$capitulos'"/>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '    		<post> call vmgm menu 1; </post>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '                </pgc>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '          </titles>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '  </titleset>' >> $DIRETORIO_TRABALHO/vmgm.xml
		echo '</dvdauthor>' >> $DIRETORIO_TRABALHO/vmgm.xml

		# Inserindo o rodapé de Art
		convert -font $DIRETORIO_TRABALHO/arial.ttf -pointsize 7 -fill Red -gravity Center -draw "text 180,180'Art by EVG'" $DIRETORIO_TRABALHO/menu_capitulos.png $DIRETORIO_TRABALHO/menu_capitulos.png

		xzgv $DIRETORIO_TRABALHO/menu_capitulos.png

		$DIALOG --yesno "Gostou do preview do menu" 15 70
		if [ $? = "1" ];
		then
			aprovado="N"
		
			M1="Então vamos começar de novo a inserir os capítulos"
			$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50
		else
		        aprovado="S"
	     	fi

	done

	pngtopnm $DIRETORIO_TRABALHO/mascara_capitulos.png | pnmdepth 3 | pnmtopng -transparent $cor > $DIRETORIO_TRABALHO/mascara_capitulos_o.png
	mv $DIRETORIO_TRABALHO/mascara_capitulos_o.png $DIRETORIO_TRABALHO/mascara_capitulos.png
fi

if [ ! -f "$DIRETORIO_TRABALHO/menu.mpg" ]; then

	T1="Menu"
	M1="Montando o vídeo do menu"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	png2yuv -n 125 -I p -f 25 -j $DIRETORIO_TRABALHO/menu_capitulos.png | \
	mpeg2enc -n n -f 8 -o $DIRETORIO_TRABALHO/menu.m2v
fi

if [ ! -f "$DIRETORIO_TRABALHO/menu_mixado.mpg" ]; then

	T1=$BT
	M1="Juntando o som ao menu"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	mplex -f 8 -o $DIRETORIO_TRABALHO/menu_mixado.mpg $DIRETORIO_TRABALHO/menu.m2v $DIRETORIO_TRABALHO/menu.ac3 
fi

if [ ! -f "$DIRETORIO_TRABALHO/menu.mpg" ]; then
	spumux $DIRETORIO_TRABALHO/menu.spumux < $DIRETORIO_TRABALHO/menu_mixado.mpg > $DIRETORIO_TRABALHO/menu.mpg
fi

if [ ! -f "$DIRETORIO_TRABALHO/movie.mpg" ]; then

	T1=$BT
	M1="Convertendo o video para mpeg"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50
	
	#mencoder "$1" -of mpeg -vf scale=720:480,harddup -oac lavc -ovc lavc -lavcopts acodec=ac3:abitrate=192:vcodec=mpeg2video:keyint=25:vbitrate=5000:aspect=16/9 -mpegopts format=dvd -srate 48000 -ofps 30000/1001 -o $DIRETORIO_TRABALHO/movie.mpg

	mencoder "$1" -of mpeg -oac lavc -ovc lavc -lavcopts acodec=ac3:abitrate=192:vcodec=mpeg2video:keyint=25:vbitrate=5000 -mpegopts format=dvd -srate 48000 -ofps 30000/1001 -o $DIRETORIO_TRABALHO/movie.mpg
fi

T1=$BT
M1="Indo para o diretório de trabalho"
$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50
cd $DIRETORIO_TRABALHO

if [ ! -f "$DIRETORIO_TRABALHO/movie-0.m2v" ]; then

	T1=$BT
	M1="Separando o vídeo do áudio"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	# transcode -i movie.mpg -V -y mpeg --export_prof dvd-ntsc --export_asr 3 -o movie -D0 -s2 -nosound -J modfps=clonetype=3 --export_fps 29.97

	mpgtx -f -d movie.mpg -b movie
fi

if [ ! -f "$DIRETORIO_TRABALHO/movie_dvd.mpg" ]; then

	T1=$BT
	M1="Montando o vídeo final"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50

	mplex -f 8 -o "movie_dvd.mpg" "movie-0.m2v" "sound.ac3"
fi

if [ ! -f "$DIRETORIO_TRABALHO/dvd_final" ]; then
	T1=$BT
	M1="Montando o DVD"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50
	#dvdauthor -o $DIRETORIO_TRABALHO/dvd_final -x vmgm.xml
	dvdauthor -x vmgm.xml
fi

if [ ! -f "$DIRETORIO_TRABALHO/dvd.iso" ]; then
	T1=$BT
	M1="Montando o ISO do DVD"
	$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50
	mkisofs -dvd-video -o dvd.iso dvd_final
fi

T1=$BT
M1="Coloque um DVD virgem no drive"
$DIALOG --backtitle "$BT" --title "$T1" --msgbox "$M1" 10 50
growisofs -Z /dev/dvd -dvd-video dvd.iso
