#!/bin/bash

#####################################################################
################## Mame inp to video for GNU/Linux ##################
# Convertir les parties de jeux enregistrée par mame (inp) en vidéo #
#####################################################################

# définition d'une fonction nommée EffacementTempo :
EffacementTempo ()
{
echo -n -e "$VERT""$GRAS""Voulez-vous supprimer tous les fichiers temporaires (.mng, .wav, .png) [o/n] ? "
read reponse
shopt -s nocasematch  # sensibilité à la case désactivée.
case "$reponse" in   # teste la réponse.
	o) echo ""
	echo -e "$JAUNE""$GRAS""Effacement des fichiers temporaire en cours…""$DEFAUT"  # dans le cas de la réponse par le caractére o ou O, les commandes suivantes s'éxécutent.
	rm -r MediaTMP
	;;

	n) echo ""
	echo -e "$JAUNE""$GRAS""Fichiers temporaires conservés dans le dossier MediaTMP "!"$DEFAUT" # pour la réponse par le caractére n ou N, aucune commande à exécuter.

	;;

	*) echo -e "$JAUNE""$GRAS""Mauvaise réponse "!"$DEFAUT"  # réponse par tous autres caractères (0 à n caractères), pour éluder les mauvaises réponses.
	EffacementTempo  # appel de la fonction EffacementTempo, pour redemander que faire des temporaires.
	;;
esac
}

# définition d'une fonction nommée encodageogv :
encodageogv2 ()
{
echo -n "Entre 0 et 10, précisez le taux de compression (5 par défaut; 10 = compression minimale, donc génére un fichier plus lourd) : "
read taux
echo -n "Indiquez le nom du joueur (facultatif, validez pour continuer) : "
read joueur
echo -n "Indiquez le nom de l'organisation : "
read organization
echo -n "Indiquez le type de licence : "
read license
echo -n "Indiquez enfin le titre de la vidéo : "
read titre
echo -n -e "$JAUNE""$GRAS""Encodage vidéo Théora en cours…""$DEFAUT"
echo ""
videomontee=$(ls VideosRecMame/montage/ | sed -e 's/\.[a-zA-Z0-9]*$//')
case "$taux" in
	[0123456789])
	# encodage en theora+vorbis
	 	for videomontee in $videomontee; do
		ffmpeg2theora --optimize -v $taux --artist "$joueur" --organization "$organization" --license "$license" --title "$titre" -o VideosRecMame/$videomontee-v$taux.ogv VideosRecMame/montage/$videomontee
		done	
	;;

	*) taux=5
	ffmpeg2theora --optimize -v $taux --artist "$joueur" --organization "$organization" --license "$license" --title "$titre" -o VideosRecMame/$videomontee-v$taux.ogv VideosRecMame/montage/$videomontee
	;;
esac
}

# définition d'une fonction nommée encodageogv :
encodageogv ()
{
echo -n "Entre 0 et 10, précisez le taux de compression (5 par défaut; 10 = compression minimale, donc génére un fichier plus lourd) : "
read taux
echo -n "Indiquez le nom du joueur (facultatif, validez pour continuer) : "
read joueur
echo -n "Indiquez le nom de l'organisation : "
read organization
echo -n "Indiquez le type de licence : "
read license
echo -n "Indiquez enfin le titre de la vidéo : "
read titre
echo -n -e "$JAUNE""$GRAS""Encodage vidéo Théora en cours…""$DEFAUT"
echo ""
case "$taux" in
	[0123456789])
	# encodage en theora+vorbis
	ffmpeg2theora --optimize -v $taux --artist "$joueur" --organization "$organization" --license "$license" --title "$titre" -o VideosRecMame/$video-v$taux.ogv VideosRecMame/$video.mp4
	;;

	*) taux=5
	ffmpeg2theora --optimize -v $taux --artist "$joueur" --organization "$organization" --license "$license" --title "$titre" -o VideosRecMame/$video-v$taux.ogv VideosRecMame/$video.mp4
	;;
esac
}

# définition d'une fonction nommée menufinal2 :
menufinal2 ()
{
echo ""
echo "-------------------------------------------------------------------------------"
echo ""
echo -e "$VERT""$GRAS""Et maintenant, voulez-vous :""$DEFAUT"
echo ""
echo "- 1 - Encoder pour diffusion sur le web avec HTML5 ?"
echo "- 2 - Quitter ?"
echo ""
echo -n "Votre choix : "
read choix2
echo ""
case "$choix2" in
	1) encodageogv2 # appelle la fonction encodageogv2
	echo ""
	echo ""
	echo "-------------------------------------------------------------------------------"
	echo -e "$JAUNE""$GRAS""Votre fichier vidéo se trouve dans le dossier VideosRecMame"
	echo -e "À bientôt" !"$DEFAUT"
	echo ""
	;;

	2) echo ""
	echo ""
	echo "-------------------------------------------------------------------------------"
	echo -e "$JAUNE""$GRAS""Votre fichier vidéo se trouve dans le dossier VideosRecMame/montage"
	echo -e "À bientôt" !"$DEFAUT"
	echo ""
	;;

	*) echo -e "$GRAS""$JAUNE""Mauvaise réponse "!"$DEFAUT"
	menufinal2  # rappelle la fonction menufinal
	;;
esac
}

# définition d'une fonction nommée menufinal :
menufinal ()
{
echo -e "$VERT""$GRAS""$SOULIGNE""Voulez-vous"$DEFAUT" :"
echo ""
echo "- 1 - Faire un montage vidéo ?"
echo "- 2 - Encoder directement pour diffusion sur le web avec HTML5 ?"
echo "- 3 - Quitter ?"
echo ""
echo -n "Votre choix : "
read choix
echo ""
case "$choix" in
	1) echo -e "$CYAN""Laisser les paramètres « Vidéo » et « Audio » sur « Copie »"
	echo -e "Pour le paramètre « Format », choisir « MP4 »"
	echo -e "$CYAN""Effectuez votre montage et enregistrez "$SURLIGNE"IMPÉRATIVEMENT"$DEFAUT""$CYAN" la vidéo finale dans le dossier « VideosRecMame/montage »"
	echo ""
	echo -e "$GRAS""Pour continuer, n'oubliez pas de fermer AviDemux lorsque vous aurez terminé"
	echo ""
	echo -n -e "$ROSE""$GRAS" "      Validez pour lancer AviDemux ""$DEFAUT"
		read valide
		case $valide in
		*) echo "Reprise du script..."
		;;
		esac
	avidemux VideosRecMame/$video.mp4
	menufinal2  # appelle la fonction menufinal
	;;

	2) encodageogv # appelle la fonction encodageogv
	echo ""
	echo ""
	echo "-------------------------------------------------------------------------------"
	echo -e "$JAUNE""$GRAS""Votre fichier vidéo se trouve dans le dossier VideosRecMame"
	echo -e "À bientôt "!"$DEFAUT"
	echo ""
	;;

	3) echo ""
	echo ""
	echo "-------------------------------------------------------------------------------"
	echo -e "$JAUNE""$GRAS""Votre fichier vidéo se trouve dans le dossier VideosRecMame"
	echo -e "À bientôt "!"$DEFAUT"
	echo ""	
	;;

	*) echo -e "$GRAS""$JAUNE""Mauvaise réponse "!"$DEFAUT"
	menufinal  # rappelle la fonction menufinal
	;;
esac
}

######################
# Début du programme #
######################

# 1 - Création des dossiers utiles :
mkdir MediaTMP
mkdir MediaTMP/PngTMP
mkdir VideosRecMame
mkdir VideosRecMame/montage


# 2 - Définition de variables pour afficher du texte en couleur http://www.admin-linux.fr/?p=9011
VERT="\033[32m"
ROUGE="\033[31m"
ROSE="\033[35m"
BLEU="\033[34m"
JAUNE="\033[33m"
GRIS="\033[37m"
CYAN="\033[36m"

DEFAUT="\033[0m"
SOULIGNE="\033[4m"
GRAS="\033[1m"
SURLIGNE="\033[7m"

# 3 - Jouer l'inp par l'émulateur afin de créer le fichier animé mng et le fichier sonore associé :
echo ""
echo -e "$VERT""$GRAS""##############################################################"
echo -e "##### "$GRIS"Bienvenue dans « Mame inp to video for GNU/Linux » "$DEFAUT""$GRAS""$VERT"#####"
echo -e "##############################################################""$DEFAUT"
echo "Nous allons convertir les parties de jeux enregistrées par Mame"
echo "(fichier .inp se trouvant dans le dossier ~/.mame/inp) en vidéo (mp4)"
echo ""
echo -e "$SURLIGNE""$ROUGE""$GRAS"!" Attention "!" Attention "!" Attention "!" Attention "!" Attention "! "$DEFAUT"
echo -e "$CYAN""$GRAS""Restez dans le coin, car une fois le déroulement de la partie terminée,"
echo -e "il faudra appuyer sur la touche échap pour quitter l'émulateur""$DEFAUT"
echo "(sinon le jeu continuera de tourner et les fichiers de grossir)"
echo ""
echo -n "Saisissez le nom exact de la rom mame du jeu : "
read rom  # attend la saisie au clavier, et met la chaine de caractère saisie dans la variable rom
echo -n "Saisissez le nom de la partie que vous avez sauvegardé (sans l'extension .inp) : "
read partie  # met la chaine de caractère saisie dans la variable partie
echo -n "Saisissez le nom du fichier vidéo désiré (sans extension) : "
read video  # met la chaine de caractère saisie dans la variable video

# 4 - Enregistrement du fichier animé mng et du fichier wav :
mame $rom -playback $partie.inp -mngwrite $partie.mng -wavwrite MediaTMP/$partie.wav

# 5 - Déplacement du fichier mng dans le dossier local :
mv ~/.mame/snap/$partie.mng MediaTMP/

# 6 - Extraction des fichiers png depuis le fichier animé mng dans le dossier temporaire MediaTMP :
cd MediaTMP/PngTMP
advmng -xn ../$partie.mng

# 7 - Convertir la suite de fichier png en une vidéo compressée MPEG-4 + audio mp3 :
mencoder mf://*.png -mf type=png:fps=60 -ovc lavc -lavcopts vcodec=mpeg4:aspect=3/4:vqscale=2 -oac mp3lame -lameopts cbr:br=128 -audiofile ../$partie.wav -o ../../VideosRecMame/$video.mp4
cd ..
cd ..

# 8 - appel de la fonction EffacementTempo, pour demander que faire des temporaires :
echo ""
echo "-------------------------------------------------------------------------------"
echo ""
espacetmp=$(du -hs MediaTMP | sed -e "s/MediaTMP//g")  # l'espace disque occupé par le dossier MediaTMP dans la variable espacetmp.
echo -e "L'espace disque occupé par les fichiers temporaires est de : "$GRAS""$JAUNE"$espacetmp""$DEFAUT"  # affiche le contenu de la variable espacetmp.
EffacementTempo   

# 9 - Montage vidéo avec Avidemux et Encodage Web
echo ""
echo "-------------------------------------------------------------------------------"
echo ""
menufinal


