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 →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
utilisateurs:slyfox:scripts:dvd6clone [20/10/2016 18:58] Slyfox [Script Bash DVD6clone] |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== DVD6clone ====== | ||
- | |||
- | * Objet : Le but de ce tutoriel va être d'installer DVD6clone, étape par étape, sur Debian. | ||
- | * Niveau requis : {{tag>débutant}} | ||
- | * Commentaires : - | ||
- | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) | ||
- | * Suivi : {{tag>en chantier}} | ||
- | * Création par [[user>Slyfox]] 31/03/2014 | ||
- | * Testé par **Slyfox** le 31/03/2014 sur Debian Wheezy Stable 64 bits | ||
- | * Testé par **-** le --/--/---- sur Debian Jessie Testing FIXME | ||
- | * Testé par **-** le --/--/---- sur Debian Sid FIXME | ||
- | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=8768 | Wiki DVD6clone]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
- | |||
- | ===== 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 ===== | ||
- | |||
- | <note tip>Pour plus d'info sur l'édition du fichier sources.list voir ici : [[http://wiki.debian-facile.org/doc:systeme:apt:sources.list|Lien sources.list]] | ||
- | |||
- | Pour en savoir sur plus les outils de gestion des dépôts et paquets: [[:doc:systeme:apt:clients | les outils apt]]:</note> | ||
- | |||
- | <note important> // **L'ensemble des commandes qui vont suivre sont à effectuer dans un terminal en tant que [[:doc:systeme:superutilisateur]]** (([[:doc:systeme:su]]))//</note> | ||
- | |||
- | Nous allons éditer notre fichier ''/etc/apt/sources.list'' (([[:doc:systeme:apt:sources.list | Les fichiers sources.list]])) afin d'y avoir accès. \\ | ||
- | |||
- | Pour cela nous utiliserons, tout au long du tuto, l'éditeur de texte [[:doc:editeurs:nano | nano]]. | ||
- | <code root>nano /etc/apt/sources.list</code> | ||
- | |||
- | Puis rajoutons les lignes suivantes pour autant qu'ils ne soit pas déjà écrites : | ||
- | |||
- | **Pour debian version Stable** | ||
- | <file apt_sources /etc/apt/sources.list> | ||
- | # stable deb-multimedia | ||
- | deb http://www.deb-multimedia.org stable main non-free | ||
- | </file> | ||
- | |||
- | **Pour debian version Testing** | ||
- | <file apt_sources /etc/apt/sources.list> | ||
- | # stable deb-multimedia | ||
- | deb http://www.deb-multimedia.org testing main non-free | ||
- | </file> | ||
- | |||
- | **Pour debian version Sid** | ||
- | <file apt_sources /etc/apt/sources.list> | ||
- | # stable deb-multimedia | ||
- | deb http://www.deb-multimedia.org sid main non-free | ||
- | </file> | ||
- | |||
- | Enregistrons (ctrl+o) acceptons l'enregistrement du fichier via ENTER et quittons nano (ctrl+x) | ||
- | |||
- | Enregistrons la clé du dépôt multimédia | ||
- | |||
- | <code root>apt-get install debian-keyring && gpg --keyring /usr/share/keyrings/debian-keyring.gpg -a --export 07DC563D1F41B907 |apt-key add -</code> | ||
- | |||
- | Puis rafraîchissons la liste des paquets | ||
- | <code root>apt-get update</code> | ||
- | |||
- | |||
- | |||
- | |||
- | ===== Installation des dépendances ===== | ||
- | |||
- | Installons les dépendances nécessaire à DVD6clone. | ||
- | |||
- | <code root>apt-get install libdvdcss 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 subtitleripper</code> | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ===== 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: | ||
- | |||
- | <code>chmod +x /home/$USER/DVD6clone</code> | ||
- | |||
- | |||
- | <code>#! /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" | ||
- | |||
- | |||
- | # 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</code> | ||
- | |||
- | ===== 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. | ||
- | |||
- | <code>/home/$USER/DVD6clone</code> | ||
- | |||
- | ou plus simplement en faisant un double clic dessus le fichier <key>DVD6clone</key> | ||
- | |||
- | 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. | ||
- | |||
- | {{ /file-R71e12d66c5e8c8825e9fab663c20fe44.png?1000 }} | ||
- | |||
- | |||
- | |||
- | ===== Liens ===== | ||
- | |||
- | [[http://debian-facile.org/viewtopic.php?id=8019|Discussion sur le forum concernant DVD6clone]] | ||
- | |||
- | [[https://launchpad.net/~slyfox-free/+archive/dvd6clone/|ppa:slyfox-free/dvd6clone]] remarque ce lien est HS !!! | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||