logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Ceci est une ancienne révision du document !


DVD6clone

Introduction

Qu'est-ce que DVD6clone ?

DVD6clone peut :

  • Lire votre DVD
  • Riper votre DVD sur votre disque dur
  • Créer une image iso de votre DVD
  • Copier un ou plusieurs titre(s) de votre DVD au format brut (VOB) ou en MKV avec différents choix de formats
  • Convertir les sous-titres Vobsub en .srt
  • Voir les différentes informations des titres de votre DVD.

Édition des sources

Pour plus d'info sur l'édition du fichier sources.list voir ici : Lien sources.list

Pour en savoir sur plus les outils de gestion des dépôts et paquets: les outils apt:

L'ensemble des commandes qui vont suivre sont à effectuer dans un terminal en tant que superutilisateur 2)

Nous allons éditer notre fichier /etc/apt/sources.list 3) afin d'y avoir accès.

Pour cela nous utiliserons, tout au long du tuto, l'éditeur de texte nano.

nano /etc/apt/sources.list

Puis rajoutons les lignes suivantes pour autant qu'ils ne soit pas déjà écrites :

Pour debian version Stable

/etc/apt/sources.list
# stable deb-multimedia
deb http://www.deb-multimedia.org stable main non-free

Pour debian version Testing

/etc/apt/sources.list
# stable deb-multimedia
deb http://www.deb-multimedia.org testing main non-free

Pour debian version Sid

/etc/apt/sources.list
# stable deb-multimedia
deb http://www.deb-multimedia.org sid main non-free

Enregistrons (ctrl+o) acceptons l'enregistrement du fichier via ENTER et quittons nano (ctrl+x)

Enregistrons la clé du dépôt multimédia

apt-get install debian-keyring && gpg --keyring /usr/share/keyrings/debian-keyring.gpg -a --export 07DC563D1F41B907 |apt-key add -

Enregistrons la clé du dépôt DVD6clone

apt-key adv --recv-keys --keyserver keyserver.ubuntu.com A9EC84398BF325BB

Puis rafraîchissons la liste des paquets

apt-get update

Installation des dépendances

Installons les dépendances nécessaire à DVD6clone.

apt-get install zenity lsdvd ffmpeg mplayer mencoder dvdbackup genisoimage mkvtoolnix gawk libdca0 libdvdcss2 libdvdnav4 libdvdread4 libcanberra-gtk3-module tesseract-ocr tesseract-ocr-fra tesseract-ocr-deu tesseract-ocr-eng tesseract-ocr-spa tesseract-ocr-nld tesseract-ocr-ita tesseract-ocr-por gstreamer0.10-plugins-ugly subtitlerippe

Script Bash DVD6clone

Maintenant créons un fichier dans notre /home que nous appellerons “DVD6clone”

Faisons un copier/coller du script ci-dessous…

Pour finir il faut le rendre exécutable via la commande:

chmod +x /home/$USER/DVD6clone
#! /bin/bash

#============================================================================================================================================
# DVD6clone
#============================================================================================================================================
# AUTEUR: Slyfox
# SIGNALER BUG : http://forum.ubuntu-fr.org/viewtopic.php?id=952101 ou slyfox@websud.ch
# LICENCE: GNU General Public License v3.0 /Copieright (C) 2012 Slyfox
# NAME: DVD6clone
# DESCRIPTION: Lit, copie et ripe les DVD
# REQUIERS: zenity lsdvd ffmpeg mplayer mencoder dvdbackup genisoimage mkvtoolnix gawk libdca0 libdvdcss2 libdvdnav4 libdvdread4 libcanberra-gtk3-module 
#           tesseract-ocr tesseract-ocr-fra tesseract-ocr-deu tesseract-ocr-eng tesseract-ocr-spa tesseract-ocr-nld tesseract-ocr-ita 
#           tesseract-ocr-por gstreamer0.10-plugins-ugly subtitleripper

version=20140406-2

#============================================================================================================================================
# Choix lecteur DVD
#============================================================================================================================================
DVDMONTE()
{
# Vérification si il y a un DVD dans le lecteur
nbrDVDMonte=$(mount | grep -c ^"/dev/sr")
echo "nbrDVDMonte=$nbrDVDMonte"

# Si il y a pas de DVD dans le lecteur
while [[ "$nbrDVDMonte" -eq 0 ]]; do
      zenity --question \
             --title="DVD6clone" \
             --text="Insérez un DVD dans votre lecteur et lancer le scan..." \
             --ok-label="Scanner DVD" \
             --cancel-label="Quitter DVD6clone" 
        
       # Si Quitter DVD6clone
       [[ $? -eq 1 ]] && exit 
        
       nbrDVDMonte=$(mount | grep -c ^"/dev/sr") 
done 

# Recherche du lecteur du DVD et du titre du DVD
if      [[ "$nbrDVDMonte" -eq 1 ]]; then 
        pathDevice=$(df | awk '/^\/dev\/sr/ {print $1}')

elif    [[ "$nbrDVDMonte" -ge 2 ]]; then
        pathDevice=$(df | awk '/^\/dev\/sr/ {print $1}')
        pathDevice=$(zenity --list \
                            --radiolist \
                            --title="DVD6clone" \
                            --text="Sélectionnez un DVD" \
                            --ok-label="Valider choix" \
                            --cancel-label="Quitter DVD6clone" \
                            --separator=" " \
                            --print-column="3" \
                            --column "" \
                            --column " " \
                            --column " " \
                     $(for i in $pathDevice; do
                           titreDVD=$(lsdvd "$i" | awk -F ": " '/^Disc Title:/ {print $2}' | tr " " "_")
                           echo "$titreDVD $i" |
                           awk '{print $0}'
                      done | awk 'NR==1 {print "TRUE",$1,$2} NR!=1 {print "FALSE",$1,$2}'))
        [[ $? -eq 1 ]] && exit
fi

echo "pathDevice=$pathDevice"

MENU
}
#============================================================================================================================================
# Vérification DVD Indentique
#============================================================================================================================================
DVDIDENTIQUE()
{
# Vérification DVD monté
if [[ $(mount | grep -c ^"/dev/sr") -eq "0" ]]; then 
   DVDMONTE
fi

# Vérification si même DVD monté par comparaison du titre
if [[ "$titreDVD" != $(lsdvd "$pathDevice" | awk -F ": " '/^Disc Title:/ {print $2}' | tr " " "_") ]]; then 
   zenity --error \
          --title="DVD6clone" \
          --text="<big><b>ERREUR \!</b></big> <span color=\"red\">\n\nLe DVD utilisé a été remplacé par un autre ou a été ejecté... \n\nRéinitialisation du programme !</span>"
   DVDMONTE
fi

# Vérification un DVD est toujours présent dans le lecteur
if [[ -z "$titreDVD" ]]; then 
   zenity --error \
          --title="DVD6clone" \
          --text="<big><b>ERREUR \!</b></big> <span color=\"red\">\n\nLe DVD utilisé a été remplacé par un autre ou a été ejecté... \n\nRéinitialisation du programme !</span>"
   DVDMONTE
fi
}
#============================================================================================================================================
# Vérification espace disque dur destination
#============================================================================================================================================
ESPACEDESTINATION()
{
DVD=$(df | awk '{if ($1=="'$pathDevice'") {print $3}}')
echo "DVD=$DVD"

DisqueDur=$(awk '(NR!=1) {print $4}' < <(df -kP .))
echo "DisqueDur=$DisqueDur"

tailleOperation=$(awk '{print $1*'$nbrOperation'}' <<< "$DVD")
echo "tailleOperation=$tailleOperation"

if [[ "$DisqueDur" -lt "$tailleOperation" ]]; then
   zenity --question \
          --title="DVD6clone" \
          --text "Vous disposez d'un espace du disque dur insuffisant.\nVoulez-vous continuez ?"
[[ $? -eq 1 ]] && MENU
fi
}
#============================================================================================================================================
# Scanne DVD
#============================================================================================================================================
SCANDVD()
{
# Vérification si il y a un DVD dans le lecteur
nbrDVDMonte=$(mount | grep -c ^"/dev/sr")
echo "nbrDVDMonte=$nbrDVDMonte"

# Si il y a pas de DVD dans le lecteur
[[ "$nbrDVDMonte" -eq 0 ]] && DVDMONTE

# Création dossier temporaire
device=$(awk -F "/" '{print $NF}' <<< "$pathDevice")

dossierTMP="/home/$USER/.dvd6clone/tmp_$device"
echo "dossierTMP=$dossierTMP"

[[ ! -d "$dossierTMP" ]] && mkdir -p "$dossierTMP"
rm -fr "$dossierTMP"/*
if [[ ! -w "$dossierTMP" ]]; then 
   zenity --error \
          --title="DVD6clone" \
          --text="Veuillez vérifier vos droits.\nImpossible d'écrire dans le répertoire $dossierTMP \!"
   exit
fi

# Recherche information DVD
lsdvd "$pathDevice" -as > "$dossierTMP/lsdvd.txt"

# Recherche titre du DVD
titreDVD=$(cat "$dossierTMP/lsdvd.txt" |
           awk -F ": " '/^Disc Title:/ {print $2}' | 
           tr " " "_")

echo "titreDVD=$titreDVD"

# Recherche de la piste principale
LongestTrack=$(cat "$dossierTMP/lsdvd.txt" | 
               awk '/^Longest track:/ {print $3}')

echo "LongestTrack=$LongestTrack"

# Recherche les numéro des pistes
numTitres=$(cat "$dossierTMP/lsdvd.txt" | 
            awk '/^Title:/ {print $2}' | 
            tr "," " ")

echo "numTitres=$numTitres"

# Fusion numéro titre et durée avec pistes audio et sous-titre
infoDVD=$(cat "$dossierTMP/lsdvd.txt" | 
          awk '{if ($1=="Title:") {i=$1" "$2" "$3" "$4} 
                else if ($1=="Audio:" || $1=="Subtitle:") {print i,$1,$2,$3,$4,$5,$6,$7,$8,"Stream id:",$NF}}')

# Remplacement ", : ." par un espace
infoDVD=$(echo "$infoDVD" |
          tr "," " " |
          tr ":" " " |
          tr "." " " )

# Insertion durée en secondes et remise en forme
infoDVD=$(echo "$infoDVD" |
            awk '{printf "%s %02d %s %02d:%02d:%02d %02d %s %d %s %s %s %s %s %s %s\n" ,$1,$2,$3,$4,$5,$6,($4*3600+$5*60+$6),$8,$9,$10,$11,$13,$14,$15,$17,$18}')

# Convertion aid et sid en décimal
infoDVD=$(echo "$infoDVD" |
            awk --non-decimal-data '{if ($6=="Audio") {printf "%s %d\n" ,$0,$NF} 
                                   else if ($6=="Subtitle") {printf "%s %d\n" ,$0,($NF-32)}}')

# Remplace Subtitle par sous-titre
infoDVD=$(echo "$infoDVD" |
            awk '{if ($6=="Subtitle" && $6="Sous-titre") {print $0} else {print $0}}')

# Remaniment DVDinfo pour mettre le français en première position
infoDVD=$(for i in $numTitres; do
                echo "$infoDVD" | awk '{if ($2=='$i' && $6=="Audio" && $9=="fr") print $0}'
                echo "$infoDVD" | awk '{if ($2=='$i' && $6=="Audio" && $9!="fr") print $0}'
                echo "$infoDVD" | awk '{if ($2=='$i' && $6=="Sous-titre" && $9=="fr") print $0}'
                echo "$infoDVD" | awk '{if ($2=='$i' && $6=="Sous-titre" && $9!="fr") print $0}'
          done)

echo "infoDVD=$infoDVD"
}
#============================================================================================================================================
#                                                                     Menu
#============================================================================================================================================
MENU()
{
SCANDVD

choixMenu=$(zenity --list \
                   --radiolist\
                   --title="DVD6clone v. $version" \
                   --text="<b>Titre du DVD : $titreDVD \nDevice : $pathDevice</b>" \
                   --ok-label="Valider choix" --cancel-label="Quitter DVD6clone" \
                   --hide-column="2" \
                   --print-column="2" \
                   --width=800  \
                   --height=450  \
                   --column=" " \
                   --column=" " \
                   --column=" " \
                   "FALSE" " 1" "Visionner DVD" \
                   "FALSE" " 2" "Copier le DVD en entier" \
                   "TRUE" " 3" "Extraire un ou des titres" \
                   "FALSE" " 4" "Convertir un ou des sous-titres au format STR" \
                   "FALSE" " 5" "Éjecter le DVD" \
                   "FALSE" " 6" "Choix d'un autre lecteur DVD" \
                   "FALSE" " 7" "Voir info du DVD" \
                   "FALSE" " 8" "Aide et info de DVD6clone")

# Si Quitter DVD6clone
[[ $? -eq 1 ]] && exit

# Choix
case "$choixMenu"
        in
        " 1")
                VISIONNERDVD
                MENU
                ;;

        " 2")
                FORMATCOPIEDVD
                MENU
                ;;

        " 3")
                FORMATCOPIETITRE
                MENU
                ;;
        " 4")
                STR
                MENU
                ;;
                
        " 5")
              eject "$pathDevice"
              DVDMONTE
              ;;
              
        " 6")
              DVDMONTE
              ;;
        " 7")
              INFODVD
              MENU
              ;;
              
        " 8")
              AIDE
              MENU
              ;;
        *)
esac
}
#============================================================================================================================================
# Choix titre(s)
#============================================================================================================================================
ZENITYTITRE()
{
# Choix titre(s) à copier
a=$(for i in $numTitres ; do
        dureeSec=$(awk '{if ($2=='$i' ){print $5}}' <<<"$infoDVD" | sort -u)
        duree=$(awk '{if ($2=='$i' ){print $4}}' <<<"$infoDVD" | sort -u)
        audio=$(awk '{if ($2=='$i' && $6=="Audio") {print $10}}' <<<"$infoDVD" | sort -u)
        sub=$(awk '{if ($2=='$i' && $6=="Sous-titre") {print $10}}' <<<"$infoDVD" | sort -u)

        if [[ $i = "$LongestTrack" ]]; then
              option="TRUE"
        else  option="FALSE"
        fi

        echo "|$option|"
        echo "Titre: $i"
        echo "Durée: $duree"
        echo "Audio:" $audio
        echo "Sous-titre:" $sub
        echo "| $i"
        echo "| $duree"
        echo "| $dureeSec"
done) 

OLDIFS=$IFS
IFS=$'|'
zenityTitres=$(zenity --list \
                      --checklist \
                      --title="DVD6clone" \
                      --text="<b>Choississez un ou des titres</b>\nTitre principal : $LongestTrack" \
                      --width=500 \
                      --height=800 \
                      --hide-column="3,4,5" \
                      --print-column="3,4,5" \
                      --column="" \
                      --column="" \
                      --column="" \
                      --column="" \
                      --column="" \
                      $(echo "| Tous les titres| 0 | 0 | 0 $a" ))
                      
retour="$?"

IFS=$OLDIFS

# Si Quitter DVD6clone
[[ "$retour" -eq 1 ]] && MENU
}
#============================================================================================================================================
# Choix destination vidéo
#============================================================================================================================================
DESTINATION_VIDEO()
{
# Choix nom video
cheminVideo=$(zenity --file-selection \
                     --title="Sélectionnez le dossier de destination" \
                     --directory \
                     --filename="/home/$USER/Bureau/$titreDVD"\
                     --save)

# Si Retour au menu
[[ $? -eq 1 ]] && MENU

# Suppression dossier créer par zenity "cheminVideo"
rm -fr "$cheminVideo"

nomVideo=$(echo "$cheminVideo" | awk -F "/" '{print $NF}')
echo "nomVideo=$nomVideo"

cheminDossierDVD=$(echo "$cheminVideo" | awk '{gsub(/\/'"$nomVideo"'$/,"",$0);print $0}')
echo "cheminDossierDVD=$cheminDossierDVD"

# Remplacement espace par "_"
nomVideo=$(echo "$nomVideo" | tr " " "_")

cheminVideo="$cheminDossierDVD/$nomVideo"

echo "nomVideo=$nomVideo"
echo "cheminVideo=$cheminVideo"

# Contrôle si vidéo exsist déjà

[[ -f "$dossierTMP/controle_fichier.txt" ]] && rm "$dossierTMP/controle_fichier.txt"

for i in $titres; do
        [[ -f "$cheminDossierDVD/$nomVideo-Titre-$i.$typeVideo" ]] && echo "$cheminDossierDVD/$nomVideo-Titre-$i.$typeVideo" >> "$dossierTMP/controle_fichier.txt"
done

if [[ -s "$dossierTMP/controle_fichier.txt" ]]; then
        zenity --question \
               --text="Vidéo(s) exsistante(s) :\n$(cat "$dossierTMP/controle_fichier.txt")\n\nVoulez-vous vraiment continuer et supprimer cette ou ces vidéo(s) ?"
        [[ $? -eq "1" ]] && DESTINATION_VIDEO
fi
}
#============================================================================================================================================
# Visionner le DVD
#============================================================================================================================================
VISIONNERDVD()
{
# Contrôle DVD
DVDIDENTIQUE

# Choix titre(s) à copier
ZENITYTITRE

zenityTitres=$(echo "$zenityTitres" | tr "|" " " | xargs -n 3)
echo "zenityTitres=$zenityTitres"

titre=$(echo "$zenityTitres" | awk '{print $1}')
echo "titre=$titre"

if [[ "$titre" -eq "0" ]]; then

        # Contrôle DVD
        DVDIDENTIQUE

        zenity --info \
               --title="Mplayer contrôle" \
               --text="\n
               <span color=\"red\">Molette de la souris</span>
               <span color=\"red\">Pavé directionnel\tAvance ou recule la vidéo</span>
               <span color=\"blue\">ESPACE\t\t\tPause (autre appui reprend la lecture)</span>
               <span color=\"red\">m\t\t\t\tCoupe le son (mute)</span>
               <span color=\"blue\">f\t\t\t\tBascule en mode plein-écran</span>
               <span color=\"red\">#\t\t\t\tSélection des pistes audio</span>
               <span color=\"blue\">v\t\t\t\tBascule l'affichage des sous-titres</span>
               <span color=\"red\">j\t\t\t\tSélection des sous-titres</span>
               <span color=\"blue\">5\t\t\t\tMenu principal</span>" &

        pidZenityInfoMplayer=$!

        # Lancement de Mplayer
        mplayer -dvd-device "$pathDevice" -mouse-movements dvdnav:// -sid "999" &

        pidMplayer=$!
        wait "$pidMplayer"
        kill "$pidZenityInfoMplayer"

        # Si Retour au menu
        [[ $? -eq 1 ]] && MENU

else
        # Contrôle DVD
        DVDIDENTIQUE

        aid=$(zenity --list \
                     --radiolist \
                     --width=500 \
                     --height=800 \
                     --title="DVD6clone" \
                     --text="<b>Choississez une piste audio</b>" \
                     --ok-label="Valider choix" \
                     --cancel-label="Retour au menu" \
                     --separator=" " \
                     --hide-column="2,3,4,5,6,7,8,9,10,12,14,15" \
                     --print-column="16" \
                     --column=" " \
                     --column=" " \
                     --column="Titre" \
                     --column=" " \
                     --column="Durée" \
                     --column=" " \
                     --column="Piste" \
                     --column=" " \
                     --column=" " \
                     --column=" " \
                     --column="Langue" \
                     --column=" " \
                     --column="Format" \
                     --column=" " \
                     --column=" " \
                     --column="ID piste" \
                     $(echo "$infoDVD" |
                       awk '{if ($2=='$titre' && $6=="Audio") {print $0}}' |
                       awk '{if (NR==1) {print "TRUE",$0} 
                             else if (NR!=1) {print "FALSE",$0}}' | sort -k 10,10))

        # Si Quitter DVD6clone
        [[ $? -eq 1 ]] && MENU

        echo "aid=$aid"

        # Contrôle DVD
        DVDIDENTIQUE

        sid=$(zenity --list \
                     --radiolist \
                     --width=500 \
                     --height=800 \
                     --title="DVD6clone" \
                     --text="<b>Choississez un sous-titre</b>" \
                     --ok-label="Valider choix" \
                     --cancel-label="Retour au menu" \
                     --separator=" " \
                     --hide-column="2,3,4,5,6,7,8,9,10,12,14,15" \
                     --print-column="16" \
                     --column=" " \
                     --column="Titre" \
                     --column=" " \
                     --column=" " \
                     --column="Durée" \
                     --column=" " \
                     --column=" " \
                     --column=" " \
                     --column=" " \
                     --column=" " \
                     --column="Langue" \
                     --column=" " \
                     --column="Format" \
                     --column=" " \
                     --column=" " \
                     --column="ID piste" \
        $(echo "$infoDVD" |
          awk '{if ($2=='$titre' && $6=="Sous-titre") {print $0}}' |
          awk 'BEGIN {print "TRUE . . . . . . . . . Aucun . . . . 999"} {print "False",$0}' | sort -k 10,10))

        # Si Quitter DVD6clone
        [[ $? -eq 1 ]] && MENU

        echo "sid=$sid"

        zenity --info \
               --title="Mplayer contrôle" \
               --text="\n
               <span color=\"red\">Molette de la souris</span>
               <span color=\"red\">Pavé directionnel\tAvance ou recule la vidéo</span>
               <span color=\"blue\">ESPACE\t\t\tPause (autre appui reprend la lecture)</span>
               <span color=\"red\">m\t\t\t\tCoupe le son (mute)</span>
               <span color=\"blue\">f\t\t\t\tBascule en mode plein-écran</span>
               <span color=\"red\">#\t\t\t\tSélection des pistes audio</span>
               <span color=\"blue\">v\t\t\t\tBascule l'affichage des sous-titres</span>
               <span color=\"red\">j\t\t\t\tSélection des sous-titres</span>
               <span color=\"blue\">5\t\t\t\tMenu principal</span>" &

        pidZenityInfoMplayer=$!

        # Lancement de Mplayer
        mplayer -dvd-device "$pathDevice" -mouse-movements dvdnav://"$titre" -aid "$aid" -sid "$sid" &

        pidMplayer=$!
        wait "$pidMplayer"
        kill "$pidZenityInfoMplayer"

        # Si Retour au menu
        [[ $? -eq 1 ]] && MENU
fi
}
#============================================================================================================================================
# Choix format de sortie
#============================================================================================================================================
FORMATCOPIEDVD()
{
choixFormat=$(zenity --list \
                     --radiolist\
                     --title="DVD6clone" \
                     --text="<b>Sélectionnez un format</b>" \
                     --ok-label="Valider choix" --cancel-label="Retour au menu" \
                     --hide-column="2" \
                     --print-column="2" \
                     --width=800  \
                     --height=450  \
                     --column=" " \
                     --column=" " \
                     --column=" " \
                     "TRUE" " 1" "Dossier (VIDEO_TS et AUDIO_TS)" \
                     "FALSE" " 2" "Image ISO")

# Choix
case "$choixFormat"
        in
        " 1") 
                DVDBACKUP
                ;;

        " 2") 
                ISO
                ;;

        *)
esac
}
#============================================================================================================================================
# Copie du DVD dans dossier
#============================================================================================================================================
DVDBACKUP()
{
# Choix nom video
cheminDossierDVD=$(zenity --file-selection \
                          --title="Sélectionnez le dossier de destination" \
                          --directory \
                          --filename="/home/$USER/Bureau/$titreDVD"\
                          --save)

# Si Retour au menu
[[ $? -eq 1 ]] && MENU

# Suppression dossier créer par zenity "cheminVideo"
rm -fr "$cheminDossierDVD"

nomDossierDVD=$(echo "$cheminDossierDVD" | awk -F "/" '{print $NF}')
echo "nomDossierDVD=$nomDossierDVD"

cheminDossierDVD=$(echo "$cheminDossierDVD" | awk '{gsub(/\/'"$nomDossierDVD"'$/,"",$0);print $0}')
echo "cheminDossierDVD=$cheminDossierDVD"

dossierMedia=$(df | awk '$1=="'$pathDevice'" {print $NF}')
echo "dossierMedia=$dossierMedia"

tailleDVD=$(du -cm "$dossierMedia" | grep "total" | awk '{printf "%d" ,$1}')
echo "tailleDVD=$tailleDVD"

# Vérification espace disque dur destination
nbrOperation="1"
ESPACEDESTINATION

# Remplacement espace par "_"
nomDossierDVD=$(echo "$nomDossierDVD" | tr " " "_")

tempsStart="$(date '+%s')"

dvdbackup -p -v -M -i "$pathDevice" -o "$cheminDossierDVD" -n "$nomDossierDVD" 2>&1 |
awk -v nomDossierDVD="$nomDossierDVD" \
    -v cheminDossierDVD="$cheminDossierDVD" \
    -v tempsStart="$tempsStart" \
    -v nbrOperation="$nbrOperation" \
    -v tailleDVD="$tailleDVD" \
    -v titreDVD="$titreDVD" \
    -vRS='\r' \
    -F [:%] '/Copie en cours Titre/ {

{
a=("du -cm '$cheminDossierDVD/$nomDossierDVD' | grep total | cut -f1")
a|getline
tailleCopier=$0
close(a)
}

{pourcentDvdbackup=(tailleCopier*100)/tailleDVD}

{tempsActuel = strftime ("%s")};
{tailleCopierhumain = tailleDVDhumain*pourcentDvdbackup/100} ;
{pourcentZenity = (pourcentDvdbackup/nbrOperation)+0.1} ;
{tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

if (pourcentZenity<1) 
{printf "\n#Copie du DVD en cours...\\n\\n"
printf "Nom du DVD : %s \\n" , titreDVD
printf "Taille copiée : %d / %d Mo\\n" ,tailleCopier,tailleDVD
printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
printf "Veuillez patienter..." }

else {printf "\n%d\n" ,pourcentZenity
printf "\n#Copie du DVD en cours...\\n\\n"
printf "Nom du DVD : %s \\n" , titreDVD
printf "Taille copiée : %d / %d Mo\\n" ,tailleCopier,tailleDVD
printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
printf "%d %" , pourcentZenity}; fflush();}' |
awk '!x[$0]++;fflush();' |
zenity --progress \
       --title="DVD6clone" \
       --width=400 \
       --height=250 \
       --cancel-label="Annuler et retour au menu" \
       --auto-close

# Si Annuler retour au menu
[[ $? -eq 1 ]] && MENU

mkdir "$cheminDossierDVD/$nomDossierDVD"/AUDIO_TS

# Signal sononor
aplay /usr/share/dvd6clone/dvd6clone_sound.wav

# Message opération terminée
zenity --info \
       --title="DVD6clone" \
       --text="<big><b>Terminé !</b></big>
              \n<b>Chemin copie(s)</b>\n<span color=\"blue\">"$cheminDossierDVD/$nomDossierDVD"</span>"
}
#============================================================================================================================================
# Copie du DVD en ISO
#============================================================================================================================================
ISO()
{
# Choix nom video
cheminDossierDVD=$(zenity --file-selection \
                          --title="Sélectionnez le dossier de destination" \
                          --directory \
                          --filename="/home/$USER/Bureau/$titreDVD"\
                          --save)

# Si Retour au menu
[[ $? -eq 1 ]] && MENU

# Suppression dossier créer par zenity "cheminVideo"
rm -fr "$cheminDossierDVD"

nomDossierDVD=$(echo "$cheminDossierDVD" | awk -F "/" '{print $NF}')
echo "nomDossierDVD=$nomDossierDVD"

cheminDossierDVD=$(echo "$cheminDossierDVD" | awk '{gsub(/\/'"$nomDossierDVD"'$/,"",$0);print $0}')
echo "cheminDossierDVD=$cheminDossierDVD"

dossierMedia=$(df | awk '$1=="'$pathDevice'" {print $NF}')
echo "dossierMedia=$dossierMedia"

tailleDVD=$(du -cm "$dossierMedia" | grep "total" | awk '{printf "%d" ,$1}')
echo "tailleDVD=$tailleDVD"

# Remplacement espace par "_"
nomDossierDVD=$(echo "$nomDossierDVD" | tr " " "_")

# Vérification espace disque dur destination
nbrOperation="2"
ESPACEDESTINATION

tempsStart="$(date '+%s')"
{
dvdbackup -p -v -M -i "$pathDevice" -o "$dossierTMP" -n "$nomDossierDVD" 2>&1 |
awk -v nomDossierDVD="$nomDossierDVD" \
    -v cheminDossierDVD="$cheminDossierDVD" \
    -v tempsStart="$tempsStart" \
    -v nbrOperation="$nbrOperation" \
    -v tailleDVD="$tailleDVD" \
    -v titreDVD="$titreDVD" \
    -vRS='\r' \
    -F [:%] '/Copie en cours Titre/ {

{
a=("du -cm '$dossierTMP/$nomDossierDVD' | grep total | cut -f1")
a|getline
tailleCopier=$0
close(a)
}

{pourcentDvdbackup=(tailleCopier*100)/tailleDVD}

{tempsActuel = strftime ("%s")};
{tailleCopierhumain = tailleDVDhumain*pourcentDvdbackup/100} ;
{pourcentZenity = (pourcentDvdbackup/nbrOperation)+0.1} ;
{tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

if (pourcentZenity<1) 
{printf "\n#Copie du DVD en cours...\\n\\n"
printf "Nom du DVD : %s \\n" , titreDVD
printf "Taille copiée : %d / %d Mo\\n" ,tailleCopier,tailleDVD
printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
printf "Veuillez patienter..." }

else {printf "\n%d\n" ,pourcentZenity
printf "\n#Copie du DVD en cours...\\n\\n"
printf "Nom du DVD : %s \\n" , titreDVD
printf "Taille copiée : %d / %d Mo\\n" ,tailleCopier,tailleDVD
printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
printf "%d %" , pourcentZenity}; fflush();}' |
awk '!x[$0]++;fflush();' 

mkdir "$dossierTMP/$nomDossierDVD"/AUDIO_TS

# Création image ISO

tailleCopier=$(du -cm "$dossierTMP/$nomDossierDVD" | grep total | cut -f1)

[[ "$tailleCopier" -ge "$tailleDVD" ]] && genisoimage -v -r -J -o "$cheminDossierDVD/$nomDossierDVD.iso" "$dossierTMP/$nomDossierDVD" 2>&1 |

awk -v tempsStart="$tempsStart" \
-v nbrOperation="$nbrOperation" \
-v tailleDVD="$tailleDVD" \
-v titreDVD="$titreDVD" \
-vRS='\n' \
-F "." '/% done,/ {

{pourcentGenisoimage = $1} ;
{tempsActuel = strftime ("%s")};
{tailleCopier = tailleDVD*pourcentGenisoimage/100} ;
{pourcentZenity = (pourcentGenisoimage/nbrOperation)+50} ;
{tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

{printf "\n%d\n" ,pourcentZenity 
printf "\n#Création image ISO du DVD...\\n\\n"
printf "Nom du DVD : %s \\n" , titreDVD
printf "Taille ISO créée : %d/%d\\n" ,tailleCopier,tailleDVD
printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
printf "%d %" , pourcentZenity ; fflush();}}' |
awk '!x[$0]++;fflush();'
} | 
zenity --progress \
       --title="DVD6clone" \
       --width=400 \
       --height=250 \
       --cancel-label="Annuler et retour au menu" \
       --auto-close

# Si Annuler retour au menu
[[ $? -eq 1 ]] && MENU

# Signal sononor
aplay /usr/share/dvd6clone/dvd6clone_sound.wav

# Message opération terminée
zenity --info \
       --title="DVD6clone" \
       --text="<big><b>Terminé !</b></big>
              \n<b>Chemin copie(s)</b>\n<span color=\"blue\">"$cheminDossierDVD/$nomDossierDVD.iso"</span>"
}
#============================================================================================================================================
# Choix format de sortie
#============================================================================================================================================
FORMATCOPIETITRE()
{
choixFormat=$(zenity --list \
                     --radiolist\
                     --title="DVD6clone" \
                     --text="<b>Sélectionnez un format</b>" \
                     --ok-label="Valider choix" --cancel-label="Retour au menu" \
                     --hide-column="2" \
                     --print-column="2" \
                     --width=800  \
                     --height=450  \
                     --column=" " \
                     --column=" " \
                     --column=" " \
                     "TRUE" " 1" "Format VOB - Vidéo copie - Audio copie - sous-titrage copie" \
                     "FALSE" " 2" "Format MKV - Video copie - Audio copie - sous-titrage copie" \
                     "FALSE" " 3" "Format MKV - Video x264 - Audio ac3 - sous-titrage copie")

# Choix
case "$choixFormat"
        in
        " 1") VOB
              ;;

        " 2") MKV
              ;;
              
        " 3") X264
              ;;

        *)
esac
}
#============================================================================================================================================
# Format VOB
#============================================================================================================================================
VOB()
{
# Contrôle DVD
DVDIDENTIQUE

# Choix titre(s) à copier
ZENITYTITRE

zenityTitres=$(echo "$zenityTitres" | tr "|" " " | xargs -n 3)
echo "zenityTitres=$zenityTitres"

titres=$(echo "$zenityTitres" | awk '{print $1}')
echo "titres=$titres"

# Si selectionné tous les titres
if [[ $(echo $titres | awk '{print $1}') -eq "0" ]]; then
        titres="$numTitres"
        zenityTitres=$(echo "$infoDVD" | awk '{print $2,$4,$5}' | sort -u)
fi

echo "titres=$titres"
echo "zenityTitres=$zenityTitres"

dureeOperationTotal=$(echo "$zenityTitres" | awk '{dureeOperationTotal = dureeOperationTotal + $3} END {print dureeOperationTotal}')
echo "dureeOperationTotal=$dureeOperationTotal"

# Destination vidéo
typeVideo="vob"
DESTINATION_VIDEO

# Vérification espace disque dur destination
nbrOperation="2"
ESPACEDESTINATION

# Copie titre(s)
tempsCopier="1"
dureeOperationEffectue="1"
tempsStart="$(date '+%s')"

for i in $titres; do
      dureeSecTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $3}')
      dureeHMSTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $2}')

      mplayer -dvd-device "$pathDevice" -dumpstream dvdnav://$i -dumpfile "$cheminVideo-Titre-$i.vob" 2>&1 |

      awk -v titreDVD="$titreDVD" \
          -v dureeSecTitre="$dureeSecTitre" \
          -v dureeHMSTitre="$dureeHMSTitre" \
          -v tempsStart="$tempsStart" \
          -v dureeOperationEffectue="$dureeOperationEffectue" \
          -v tempsCopier="$tempsCopier" \
          -v dureeOperationTotal="$dureeOperationTotal" \
          -vRS='\r' \
          -F [~.] \
          '/%)/ {{pourcentMplayer = $2} ;
                 {tempsActuel = strftime ("%s")};
                 {tempsCopier = dureeSecTitre*pourcentMplayer/100} ;
                 {pourcentZenity = (100*(tempsCopier+dureeOperationEffectue))/dureeOperationTotal} ;
                  if (pourcentZenity<1) {pourcentZenity=1} ;
                 {tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

                 {printf "\n%d\n" ,pourcentZenity
                  printf "\n#Ripe du titre '$i' en cours...\\n\\n"
                  printf "Nom du DVD : %s \\n" , titreDVD
                  printf "Temps ripe du titre : %02d:%02d:%02d / %s \\n\\n", int(tempsCopier/3600), int(tempsCopier/60%60), tempsCopier%60 , dureeHMSTitre
                  printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
                  printf "%d %" , pourcentZenity ; fflush();}}'

      dureeOperationEffectue=$(echo "$dureeSecTitre" "$dureeOperationEffectue" | awk '{dureeOperationEffectue = $1+$2} END {print dureeOperationEffectue}')
      echo "$dureeOperationEffectue" > "$dossierTMP/dureeOperationEffectue.txt"
      echo "$cheminVideo-Titre-$i.vob" >> "$dossierTMP/destination.txt"

done |
awk '!x[$0]++;fflush();' |
zenity --progress \
       --title="DVD6clone" \
       --width=400 \
       --height=250 \
       --cancel-label="Annuler et retour au menu" \
       --auto-close

# Si Annuler retour au menu
[[ $? -eq 1 ]] && MENU

# Signal sononor
aplay /usr/share/dvd6clone/dvd6clone_sound.wav

# Message opération terminée
zenity --info \
       --title="DVD6clone" \
       --text="<big><b>Terminé !</b></big>
              \n<b>Chemin copie(s)</b>\n<span color=\"blue\">$(cat "$dossierTMP/destination.txt")</span>"
}
#============================================================================================================================================
# Format MKV video copie audio copie
#============================================================================================================================================
MKV()
{
# Contrôle DVD
DVDIDENTIQUE

# Choix titre(s) à copier
ZENITYTITRE

zenityTitres=$(echo "$zenityTitres" | tr "|" " " | xargs -n 3)
echo "zenityTitres=$zenityTitres"

titres=$(echo "$zenityTitres" | awk '{print $1}')
echo "titres=$titres"

# Si selectionné tous les titres
if [[ $(echo $titres | awk '{print $1}') -eq "0" ]]; then
        titres="$numTitres"
        zenityTitres=$(echo "$infoDVD" | awk '{print $2,$4,$5}' | sort -u)
fi

echo "titres=$titres"
echo "zenityTitres=$zenityTitres"

# Choix titre(s) à copier
zenityAudioSub=$(zenity --list \
                        --checklist \
                        --width=600 \
                        --height=800 \
                        --title="DVD6clone" \
                        --text="<b>Sélectionnez le titre à copier</b>" \
                        --ok-label="Valider choix" \
                        --cancel-label="Retour au menu" \
                        --separator=" " \
                        --hide-column="2,4,6,8,9,12,14,15" \
                        --print-column="3,5,6,7,8,10,11,13,15,16" \
                        --column=" " \
                        --column=" " \
                        --column="Titre" \
                        --column=" " \
                        --column="Durée" \
                        --column=" " \
                        --column="Piste" \
                        --column=" " \
                        --column=" " \
                        --column=" " \
                        --column="Langue" \
                        --column=" " \
                        --column="Format" \
                        --column=" " \
                        --column=" " \
                        --column="ID piste" \
                        $(for i in $titres; do
                                awk '{if ($2=='$i' && $6=="Audio" && $9=="fr") {print "TRUE",$0}
                                      else if ($2=='$i') {print "FALSE",$0}}' <<<"$infoDVD"
                          done))

# Si Quitter DVD6clone
[[ $? -eq 1 ]] && MENU

zenityAudioSub=$(echo "$zenityAudioSub" | xargs -n 10)
echo "zenityAudioSub=$zenityAudioSub"

titres=$(echo "$zenityAudioSub" | awk '{print $1}' | sort -u)
echo "titres=$titres"

dureeOperationVOB=$(echo "$zenityAudioSub" | awk '{print $1,$3}' | sort -u | awk '{time = time + $2} END {printf "%d\n", time}')
echo "dureeOperationVOB=$dureeOperationVOB"

dureeOperationMPG=$(echo "$zenityAudioSub" | awk '{print $1,$3}' | sort -u | awk '{time = time + $2} END {printf "%d\n", time}')
echo "dureeOperationMPG=$dureeOperationMPG"

dureeOperationSUB=$(echo "$zenityAudioSub" | awk '{if ($4=="Sous-titre") {time = time + $3}} END {printf "%d\n", time}')
echo "dureeOperationSUB=$dureeOperationSUB"

dureeOperationMKV="$dureeOperationVOB"
echo "dureeOperationMKV=$dureeOperationMKV"

dureeOperationTotal=$(echo "$dureeOperationVOB $dureeOperationMPG $dureeOperationSUB $dureeOperationMKV" | awk '{print $1+$2+$3+$4}')
echo "dureeOperationTotal=$dureeOperationTotal"

# Destination vidéo
typeVideo="mkv"
DESTINATION_VIDEO

# Vérification espace disque dur destination
nbrOperation="3"
ESPACEDESTINATION

#Extraction chapitrage
for i in $titres; do
dvdxchap -t $i "$pathDevice" > "$dossierTMP/chapters-titre-$i.txt"
done
{
# Ripe titre(s) sur disque dur
tempsCopier="1"
dureeOperationEffectue="1"
tempsStart="$(date '+%s')"

for i in $titres; do
      dureeSecTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $3}')
      dureeHMSTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $2}')

      mplayer -dvd-device "$pathDevice" -dumpstream dvdnav://$i -dumpfile "$dossierTMP/Titre-$i.vob" 2>&1 |

      awk -v titreDVD="$titreDVD" \
          -v dureeSecTitre="$dureeSecTitre" \
          -v dureeHMSTitre="$dureeHMSTitre" \
          -v tempsStart="$tempsStart" \
          -v dureeOperationEffectue="$dureeOperationEffectue" \
          -v tempsCopier="$tempsCopier" \
          -v dureeOperationTotal="$dureeOperationTotal" \
          -vRS='\r' \
          -F [~.] \
          '/%)/ {
          {pourcentMplayer = $2};
          {tempsActuel = strftime ("%s")};
          {tempsCopier = dureeSecTitre*pourcentMplayer/100} ;
          {pourcentZenity = (100*(tempsCopier+dureeOperationEffectue))/dureeOperationTotal} ;
           if (pourcentZenity<1) {pourcentZenity=1} ;
          {tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

          {printf "\n%d\n" ,pourcentZenity
           printf "\n#Ripe du titre '$i' en cours...\\n\\n"
           printf "Nom du DVD : %s \\n" , titreDVD
           printf "Temps ripe du titre : %02d:%02d:%02d / %s \\n\\n", int(tempsCopier/3600), int(tempsCopier/60%60), tempsCopier%60 , dureeHMSTitre
           printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
           printf "%d %" , pourcentZenity ; fflush();}}'

      dureeOperationEffectue=$(echo "$dureeSecTitre" "$dureeOperationEffectue" | awk '{dureeOperationEffectue = $1+$2} END {print dureeOperationEffectue}')
      echo "$dureeOperationEffectue" > "$dossierTMP/dureeOperationEffectue.txt"
done |
awk '!x[$0]++;fflush();'

# Caclul bande noir (crop)
mplayer "$dossierTMP/Titre-$i.vob" -vo null -nosound -vf cropdetect > "$dossierTMP/crop-Titre-$i.txt" &
pid=$!
sleep 10
kill $pid
crop=$(cat "$dossierTMP/crop-Titre-$i.txt" | awk -F [\(\)] '/Crop/ {print $2}' | awk 'END {print}')

# Convertion format mpeg / ac3
for i in $titres; do
        dureeOperationEffectue=$(cat "$dossierTMP/dureeOperationEffectue.txt")

        dureeSecTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $3}')
        dureeHMSTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $2}')

        cdeVideoMap=$(ffmpeg -i "$dossierTMP/Titre-$i.vob" 2>&1 | awk -F [\ [#] '{if ($5=="Stream" && $9=="Video:") {print "-map",$7}}' | xargs -n 1000)
        cdeAudioMap=$(ffmpeg -i "$dossierTMP/Titre-$i.vob" 2>&1 | awk -F [\ [#] '{if ($5=="Stream" && $9=="Audio:") {print "-map",$7}}' | xargs -n 1000)

        ffmpeg -y -i "$dossierTMP/Titre-$i.vob" -target pal-dvd $crop $cdeVideoMap $cdeAudioMap "$dossierTMP/Titre-$i.mpg" 2>&1 |
        awk -v titreDVD="$titreDVD" \
            -v dureeSecTitre="$dureeSecTitre" \
            -v dureeHMSTitre="$dureeHMSTitre" \
            -v tempsStart="$tempsStart" \
            -v dureeOperationEffectue="$dureeOperationEffectue" \
            -v tempsCopier="$tempsCopier" \
            -v dureeOperationTotal="$dureeOperationTotal" \
            -vRS='\r' \
            -F [:=.] \
            '/^frame/ {\
            {pourcentFFmpeg = (((($7*3600)+($8*60)+$9)*100)/110)} ; ;
            {tempsActuel = strftime ("%s")};
            {tempsCopier = (($7*3600)+($8*60)+$9)} ;
            {pourcentZenity = (100*(tempsCopier+dureeOperationEffectue))/dureeOperationTotal} ;
             if (pourcentZenity<1) {pourcentZenity=1} ;
            {tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

            {printf "\n%d\n" ,pourcentZenity
             printf "\n#Création vidéo MEPG du titre '$i' en cours...\\n\\n"
             printf "Nom du DVD : %s \\n" , titreDVD
             printf "Temps création du titre : %02d:%02d:%02d / %s \\n\\n", int(tempsCopier/3600), int(tempsCopier/60%60), tempsCopier%60 , dureeHMSTitre
             printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
             printf "%d %" , pourcentZenity ; fflush();}}'
        dureeOperationEffectue=$(echo "$dureeSecTitre" "$dureeOperationEffectue" | awk '{dureeOperationEffectue = $1+$2} END {print dureeOperationEffectue}')
        echo "$dureeOperationEffectue" > "$dossierTMP/dureeOperationEffectue.txt"
done |
awk '!x[$0]++;fflush();'

# ripe sous-titre(s)
dureeOperationEffectue=$(cat "$dossierTMP/dureeOperationEffectue.txt")
echo "dureeOperationEffectue=$dureeOperationEffectue"

for i in $titres; do
      dureeSecTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $3}')
      dureeHMSTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $2}')
      sid=$(awk '$1=='$i' && $4=="Sous-titre" {print $10}' <<< "$zenityAudioSub")

        for sid in $sid; do
                mencoder "$dossierTMP/Titre-$i.vob" -nosound -ovc frameno -sid "$sid" -vobsubout "$dossierTMP/Titre-$i-sid-$sid" -vobsuboutindex 0 -o /dev/null |
                awk -v titreDVD="$titreDVD" \
                    -v dureeSecTitre="$dureeSecTitre" \
                    -v dureeHMSTitre="$dureeHMSTitre" \
                    -v tempsStart="$tempsStart" \
                    -v dureeOperationEffectue="$dureeOperationEffectue" \
                    -v tempsCopier="$tempsCopier" \
                    -v dureeOperationTotal="$dureeOperationTotal" \
                    -F [%\(] \
                    -vRS='\r' \
                    '/%)/ {
                    {pourcentMencoder = $2} ;
                    {tempsActuel = strftime ("%s")};
                    {tempsCopier = dureeSecTitre*pourcentMencoder/100} ;
                    {pourcentZenity = (100*(tempsCopier+dureeOperationEffectue))/dureeOperationTotal} ;
                     if (pourcentZenity<1) {pourcentZenity=1} ;
                    {tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

                    {printf "\n%d\n" ,pourcentZenity
                    printf "\n#Ripe du sous-titre Titre-'$i'-sid-'$sid' en cours...\\n\\n"
                    printf "Nom du DVD : %s \\n" , titreDVD
                    printf "Temps ripe du sous-titre : %02d:%02d:%02d / %s \\n\\n", int(tempsCopier/3600), int(tempsCopier/60%60), tempsCopier%60 , dureeHMSTitre
                    printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
                    printf "%d %" , pourcentZenity ; fflush();}}'

        dureeOperationEffectue=$(echo "$dureeSecTitre" "$dureeOperationEffectue" | awk '{dureeOperationEffectue = $1+$2} END {print dureeOperationEffectue}')
        echo "$dureeOperationEffectue" > "$dossierTMP/dureeOperationEffectue.txt"
        done
done |
awk '!x[$0]++;fflush();'

# création vidéo MKV
dureeOperationEffectue=$(cat "$dossierTMP/dureeOperationEffectue.txt")

for i in $titres; do
        cdeVideoMKV=$(mkvmerge -i "$dossierTMP/Titre-$i.vob" | 
                      awk '$3==video {printf "-d %s -A -S -T --forced-track %s:no --track-name %d:video --display-dimensions %s:1024x576 '$dossierTMP'/Titre-'$i'.mpg" ,$3,$3,$3,$3}')

        cdeAudioMKV=$(echo "$zenityAudioSub" | 
                      awk '$1=='$i' && $4=="Audio" {printf " -a %d -D -S -T --forced-track %d:no --track-name %d:Audio_%s '$dossierTMP'/Titre-'$i'.mpg" ,$5,$5,$5,$7}')

        cdeSubMKV=$(echo "$zenityAudioSub" | 
                    awk '$1=='$i' && $4=="Sous-titre" {printf "-A -D -s 0 -T --forced-track 0:no --track-name 0:Sous-titre_%s '$dossierTMP'/Titre-'$i'-sid-%d.idx " ,$7,$10}')

        dureeSecTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $3}')
        dureeHMSTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $2}')

        mkvmerge -o "$cheminVideo-Titre-$i.mkv" $cdeVideoMKV $cdeAudioMKV $cdeSubMKV --chapters "$dossierTMP/chapters-titre-$i.txt" 2>&1 |

        awk -v titreDVD="$titreDVD" \
            -v dureeSecTitre="$dureeSecTitre" \
            -v dureeHMSTitre="$dureeHMSTitre" \
            -v tempsStart="$tempsStart" \
            -v dureeOperationEffectue="$dureeOperationEffectue" \
            -v tempsCopier="$tempsCopier" \
            -v dureeOperationTotal="$dureeOperationTotal" \
            -F [\ %] \
            -vRS='\r' \
            '/Progression :/ {
            {pourcentMkvmerge = $3} ;
            {tempsActuel = strftime ("%s")};
            {tempsCopier = dureeSecTitre*pourcentMkvmerge/100} ;
            {pourcentZenity = (100*(tempsCopier+dureeOperationEffectue))/dureeOperationTotal} ;
             if (pourcentZenity<1) {pourcentZenity=1} ;
            {tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

            {printf "\n%d\n" ,pourcentZenity
             printf "\n#Création vidéo MKV du titre '$i' en cours...\\n\\n"
             printf "Nom du DVD : %s \\n" , titreDVD
             printf "Temps ripe du titre : %02d:%02d:%02d / %s \\n\\n", int(tempsCopier/3600), int(tempsCopier/60%60), tempsCopier%60 , dureeHMSTitre
             printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
             printf "%d %" , pourcentZenity ; fflush();}}'

      dureeOperationEffectue=$(echo "$dureeSecTitre" "$dureeOperationEffectue" | awk '{dureeOperationEffectue = $1+$2} END {print dureeOperationEffectue}')
      echo "$dureeOperationEffectue" > "$dossierTMP/dureeOperationEffectue.txt"
      echo "$cheminVideo-Titre-$i.mkv" >> "$dossierTMP/destination.txt"
done |
awk '!x[$0]++;fflush();'
} |
zenity --progress \
       --title="DVD6clone" \
       --width=400 \
       --height=250 \
       --cancel-label="Annuler et retour au menu" \
       --auto-close

# Si Annuler retour au menu
[[ $? -eq 1 ]] && MENU

# Signal sononor
aplay /usr/share/dvd6clone/dvd6clone_sound.wav

# Message opération terminée
zenity --info \
       --title="DVD6clone" \
       --text="<big><b>Terminé !</b></big>
              \n<b>Chemin copie(s)</b>\n<span color=\"blue\">$(cat "$dossierTMP/destination.txt")</span>"
}
#============================================================================================================================================
# Format MKV vidéo X264 audio ac3
#============================================================================================================================================
X264()
{
# Contrôle DVD
DVDIDENTIQUE

# Choix titre(s) à copier
ZENITYTITRE

zenityTitres=$(echo "$zenityTitres" | tr "|" " " | xargs -n 3)
echo "zenityTitres=$zenityTitres"

titres=$(echo "$zenityTitres" | awk '{print $1}')
echo "titres=$titres"

# Si selectionné tous les titres
if [[ $(echo $titres | awk '{print $1}') -eq "0" ]]; then
        titres="$numTitres"
        zenityTitres=$(echo "$infoDVD" | awk '{print $2,$4,$5}' | sort -u)
fi

echo "titres=$titres"
echo "zenityTitres=$zenityTitres"

# Choix titre(s) à copier
zenityAudioSub=$(zenity --list \
                        --checklist \
                        --width=600 \
                        --height=800 \
                        --title="DVD6clone" \
                        --text="<b>Sélectionnez le titre à copier</b>" \
                        --ok-label="Valider choix" \
                        --cancel-label="Retour au menu" \
                        --separator=" " \
                        --hide-column="2,4,6,8,9,12,14,15" \
                        --print-column="3,5,6,7,8,10,11,13,15,16" \
                        --column=" " \
                        --column=" " \
                        --column="Titre" \
                        --column=" " \
                        --column="Durée" \
                        --column=" " \
                        --column="Piste" \
                        --column=" " \
                        --column=" " \
                        --column=" " \
                        --column="Langue" \
                        --column=" " \
                        --column="Format" \
                        --column=" " \
                        --column=" " \
                        --column="ID piste" \
                        $(for i in $titres; do
                                awk '{if ($2=='$i' && $6=="Audio" && $9=="fr") {print "TRUE",$0}
                                      else if ($2=='$i') {print "FALSE",$0}}' <<<"$infoDVD"
                          done))

# Si Quitter DVD6clone
[[ $? -eq 1 ]] && MENU

zenityAudioSub=$(echo "$zenityAudioSub" | xargs -n 10)
echo "zenityAudioSub=$zenityAudioSub"

titres=$(echo "$zenityAudioSub" | awk '{print $1}' | sort -u)
echo "titres=$titres"

dureeOperationVOB=$(echo "$zenityAudioSub" | awk '{print $1,$3}' | sort -u | awk '{time = time + $2} END {printf "%d\n", time}')
echo "dureeOperationVOB=$dureeOperationVOB"

dureeOperationMPG=$(echo "$zenityAudioSub" | awk '{print $1,$3}' | sort -u | awk '{time = time + $2} END {printf "%d\n", time}')
echo "dureeOperationMPG=$dureeOperationMPG"

dureeOperationSUB=$(echo "$zenityAudioSub" | awk '{if ($4=="Sous-titre") {time = time + $3}} END {printf "%d\n", time}')
echo "dureeOperationSUB=$dureeOperationSUB"

dureeOperationMKV="$dureeOperationVOB"
echo "dureeOperationMKV=$dureeOperationMKV"

dureeOperationTotal=$(echo "$dureeOperationVOB $dureeOperationMPG $dureeOperationSUB $dureeOperationMKV" | awk '{print $1+$2+$3+$4}')
echo "dureeOperationTotal=$dureeOperationTotal"

# Destination vidéo
typeVideo="mkv"
DESTINATION_VIDEO

# Vérification espace disque dur destination
nbrOperation="3"
ESPACEDESTINATION

# Choix qualité vidéo
crf=$(zenity --scale \
             --title="DVD6clone" \
             --text="<b>Sélectionnez la qualité de votre nouvelle vidéo</b>\n\nPetit nombre = meilleure qualité mais plus de temps de calcul\n" \
             --value=20 \
             --min-value=0 \
             --max-value=50 \
             --ok-label="Valider choix" \
             --cancel-label="Retour au menu")

# Si Retour au menu
[[ $? -eq 1 ]] && MENU

#Extraction chapitrage
for i in $titres; do
dvdxchap -t $i "$pathDevice" > "$dossierTMP/chapters-titre-$i.txt"
done
{
# Ripe titre(s) sur disque dur
tempsCopier="1"
dureeOperationEffectue="1"
tempsStart="$(date '+%s')"

for i in $titres; do
      dureeSecTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $3}')
      dureeHMSTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $2}')

      mplayer -dvd-device "$pathDevice" -dumpstream dvdnav://$i -dumpfile "$dossierTMP/Titre-$i.vob" 2>&1 |

      awk -v titreDVD="$titreDVD" \
          -v dureeSecTitre="$dureeSecTitre" \
          -v dureeHMSTitre="$dureeHMSTitre" \
          -v tempsStart="$tempsStart" \
          -v dureeOperationEffectue="$dureeOperationEffectue" \
          -v tempsCopier="$tempsCopier" \
          -v dureeOperationTotal="$dureeOperationTotal" \
          -vRS='\r' \
          -F [~.] \
          '/%)/ {
          {pourcentMplayer = $2};
          {tempsActuel = strftime ("%s")};
          {tempsCopier = dureeSecTitre*pourcentMplayer/100} ;
          {pourcentZenity = (100*(tempsCopier+dureeOperationEffectue))/dureeOperationTotal} ;
           if (pourcentZenity<1) {pourcentZenity=1} ;
          {tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

          {printf "\n%d\n" ,pourcentZenity
           printf "\n#Ripe du titre '$i' en cours...\\n\\n"
           printf "Nom du DVD : %s \\n" , titreDVD
           printf "Temps ripe du titre : %02d:%02d:%02d / %s \\n\\n", int(tempsCopier/3600), int(tempsCopier/60%60), tempsCopier%60 , dureeHMSTitre
           printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
           printf "%d %" , pourcentZenity ; fflush();}}'

      dureeOperationEffectue=$(echo "$dureeSecTitre" "$dureeOperationEffectue" | awk '{dureeOperationEffectue = $1+$2} END {print dureeOperationEffectue}')
      echo "$dureeOperationEffectue" > "$dossierTMP/dureeOperationEffectue.txt"
done |
awk '!x[$0]++;fflush();'

# Caclul bande noir (crop)
mplayer "$dossierTMP/Titre-$i.vob" -vo null -nosound -vf cropdetect > "$dossierTMP/crop-Titre-$i.txt" &
pid=$!
sleep 10
kill $pid
crop=$(cat "$dossierTMP/crop-Titre-$i.txt" | awk -F [\(\)] '/Crop/ {print $2}' | awk 'END {print}')

# Convertion format x264 / ac3
for i in $titres; do
        dureeOperationEffectue=$(cat "$dossierTMP/dureeOperationEffectue.txt")

        dureeSecTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $3}')
        dureeHMSTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $2}')

        cdeVideoMap=$(ffmpeg -i "$dossierTMP/Titre-$i.vob" 2>&1 | awk -F [\ [#] '{if ($5=="Stream" && $9=="Video:") {print "-map",$7}}' | xargs -n 1000)
        cdeAudioMap=$(ffmpeg -i "$dossierTMP/Titre-$i.vob" 2>&1 | awk -F [\ [#] '{if ($5=="Stream" && $9=="Audio:") {print "-map",$7}}' | xargs -n 1000)

        ffmpeg -y -i "$dossierTMP/Titre-$i.vob" -threads 0 $cdeVideoMap $cdeAudioMap -vcodec libx264 -preset slow -crf $crf $crop -acodec libfaac -ar 44100 -ab 128k -ac 2 "$dossierTMP/Titre-$i.mkv" 2>&1 |
        awk -v titreDVD="$titreDVD" \
            -v dureeSecTitre="$dureeSecTitre" \
            -v dureeHMSTitre="$dureeHMSTitre" \
            -v tempsStart="$tempsStart" \
            -v dureeOperationEffectue="$dureeOperationEffectue" \
            -v tempsCopier="$tempsCopier" \
            -v dureeOperationTotal="$dureeOperationTotal" \
            -vRS='\r' \
            -F [:=.] \
            '/^frame/ {\
            {pourcentFFmpeg = (((($7*3600)+($8*60)+$9)*100)/110)} ; ;
            {tempsActuel = strftime ("%s")};
            {tempsCopier = (($7*3600)+($8*60)+$9)} ;
            {pourcentZenity = (100*(tempsCopier+dureeOperationEffectue))/dureeOperationTotal} ;
             if (pourcentZenity<1) {pourcentZenity=1} ;
            {tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

            {printf "\n%d\n" ,pourcentZenity
             printf "\n#Convertion vidéo et audio du titre '$i' en cours...\\n\\n"
             printf "Nom du DVD : %s \\n" , titreDVD
             printf "Temps création du titre : %02d:%02d:%02d / %s \\n\\n", int(tempsCopier/3600), int(tempsCopier/60%60), tempsCopier%60 , dureeHMSTitre
             printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
             printf "%d %" , pourcentZenity ; fflush();}}'
        dureeOperationEffectue=$(echo "$dureeSecTitre" "$dureeOperationEffectue" | awk '{dureeOperationEffectue = $1+$2} END {print dureeOperationEffectue}')
        echo "$dureeOperationEffectue" > "$dossierTMP/dureeOperationEffectue.txt"
done |
awk '!x[$0]++;fflush();'

# ripe sous-titre(s)
dureeOperationEffectue=$(cat "$dossierTMP/dureeOperationEffectue.txt")
echo "dureeOperationEffectue=$dureeOperationEffectue"

for i in $titres; do
      dureeSecTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $3}')
      dureeHMSTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $2}')
      sid=$(awk '$1=='$i' && $4=="Sous-titre" {print $10}' <<< "$zenityAudioSub")

        for sid in $sid; do
                mencoder "$dossierTMP/Titre-$i.vob" -nosound -ovc frameno -sid "$sid" -vobsubout "$dossierTMP/Titre-$i-sid-$sid" -vobsuboutindex 0 -o /dev/null |
                awk -v titreDVD="$titreDVD" \
                    -v dureeSecTitre="$dureeSecTitre" \
                    -v dureeHMSTitre="$dureeHMSTitre" \
                    -v tempsStart="$tempsStart" \
                    -v dureeOperationEffectue="$dureeOperationEffectue" \
                    -v tempsCopier="$tempsCopier" \
                    -v dureeOperationTotal="$dureeOperationTotal" \
                    -F [%\(] \
                    -vRS='\r' \
                    '/%)/ {
                    {pourcentMencoder = $2} ;
                    {tempsActuel = strftime ("%s")};
                    {tempsCopier = dureeSecTitre*pourcentMencoder/100} ;
                    {pourcentZenity = (100*(tempsCopier+dureeOperationEffectue))/dureeOperationTotal} ;
                     if (pourcentZenity<1) {pourcentZenity=1} ;
                    {tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

                    {printf "\n%d\n" ,pourcentZenity
                    printf "\n#Ripe du sous-titre Titre-'$i'-sid-'$sid' en cours...\\n\\n"
                    printf "Nom du DVD : %s \\n" , titreDVD
                    printf "Temps ripe du sous-titre : %02d:%02d:%02d / %s \\n\\n", int(tempsCopier/3600), int(tempsCopier/60%60), tempsCopier%60 , dureeHMSTitre
                    printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
                    printf "%d %" , pourcentZenity ; fflush();}}'

        dureeOperationEffectue=$(echo "$dureeSecTitre" "$dureeOperationEffectue" | awk '{dureeOperationEffectue = $1+$2} END {print dureeOperationEffectue}')
        echo "$dureeOperationEffectue" > "$dossierTMP/dureeOperationEffectue.txt"
        done
done |
awk '!x[$0]++;fflush();'

# création vidéo MKV
dureeOperationEffectue=$(cat "$dossierTMP/dureeOperationEffectue.txt")

for i in $titres; do
        cdeVideoMKV=$(mkvmerge -i "$dossierTMP/Titre-$i.vob" | 
                      awk '$3==video {printf "-d %s -A -S -T --forced-track %s:no --track-name %d:video --display-dimensions %s:1024x576 '$dossierTMP'/Titre-'$i'.mkv" ,$3,$3,$3,$3}')

        cdeAudioMKV=$(echo "$zenityAudioSub" | 
                      awk '$1=='$i' && $4=="Audio" {printf " -a %d -D -S -T --forced-track %d:no --track-name %d:Audio_%s '$dossierTMP'/Titre-'$i'.mkv" ,$5,$5,$5,$7}')

        cdeSubMKV=$(echo "$zenityAudioSub" | 
                    awk '$1=='$i' && $4=="Sous-titre" {printf "-A -D -s 0 -T --forced-track 0:no --track-name 0:Sous-titre_%s '$dossierTMP'/Titre-'$i'-sid-%d.idx " ,$7,$10}')

        dureeSecTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $3}')
        dureeHMSTitre=$(echo "$zenityTitres" | awk '/^'$i'/ {print $2}')

        mkvmerge -o "$cheminVideo-Titre-$i.mkv" $cdeVideoMKV $cdeAudioMKV $cdeSubMKV --chapters "$dossierTMP/chapters-titre-$i.txt" 2>&1 |

        awk -v titreDVD="$titreDVD" \
            -v dureeSecTitre="$dureeSecTitre" \
            -v dureeHMSTitre="$dureeHMSTitre" \
            -v tempsStart="$tempsStart" \
            -v dureeOperationEffectue="$dureeOperationEffectue" \
            -v tempsCopier="$tempsCopier" \
            -v dureeOperationTotal="$dureeOperationTotal" \
            -F [\ %] \
            -vRS='\r' \
            '/Progression :/ {
            {pourcentMkvmerge = $3} ;
            {tempsActuel = strftime ("%s")};
            {tempsCopier = dureeSecTitre*pourcentMkvmerge/100} ;
            {pourcentZenity = (100*(tempsCopier+dureeOperationEffectue))/dureeOperationTotal} ;
             if (pourcentZenity<1) {pourcentZenity=1} ;
            {tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

            {printf "\n%d\n" ,pourcentZenity
             printf "\n#Création vidéo MKV du titre '$i' en cours...\\n\\n"
             printf "Nom du DVD : %s \\n" , titreDVD
             printf "Temps ripe du titre : %02d:%02d:%02d / %s \\n\\n", int(tempsCopier/3600), int(tempsCopier/60%60), tempsCopier%60 , dureeHMSTitre
             printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
             printf "%d %" , pourcentZenity ; fflush();}}'

      dureeOperationEffectue=$(echo "$dureeSecTitre" "$dureeOperationEffectue" | awk '{dureeOperationEffectue = $1+$2} END {print dureeOperationEffectue}')
      echo "$dureeOperationEffectue" > "$dossierTMP/dureeOperationEffectue.txt"
      echo "$cheminVideo-Titre-$i.mkv" >> "$dossierTMP/destination.txt"
done |
awk '!x[$0]++;fflush();'
} |
zenity --progress \
       --title="DVD6clone" \
       --width=400 \
       --height=250 \
       --cancel-label="Annuler et retour au menu" \
       --auto-close

# Si Annuler retour au menu
[[ $? -eq 1 ]] && MENU

# Signal sononor
aplay /usr/share/dvd6clone/dvd6clone_sound.wav

# Message opération terminée
zenity --info \
       --title="DVD6clone" \
       --text="<big><b>Terminé !</b></big>
              \n<b>Chemin copie(s)</b>\n<span color=\"blue\">$(cat "$dossierTMP/destination.txt")</span>"
}
#============================================================================================================================================
# Convertion vobsub en STR
#============================================================================================================================================
STR()
{
# Contrôle DVD
DVDIDENTIQUE

# Choix titre(s) à copier
ZENITYTITRE

zenityTitres=$(echo "$zenityTitres" | tr "|" " " | xargs -n 3)
echo "zenityTitres=$zenityTitres"

titres=$(echo "$zenityTitres" | awk '{print $1}')
echo "titres=$titres"

# Si selectionné tous les titres
if [[ $(echo $titres | awk '{print $1}') -eq "0" ]]; then
        titres="$numTitres"
        zenityTitres=$(echo "$infoDVD" | awk '{print $2,$4,$5}' | sort -u)
fi

echo "titres=$titres"
echo "zenityTitres=$zenityTitres"

# Choix titre(s) à copier
zenitySub=$(zenity --list \
                        --checklist \
                        --width=500 \
                        --height=800 \
                        --title="DVD6clone" \
                        --text="<b>Choississez un ou des sous-titres à convertir en STR</b>" \
                        --ok-label="Valider choix" \
                        --cancel-label="Retour au menu" \
                        --separator=" " \
                        --hide-column="2,4,5,6,7,8,9,10,12,13,14,15,17" \
                        --print-column="3,5,6,7,8,10,11,13,16,17" \
                        --column=" " \
                        --column=" " \
                        --column="Titre" \
                        --column=" " \
                        --column="Durée" \
                        --column=" " \
                        --column="Piste" \
                        --column=" " \
                        --column=" " \
                        --column=" " \
                        --column="Langue" \
                        --column=" " \
                        --column="Format" \
                        --column=" " \
                        --column=" " \
                        --column="ID piste" \
                        --column=" " \
                        $(for i in $titres; do
                                awk '{if ($2=='$i' && $9=="fr") {print "TRUE",$0,"fra"}
                                 else if ($2=='$i' && $9=="en") {print "FALSE",$0,"eng"}
                                 else if ($2=='$i' && $9=="de") {print "FALSE",$0,"deu"}
                                 else if ($2=='$i' && $9=="es") {print "FALSE",$0,"spa"}
                                 else if ($2=='$i' && $9=="nl") {print "FALSE",$0,"nld"}
                                 else if ($2=='$i' && $9=="it") {print "FALSE",$0,"ita"}
                                 else if ($2=='$i' && $9=="pt") {print "FALSE",$0,"por"}}' <<< "$(awk '$6=="Sous-titre" {print $0}' <<< "$infoDVD")"
                          done))

# Si Quitter DVD6clone
[[ $? -eq 1 ]] && MENU

zenitySub=$(echo "$zenitySub" | xargs -n 10)
echo "zenitySub=$zenitySub"

titres=$(echo "$zenitySub" | awk '{print $1}' | sort -u)
echo "titres=$titres"

dureeOperationVOB=$(echo "$zenitySub" | awk '{print $1,$3}' | sort -u | awk '{time = time + $2} END {printf "%d\n", time}')
echo "dureeOperationVOB=$dureeOperationVOB"

dureeOperationSTR=$(echo "$zenitySub" | awk '{if ($4=="Sous-titre") {time = time + $3}} END {printf "%d\n", time}')
echo "dureeOperationSTR=$dureeOperationSTR"

dureeOperationTotal=$(echo "$dureeOperationVOB $dureeOperationSUB $dureeOperationSTR" | awk '{print $1+$2+$3}')
echo "dureeOperationTotal=$dureeOperationTotal"

# Destination vidéo
typeVideo="str"
DESTINATION_VIDEO

# Création dossier PGM
dossierPGM="$dossierTMP/PGM"
mkdir "$dossierPGM"

# Vérification espace disque dur destination
nbrOperation="1"
ESPACEDESTINATION

{
# Ripe titre(s) sur disque dur
tempsCopier="1"
dureeOperationEffectue="1"
tempsStart="$(date '+%s')"

for i in $titres; do
      dureeSecTitre=$(echo "$zenitySub" | awk '/^'$i'/ {print $3}' | sort -u)
      dureeHMSTitre=$(echo "$zenitySub" | awk '/^'$i'/ {print $2}' | sort -u)

      mplayer -dvd-device "$pathDevice" -dumpstream dvdnav://$i -dumpfile "$dossierTMP/Titre-$i.vob" 2>&1 |

        awk -v titreDVD="$titreDVD" \
          -v dureeSecTitre="$dureeSecTitre" \
          -v dureeHMSTitre="$dureeHMSTitre" \
          -v tempsStart="$tempsStart" \
          -v dureeOperationEffectue="$dureeOperationEffectue" \
          -v tempsCopier="$tempsCopier" \
          -v dureeOperationTotal="$dureeOperationTotal" \
          -vRS='\r' \
          -F [~.] \
          '/%)/ {
          {pourcentMplayer = $2} ;
          {tempsActuel = strftime ("%s")};
          {tempsCopier = dureeSecTitre*pourcentMplayer/100} ;
          {pourcentZenity = (100*(tempsCopier+dureeOperationEffectue))/dureeOperationTotal} ;
           if (pourcentZenity<1) {pourcentZenity=1} ;
          {tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

          {printf "\n%d\n" ,pourcentZenity
           printf "\n#Ripe du titre '$i' en cours...\\n\\n"
           printf "Nom du DVD : %s \\n" , titreDVD
           printf "Temps ripe du titre : %02d:%02d:%02d / %s \\n\\n", int(tempsCopier/3600), int(tempsCopier/60%60), tempsCopier%60 , dureeHMSTitre
           printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
           printf "%d %" , pourcentZenity ; fflush();}}'

        dureeOperationEffectue=$(echo "$dureeSecTitre" "$dureeOperationEffectue" | awk '{dureeOperationEffectue = $1+$2} END {print dureeOperationEffectue}')
        echo "$dureeOperationEffectue" > "$dossierTMP/dureeOperationEffectue.txt"
done |
awk '!x[$0]++;fflush();'

# Opération transformation Vobsub en STR
for i in $titres; do

        sid=$(awk '$1=='$i' && $4=="Sous-titre" {print $9}' <<< "$zenitySub")

        for sid in $sid; do

        # Création dossier extraction sous-titre
        mkdir "$dossierPGM/Titre-$i-sid-$sid"
        cd "$dossierPGM/Titre-$i-sid-$sid"

        # extraction soustitre
        tcextract -i "$dossierTMP/Titre-$i.vob" -x ps1 -a $((0x20 + $sid)) > "vobsub-Titre-$i-sid-$sid"

        # Extraction soustitres en images PGM
        subtitle2pgm -i "vobsub-Titre-$i-sid-$sid" -o "vobsub-Titre-$i-sid-$sid" -c 0,0,255,255

        # Liste fichiers PGM
        fichierPGM=$(ls | grep ".pgm$")
        nbrFichiersPGM=$(ls | grep ".pgm$" | wc -l )

        dureeOperationEffectue=$(cat "$dossierTMP/dureeOperationEffectue.txt")
        pourcentDejaEffectue=$(echo "$dureeOperationEffectue $dureeOperationTotal" | awk '{pourcentDejaEffectue = ($1*100)/$2} END {print pourcentDejaEffectue}')
        dureeSecTitre=$(echo "$zenitySub" | awk '/^'$i'/ {print $3}' | sort -u)

                for fichierPGM in $fichierPGM; do
                        langue=$(echo "$zenitySub" | awk '$1=='$i' && $9=='$sid' {print $10}' | sort -u)
                        tesseract "$fichierPGM" "$fichierPGM" -l "$langue" 2>&1
                        nbrFichiersTXT=$(ls -l | grep ".txt$" | wc -l )
                        echo "$nbrFichiersPGM $nbrFichiersTXT" |

                        awk -v dureeSecTitre="$dureeSecTitre" \
                            -v dureeOperationTotal="$dureeOperationTotal" \
                            -v pourcentDejaEffectue="$pourcentDejaEffectue" \
                            -v tempsStart="$tempsStart" \
                            -v titreDVD="$titreDVD" \
                            '{pourcentTesseract = ($2*100/$1)};
                             {pourcentZenity = pourcentDejaEffectue+(pourcentTesseract/(dureeOperationTotal/dureeSecTitre))};
                             {tempsActuel = strftime ("%s")};
                             {tempsRestantSecTotal = ((tempsActuel-tempsStart)*100/pourcentZenity)-(tempsActuel-tempsStart)};

                             {printf "\n%d\n" ,pourcentZenity
                              printf "\n#Scannage sous-titre Titre-'$i'-sid-'$sid' en cours...\\n\\n"
                              printf "Nom du DVD : %s \\n" , titreDVD
                              printf "Images scannées : %s / %s \\n\\n" ,'$nbrFichiersTXT','$nbrFichiersPGM' 
                              printf "Temps total restant estimé : %02d:%02d:%02d \\n\\n", int(tempsRestantSecTotal/3600), int(tempsRestantSecTotal/60%60), tempsRestantSecTotal%60
                              printf "%d %\n" , pourcentZenity ; fflush();}'
                done |
                awk '!x[$0]++;fflush();'

        # Création sous-titre STR
        langue=$(echo "$zenitySub" | awk '$1=='$i' && $9=='$sid' {print $10}' | sort -u)
        srttool -s -i "vobsub-Titre-$i-sid-$sid.srtx" -o "$cheminVideo-Titre-$i-sid-$sid-$langue.srt" 

        dureeOperationEffectue=$(echo "$dureeSecTitre" "$dureeOperationEffectue" | awk '{dureeOperationEffectue = $1+$2} END {print dureeOperationEffectue}')
        echo "$dureeOperationEffectue" > "$dossierTMP/dureeOperationEffectue.txt"
        echo "$cheminVideo-Titre-$i-sid-$sid-$langue.srt" >> "$dossierTMP/destination.txt"
        done
done

} |
zenity --progress \
       --title="DVD6clone" \
       --width=400 \
       --height=250 \
       --cancel-label="Annuler et retour au menu" \
       --auto-close
       
# Signal sononor
aplay /usr/share/dvd6clone/dvd6clone_sound.wav

# Message opération terminée
zenity --info \
       --title="DVD6clone" \
       --width=500 \
       --height=250 \
       --text="<big><b>Terminé !</b></big>
              \n<b>Chemin copie(s)</b>\n<span color=\"blue\">$(cat "$dossierTMP/destination.txt")</span>"
}
#============================================================================================================================================
# Information DVD
#============================================================================================================================================
INFODVD()
{
zenity --text-info \
       --title="DVD6clone" \
       --width=1200  \
       --height=800  \
       --filename=""$dossierTMP/lsdvd.txt""
}
#============================================================================================================================================
# Aide
#============================================================================================================================================
AIDE()
{
zenity --text-info \
       --title="DVD6clone" \
       --width=1200  \
       --height=800  \
       --filename="/usr/share/dvd6clone/DVD6clone-info.txt"
}
#============================================================================================================================================
# Lancement programme
#============================================================================================================================================
DVDMONTE
MENU

Démarrage et utilisation de DVD6clone

Tapons dans un terminal le chemin vers le fichier du script, par exemple si il se trouve dans notre /home.

/home/$USER/DVD6clone

ou plus simplement en faisant un double clic dessus le fichier DVD6clone

L'utilisation de DVD6clone est relativement simple pour plus d'info à son sujet consultez l'option “Aide et info de DVD6clone” dans le menu principal de DVD6clone.

Liens

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
utilisateurs/slyfox/scripts/dvd6clone.1453982742.txt.gz · Dernière modification: 28/01/2016 13:05 par Slyfox

Pied de page des forums

Propulsé par FluxBB