#!/bin/bash set -euo pipefail IFS=$'\n\t' function checkGlobal() { hash mkvmerge 2>/dev/null || { echo >&2 "Erreur: Commande mkvmerge pas trouvé, merci de l'installer" exit 1 } hash mkvextract 2>/dev/null || { echo >&2 "Erreur: Commande mkvmerge pas trouvé, merci de l'installer" exit 1 } } ## on lance la fonction checkGlobal # $1 est le fichier à traiter préciser dans la commande # On récupère le nom du fichier fichier=$(basename "$1") echo "Traitement du fichier $fichier" ## Check input file. if [ ! -f "$fichier" ]; then echo >&2 "ErroErreurr: Fichier d'entrée non trouvé" exit 1 fi # Si le fichier est un fichier avi ou mp4, on le converti en mkv if [[ $fichier != *.mkv ]]; then echo "Convertion du fichier $fichier en mkv" find "*" -execdir mkvmerge -o {}.mkv {} \; fi # Si le fichier est un fichier mkv on continue if [[ $fichier == *.mkv ]]; then mkvinfo "$fichier" | awk '/audio/ || /Langue/ || /mkvextract/ || /Identifiant du codec:/ || /Nom:/' fi echo " On extrait la vidéo ? (y/n)" read RepVideo if [ "$RepVideo" == "n" ]; then echo "On ne extrait pas la vidéo" fi echo " Combien d'audio voulez-vous traiter ? " read nb_lang echo " Combien de sous-titres voulez-vous traiter ? " read nb_sub echo " Voulez vous encoder les audios ? (y/n)" read encoder if [ "$encoder" == "y" ]; then echo "Dois-je supprimer les anciens audio après l'encodage ? (y/n)" read supprimer if [ "$supprimer" == "n" ]; then echo "Ok on ne supprime pas les fichiers audio" fi fi if [ "$encoder" == "n" ]; then echo "Ok on encode pas !" fi audio_var=() lang_var=() audio_ext=() st_var=() st_ext=() st_lang=() new_ext_audio=() bit_audio=() for ((c = 1; c <= $nb_lang; c++)); do echo "Quelle est l'ID de la piste audio $c ?" read temp audio_var+=($temp) echo "Quelle est la langue de la piste audio $c ?" read temp lang_var+=($temp) echo "Quelle est l'extension de la piste audio $c ? (Attention, si votre audio est AC3 ou EAC3 mettez [']ac3'" read temp audio_ext+=($temp) done for ((c = 1; c <= $nb_sub; c++)); do echo "Quelle est l'ID de la piste sous-titres $c ?" read temp st_var+=($temp) echo "Quelle est la langue de la piste sous-titres $c ?" read temp st_lang+=($temp) echo "Quelle est l'extension de la piste sous-titres $c ? ( Information, si le sous-titre est un VobSub mettez 'sub'" read temp st_ext+=($temp) done if [ "$encoder" == "y" ]; then echo "Quelle est le codec de l'audio ?" read new_ext_audio echo "Quelle est la bitrate de l'audio ?" read bit_audio fi echo " Souhaitez vous renommer le dossier audio ? (y/n)" read reponse if [ "$reponse" == "y" ]; then echo "Quel est le nouveau nom du dossier audio ?" read nom_dossier fi if [ "$reponse" == "n" ]; then echo "D'accord je ne modifie pas le nom du dossier !" fi if [ -d "audio" ]; then echo "Le dossier audio existe" else mkdir audio echo "Le dossier audio n'existe pas, il a été créé" fi if [ -d "video" ]; then echo "Le dossier video existe" else mkdir video echo "Le dossier video n'existe pas, il a été créé" fi if [ "$RepVideo" == "y" ]; then for i in *.mkv; do mkvmerge --output video/"$i"'.VIDEO.mkv' \ --no-audio \ --no-subtitles \ --no-chapters \ --no-attachments \ --no-global-tags \ --language 0:und \ --default-track 0:yes \ --display-dimensions 0:1920x1080 \ '(' "$i" ')' \ --title "", done fi for ((c = 0; c <= $nb_lang - 1; c++)); do find *.mkv -execdir mkvextract {} tracks ${audio_var[$c]}:{}.${lang_var[$c]}.${audio_ext[$c]} \; echo "Lancement de mkvextract audio" mv *.${lang_var[$c]}.${audio_ext[$c]} audio/ done # fin de la boucle audio for ((c = 0; c <= $nb_sub - 1; c++)); do find *.mkv -execdir mkvextract {} tracks ${st_var[$c]}:{}.${st_lang[$c]}.${st_ext[$c]} \; echo "Lancement de mkvextract sous-titres" mv *.${st_lang[$c]}.${st_ext[$c]} audio/ if [ ${st_ext} == "sub" ]; then mv *.idx audio/ fi done # fin de la boucle sous-titres cd audio/ echo "Les fichiers audio ont été déplacés dans le dossier audio" # Regarder si le nom du fichier contient .mkv dedans for i in *; do i2=$(echo $i | sed -E 's/.mp4|.avi|.mkv//gm;t;d') mv "$i" "$i2" done if [ "$reponse" == "y" ]; then cd .. mv audio "$nom_dossier" cd "$nom_dossier" fi if [ "$encoder" == "y" ]; then for i in *.${audio_ext}; do ffmpeg -i "$i" -c:a ${new_ext_audio} -b:a ${bit_audio}k "$i.${new_ext_audio}" echo "Lancement de l'encodage de l'audio" done fi if [ "$encoder" == "y" ]; then if [ "$supprimer" == "y" ]; then rm *.${audio_ext} echo "Les fichiers audio ont été supprimés" fi fi #Le script est fini echo "Merci de m'avoir utilisé !" exit 0