Script_Torrent/extract.sh
2022-03-02 21:13:20 +01:00

242 lines
5.4 KiB
Bash
Executable File

#!/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
if [ $nb_lang != 0 ]; then
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
else
encoder="n"
echo "Ok on ne traite pas d'audio"
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 [ "$RepVideo" == "y" ]; then
if [ -d "video" ]; then
echo "Le dossier video existe"
else
mkdir video
echo "Le dossier video n'existe pas, il a été créé"
fi
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
if [ -d "FAIT" ]; then
echo "ok"
else
mkdir FAIT/
fi
for i in *.${audio_ext}; do
ffmpeg -i "$i" -c:a ${new_ext_audio} -b:a ${bit_audio}k "$i.new.${new_ext_audio}"
echo "Lancement de l'encodage de l'audio"
mv *.new.${new_ext_audio} FAIT/
done
fi
if [ "$encoder" == "y" ]; then
if [ "$supprimer" == "y" ]; then
rm *.${audio_ext}
echo "Les fichiers audio ont été supprimés"
mv FAIT/* .
rm -r FAIT/
for i in *.${audio_ext}; do
i2=$(echo $i | sed -E 's/.new.ac3//gm;t;d')
mv "$i" "$i2"
done
fi
fi
#Le script est fini
echo "Merci de m'avoir utilisé !"
exit 0