Modification de la structure des dossiers. Script principal d'installation : install.sh

This commit is contained in:
2023-11-15 00:44:49 +01:00
parent a014df4309
commit ce33c77ac4
12 changed files with 601 additions and 300 deletions

129
local/bin/check_domain_cert.sh Executable file
View File

@@ -0,0 +1,129 @@
#!/bin/bash
domain="$1"
port="${2:-443}" # Utilise 443 par défaut si le 3ème paramètre (port) n'est pas fourni
# Fonction pour effectuer le test SSL/TLS et obtenir la différence en jours jusqu'à l'expiration
get_days_until_expiration() {
local domain="$1"
local port="$2"
# Tester la date d'expiration du domaine sur le port spécifié
expiration_date=$(echo | openssl s_client -connect "$domain":"$port" -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
# Convertir la date d'expiration en timestamp
expiration_timestamp=$(date -d "$expiration_date" +%s)
# Calculer le nombre de jours restants jusqu'à l'expiration
today_timestamp=$(date +%s)
local diff=$(( (expiration_timestamp - today_timestamp) / 86400 ))
echo $diff
}
check_date() {
local domain="$1"
local port="$2"
echo "Tester la date d'expiration du domaine $domain sur le port $port"
# Obtenir la différence en jours jusqu'à l'expiration
days_until_expiration=$(get_days_until_expiration "$domain" "$port")
echo $days_until_expiration
# Vérifier si $days_until_expiration est supérieur à 126
if [ "$days_until_expiration" -gt 126 ]; then
exit 127
else
exit $days_until_expiration
fi
}
# Fonction pour tester si un MX existe et le tester
check_domain_mx() {
local domain="$1"
local port="$2"
# Vérifier si le domaine commence par "www" ou s'il n'a pas de sous-domaine (domain.tld)
if [[ "$domain" == *.* && ! "$domain" == *.*.* ]]; then
echo -e "Tester l'existence du champ MX pour le domaine $domain"
# Récupérer toutes les réponses MX pour le domaine
mx_domains=$(dig +short MX "$domain" | awk '{sub(/\.$/, "", $2); print $2}')
if [ -n "$mx_domains" ]; then
# Tester chaque domaine MX trouvé sur le port 993
for mx_domain in $mx_domains; do
# Vérifier que le port 993 est ouvert
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 993; then
check_date "$mx_domain" "993" "$email"
else
echo -e " ⚠️ Le port 993 n'est pas ouvert sur le domaine MX $mx_domain."
fi
done
for mx_domain in $mx_domains; do
# Vérifier que le port 465 est ouvert et tester la connexion SSL
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 465; then
check_date "$mx_domain" "465" "$email"
else
echo -e " ⚠️ Le port 465 (SMTPS) n'est pas ouvert sur le domaine MX $mx_domain."
fi
done
else
if [ -n "$email" ]; then
echo " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide." | mail -s " ⚠️ [ALERTE] MX absent pour $domain:$port" "$email"
fi
echo -e " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide."
fi
else
echo -e "Tester l'existence du champ MX pour le domaine ${domain#*.}"
# Récupérer toutes les réponses MX pour le domaine
mx_domains=$(dig +short MX "${domain#*.}" | awk '{sub(/\.$/, "", $2); print $2}')
if [ -n "$mx_domains" ]; then
# Tester chaque domaine MX trouvé sur le port 993
for mx_domain in $mx_domains; do
# Vérifier que le port 993 est ouvert
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 993; then
check_date "$mx_domain" "993" "$email"
else
echo -e " ⚠️ Le port 993 n'est pas ouvert sur le domaine MX $mx_domain."
fi
done
for mx_domain in $mx_domains; do
# Vérifier que le port 465 est ouvert et tester la connexion SSL
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 465; then
check_date "$mx_domain" "465" "$email"
else
echo -e " ⚠️ Le port 465 (SMTPS) n'est pas ouvert sur le domaine MX $mx_domain."
fi
done
else
if [ -n "$email" ]; then
echo " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide." | mail -s " ⚠️ [ALERTE] MX absent pour $domain:$port" "$email"
fi
echo -e " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide."
fi
fi
}
# Vérifier si le nom de domaine est accessible en utilisant "curl"
if curl --output /dev/null --silent --head --fail "$domain"; then
# Appel initial pour le domaine spécifié
check_date "$domain" "$port"
# Vérifier le domaine MX s'il existe
#check_domain_mx "$domain" "$port"
else
echo " ⚠️ Le domaine $domain n'est pas accessible."
exit -1
fi

270
local/bin/convertMKV.sh Executable file
View File

@@ -0,0 +1,270 @@
#!/bin/bash
###############################################################################
#
# Script to recursively search a directory and batch convert all files of a given
# file type into another file type via HandBrake conversion.
#
# To run in your environment set the variables:
# hbcli - Path to your HandBrakeCLI
#
# source_dir - Starting directory for recursive search
#
# input_file_type - Input file type to search for
#
# output_file_type - Output file type to convert into
#
#
# Change log:
# 2012-01-08: Initial release. Tested on Mac OS X Lion.
#
###############################################################################
#clear
logFile=~/$(basename ${0}).log
echo -e "\n"
echo -e "==> Préparation de l'environnement...\n"|tee $logFile
echo ""
if [ -f "$1" ]; then
echo -e "Le paramètre est un fichier : $1\n" |tee -a $logFile
type="file"
input_file=$1
shift
else
echo -e "Le paramètre n'est pas un fichier\n" |tee -a $logFile
fi
if [ -d "$1" ]; then
echo -e "Le paramètre est un dossier : $1\n" |tee -a $logFile
cd $1
shift
else
echo -e "Le paramètre n'est pas un dossier\n" |tee -a $logFile
fi
# Vérifie que deux paramètres ont été renseignés
param1=${1:-mkv}
param2=${2:-26}
echo -e "$(basename ${0}) $param1 $param2\n" |tee -a $logFile
date_en_cours=$(date +"%Y%m%dT%H%M%S")
source_dir=$(pwd)
input_file_type=${param1}
output_file_type="new${param2}.mkv"
declare -a mesFichiers
listFileName=~/rsbConvert_${date_en_cours}.sh
echo -e "Dossier en cours : " |tee -a $logFile
echo -e " $source_dir\n" |tee -a $logFile
# Construction d'un tableau des noms de fichiers
i=0
echo -e "==> Type de liste : \n" |tee -a $logFile
if [ "$type" = "file" ]; then
echo -e "$source_dir/$input_file\n"|tee -a $logFile
echo -e "$source_dir/$input_file"> ~/fichiersATraiter_${date_en_cours}_$$.lst
else
echo -e "find -L \"$source_dir\" -type f -iname \"*.$input_file_type\"\n" |tee -a $logFile
find -L "$source_dir" -type f -iname "*.$input_file_type" > ~/fichiersATraiter_${date_en_cours}_$$.lst
fi
echo -e "==> Traitement de la liste : \n" |tee -a $logFile
while read -e aLine
do
echo "[NFO] $aLine"|tee -a $logFile
if [ ${#aLine} -ge 2 ]; then
echo " a traiter."|tee -a $logFile
mesFichiers[$i]=$aLine
i=$(($i+1))
fi
done < ~/fichiersATraiter_${date_en_cours}_$$.lst
rm ~/fichiersATraiter_${date_en_cours}_$$.lst
echo -e "\n"|tee -a $logFile
echo -e "==> Traitement des vidéos en cours...\n"|tee -a $logFile
for in_file in "${mesFichiers[@]}"
do # Liste tous les éléments du tableau.
echo "Traitement de : $in_file"|tee -a $logFile
if [ ${#in_file} -ge 2 ]; then
echo -e "\n________________________________________________________________________________"|tee -a $logFile
echo -e "\n ==> Processing…"|tee -a $logFile
echo -e "\n [NFO] Input $in_file"|tee -a $logFile
# Replace the file type
out_file=$(echo "$in_file"|sed "s/\(.*\.\)$input_file_type/\1$output_file_type/g")
echo -e "\n [NFO] Output $out_file\n"|tee -a $logFile
if [ "$in_file" != "$out_file" ]; then
# ---------------- RESOLUTION DE SORTIE --------------
echo -e "==> RESOLUTION, calcul en cours ...\n"
# Obtenez la résolution de la vidéo d'entrée en utilisant FFmpeg
read width height < <(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=p=0 "$in_file" | tr ',' ' ')
echo -e " RESOLUTION de la vidéo en entrée : \"${width} x ${height}\"\n"|tee -a $logFile
# Vérifiez si la résolution est inférieure ou égale à 1080p
if [[ "$width" -le 1920 && "$height" -le 1080 ]]; then
# Si la résolution est inférieure ou égale à 1080p, utilisez la résolution d'entrée pour la sortie
vf_option="scale=${width}:${height}"
else
# Si la résolution est supérieure à 1080p, utilisez une résolution de sortie de 1080p
# Obtenez la résolution de la vidéo d'entrée en utilisant FFmpeg
vf_option="scale='min(1920\,iw)':'-1'"
fi
echo -e " RESOLUTION de sortie \"${vf_option}\"\n"|tee -a $logFile
# -------------- DETECTION DES BADNES NOIRES ------------------
echo -e "==> DETECTION DES BANDES NOIRES, calcul en cours ...\n"
# Get cropSize en fonction de la résoltuion
# Calculer la valeur de cropSize en fonction de la résolution d'entrée
if (( $width > 1920 || $height > 1080 )); then
if (( $width > 1920 )); then
echo -e " calcule du scale car vidéo trop grande avec un width de ${width}.\n"|tee -a $logFile
scale=$(echo "scale=2;1920/$width*100" | bc)
else
scale=100
fi
cropSize="crop="$(echo "scale=0;$width*$scale/100" | bc)":"$(echo "scale=0;$height*$scale/100" | bc)":0:0"
else
cropSize=$(ffmpeg -i "$in_file" -ss 00:02:00 -vframes 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1)
fi
# cropSize=$(ffmpeg -i "$in_file" -ss 00:02:00 -vframes 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1)
echo -e " CROP ${cropSize} avec un scale de ${scale}\n"|tee -a $logFile
# -------------- ESPACE COLORMETRIQUE ------------------
echo -e "==> ESPACE COLORMETRIQUE, calcul en cours ...\n"
# Détection automatique de l'espace colorimétrique de la vidéo d'entrée en utilisant FFprobe
read color_primaries color_trc colorspace < <(ffprobe -v error -select_streams v:0 -show_entries stream=color_primaries,color_trc,colorspace -of csv=p=0 "$in_file")
# Définition des paramètres de l'espace colorimétrique en fonction de la détection automatique
if [[ "$color_primaries" == "bt709" && "$color_trc" == "bt709" && "$colorspace" == "bt709" ]]; then
color_params=" -color_primaries 1 -color_trc 1 -colorspace 1"
else
color_params=""
fi
echo -e " COLOR_PARAMS ${color_params}\n"|tee -a $logFile
# --------------- DETECTION DU BITRATE et FRAMERATE -------------------
#bitrate=$(ffprobe -v error -select_streams v:0 -show_entries stream=bit_rate -of default=noprint_wrappers=1:nokey=1 "$in_file")
#framerate=$(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 "$in_file")
# Get video frame rate
framerate=$(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 "$in_file")
# Calculate target bitrate based on video resolution and frame rate
bitrate=$(echo "scale=0; $width*$height*$framerate*0.1*0.6" | bc)
# Calculate maxrate and bufsize based on target bitrate
maxrate=$(echo "scale=0; $bitrate*1.5/1" | bc)
bufsize=$(echo "scale=0; $maxrate*2" | bc)
#maxrate="10M"
#bufsize="20M"
echo -e " framerate : $framerate\n"|tee -a $logFile
echo -e " Bitrate : $bitrate\n"|tee -a $logFile
echo -e " Maxrate : $maxrate\n"|tee -a $logFile
echo -e " Bufsize : $bufsize\n"|tee -a $logFile
# --------------- DETECTION DE LA DUREE -------------------
echo -e "==> DUREE, calcul en cours ...\n"
# Get duration
duration=$(ffmpeg -i "$in_file" 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//)
echo -e " Duration : $duration\n"|tee -a $logFile
echo -e "\n ==> Demande de compression"|tee -a $logFile
cmd_exec="ffmpeg -y -i \"${in_file}\""
if [ ${#cropSize} -ge 2 ]; then
# compression réaliser avec un crop
vf_option="${vf_option},${cropSize}"
fi
# cmd_exec="${cmd_exec} -map 0:v -map 0:a? -map 0:s?"
cmd_exec="${cmd_exec} -map 0"
# cmd_exec="${cmd_exec} -c:a libvorbis -qscale:a 4"
cmd_exec="${cmd_exec} -c:a aac -b:a 128k -ac 2 -af loudnorm=I=-18:TP=-1:LRA=11:print_format=summary"
cmd_exec="${cmd_exec} -c:v libx264"
cmd_exec="${cmd_exec} -filter:v \"${vf_option}\""
cmd_exec="${cmd_exec} ${color_params}"
# cmd_exec="${cmd_exec} -preset veryfast"
md_exec="${cmd_exec} -threads $(nproc)"
cmd_exec="${cmd_exec} -preset slower"
cmd_exec="${cmd_exec} -bf 5"
cmd_exec="${cmd_exec} -crf ${param2} -b:v $bitrate -pix_fmt yuv420p -maxrate $maxrate -bufsize $bufsize"
# cmd_exec="${cmd_exec} -crf 23 -maxrate 3000k -bufsize 6000k -b:v 3000k -pix_fmt yuv420p"
cmd_exec="${cmd_exec} -profile:v high -level 4.2"
cmd_exec="${cmd_exec} -movflags +faststart"
cmd_exec="${cmd_exec} -tune fastdecode+zerolatency"
cmd_exec="${cmd_exec} -max_muxing_queue_size 1024 -ss 00:00:00 -t $duration"
cmd_exec="${cmd_exec} -c:s copy"
cmd_exec="${cmd_exec} \"${out_file}\""
echo ${cmd_exec}>> ${listFileName}
echo -e "\n ==> On indique le fichier traité et le résultat dans un log"|tee -a $logFile
cmd_exec="echo -e \"\\\"${in_file}\\\" > \\\"${out_file}\\\"\">> ~/rsbConvert.log"
echo ${cmd_exec}>> ${listFileName}
echo -e "\n ==> Finished $out_file"|tee -a $logFile
fi
fi
done
echo -e "rm ${listFileName}">> ${listFileName}
chmod +x ${listFileName}
#./rsbConvert.sh
echo -e "\n ==== DONE CONVERTING FILES ===="|tee -a $logFile
echo -e "\n\n fichier à appeler : ${listFileName}\n";
exit 0

123
local/bin/convertPDF.sh Executable file
View File

@@ -0,0 +1,123 @@
#!/bin/bash
###############################################################################
#
# Script to recursively search a directory and batch convert all files of a given file type into another file
# type via HandBrake conversion.
#
# To run in your environment set the variables: hbcli - Path to your HandBrakeCLI
#
# source_dir - Starting directory for recursive search
#
# input_file_type - Input file type to search for
#
# output_file_type - Output file type to convert into
#
#
# Change log: 2012-01-08: Initial release. Tested on Mac OS X Lion.
#
###############################################################################
function message {
echo -e $1
echo -e $idLog $(date --iso-8601=seconds) $1 >> $fichierLog
}
clear
fichierLog=~/convertPDF.log
fichiersATraiter=fichiersATraiter.lst
idLog=$$-${uuidgen}
message "==> Préparation de l'environnement..."
date_en_cours=$(date +"%Y%m%d%H%M%S")
source_dir=$(pwd)
input_file_type=pdf
output_file_type="new.pdf"
declare -a mesFichiers
# Construction d'un tableau des noms de fichiers
i=0
find "$source_dir" -type f -iname "*.$input_file_type" > $fichiersATraiter
while read -e aLine
do
message "[NFO] $aLine"
if [ ${#aLine} -ge 2 ]; then
message " a traiter."
mesFichiers[$i]=$aLine
i=$(($i+1))
fi
done < $fichiersATraiter
rm $fichiersATraiter
message "==> Traitement des PDF en cours..."
# Parcours du tableau
nb_element=${#mesFichiers[*]}
message "[NFO] Nombre de fichiers : $nb_element"
for in_file in "${mesFichiers[@]}"
do # Liste tous les éléments du tableau.
message "[NFO] Nom du fichier : \"$in_file\""
if [ ${#in_file} -ge 2 ]; then
message "[NFO] Input \"$in_file\""
# Replace the file type
out_file=$(echo "$in_file"|sed "s/\(.*\.\)$input_file_type/\1$output_file_type/g")
out_file_txt=$(echo "$in_file"|sed "s/\(.*\.\)$input_file_type/\1txt/g")
message " [NFO] Output \"$out_file\""
if [ "$in_file" != "$out_file" ]; then
# explode to jpeg
message "[NFO] PDFTOCAIRO : Création des fichiers JPG \"$in_file\""
pdftocairo "$in_file" -jpeg
message "[NFO] PDFTOTEXT : Extraction du texte dans \"$out_file_txt\""
pdftotext "$in_file" "$out_file_txt"
# OCR
message " [NFO] TESSERACT : Détection par OCR des fichiers JPG"
for i in *.jpg
do
tesseract -l fra "$i" "$i.ocr"
cat "$i.ocr.txt" >> "$out_file.ocr.txt"
rm "$i.ocr.txt"
done
# contact jpeg to pdf
message "[NFO] CONVERT : Concatenation des JPG en PDF dans \"$out_file\""
convert -verbose *.jpg "$out_file"
message "[NFO] RM : Suppresison des JPG"
rm -v *.jpg
out_file=$(echo "$in_file"|sed "s/\(.*\.\)$input_file_type/\195_$output_file_type/g")
out_file_txt=$(echo "$in_file"|sed "s/\(.*\.\)$input_file_type/\1txt/g")
# pdftocairo "$in_file" -jpeg -jpegopt quality=95 convert *.jpg "$out_file" rm *.jpg
message "[NFO] GS : Conversion (2eme méthode) du PDF"
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -sOutputFile="$out_file.pdf" "$in_file"
message "==> Finished "$out_file ""
fi
fi
done
message "==== DONE CONVERTING FILES ===="
exit 0

77
local/bin/generate_playlist.sh Executable file
View File

@@ -0,0 +1,77 @@
#!/bin/bash
# Définition des paramètres par défaut
num_files=100 # Nombre de fichiers à inclure dans le M3U par défaut
directory="$PWD" # Répertoire par défaut à scanner
date_format=$(date +"%Y%m%d_%H%M%S")
# Fonction pour afficher l'utilisation du script
usage() {
echo "Utilisation : $0 [-n <nombre de fichiers>] [-d <répertoire>] [-o <fichier de sortie>]"
echo "Options :"
echo " -n <nombre de fichiers> : Nombre de fichiers à inclure dans le M3U"
echo " -d <répertoire> : Répertoire à scanner (y compris les sous-répertoires)"
echo " -o <fichier de sortie> : Nom du fichier M3U de sortie"
exit 1
}
# Analyse des options de ligne de commande
while getopts "n:d:o:" opt; do
case $opt in
n)
num_files=$OPTARG
;;
d)
directory=$OPTARG
;;
o)
output_file=$OPTARG
;;
\?)
echo "Option non valide : -$OPTARG" >&2
usage
;;
esac
done
# Vérifier si le fichier user-dirs.dirs existe
if [[ -f ~/.config/user-dirs.dirs ]]; then
# Charger les variables depuis le fichier user-dirs.dirs
source ~/.config/user-dirs.dirs
# Vérifier si la variable XDG_MUSIC_DIR est définie
if [[ -v XDG_MUSIC_DIR ]]; then
# Le répertoire XDG_MUSIC_DIR existe
mkdir -p "$XDG_MUSIC_DIR/playlists"
output_file="$XDG_MUSIC_DIR/playlists/playlist_${date_format}_${num_files}.m3u"
else
# La variable XDG_MUSIC_DIR n'est pas définie
output_file="$HOME/playlist_${date_format}_${num_files}.m3u"
fi
else
# Le fichier user-dirs.dirs n'existe pas
output_file="$HOME/playlist_${date_format}_${num_files}.m3u"
fi
# Vérification si le répertoire existe
if [ ! -d "$directory" ]; then
echo "Le répertoire spécifié n'existe pas : $directory"
usage
fi
# Création d'un fichier temporaire pour stocker la liste des fichiers audio avec leur date de création
temp_file=$(mktemp)
echo "Recherche en cours des fichiers audios dans \"$directory\""
find "$directory" -type f \( -name "*.mp3" -o -name "*.opus" -o -name "*.ogg" -o -name "*.m4a" \) -exec stat --format="%Z %n" {} + > "$temp_file"
echo "Nombre de fichiers audios trouvé dans $directory : "$(wc -l "$temp_file")
# Création de la liste des fichiers audio les plus récents à partir du fichier temporaire
sort -n -r -o "$temp_file" "$temp_file"
head -n "$num_files" "$temp_file" | awk '{print $2}' > "$output_file"
# Suppression du fichier temporaire
rm "$temp_file"
echo "Le fichier M3U a été créé avec les $num_files fichiers audio les plus récents dans le répertoire $directory : $output_file"

View File

@@ -0,0 +1,50 @@
#!/bin/bash
# Définir les chemins vers les fichiers
update_script=/usr/local/bin/check-update
update_file=/var/update_file
bashrc=/etc/profile
# Créer le fichier de script de mise à jour
echo "#!/bin/bash
# Stocker la sortie de la commande de mise à jour dans un fichier
dnf check-update
dnf check-update > $update_file" > $update_script
# Rendre le script exécutable
chmod +x $update_script
# Créer le fichier d'info
touch $update_file
chmod 644 $update_file
# Vérifier si le script est déjà présent dans la table cron
if ! (crontab -l | grep $update_script > /dev/null); then
# Ajouter le script à la tâche cron
(crontab -l 2>/dev/null; echo "0 */1 * * * $update_script") | crontab -
fi
# Vérifier si le code pour afficher les mises à jour est déjà présent dans .bashrc
if ! (grep "594f33f0-ab2f-11ed-afa1-0242ac120002/abonnel.fr" $bashrc > /dev/null); then
# Ajouter le code pour afficher les mises à jour au fichier .bashrc
echo '
# -- VERIFIER LES MISES A JOUR DISPO --
# Script id 594f33f0-ab2f-11ed-afa1-0242ac120002/abonnel.fr
# Définir le chemin vers le fichier de mise à jour
update_file=/var/update_file
# Vérifier si le fichier de mise à jour existe
if [ -f $update_file ]; then
# Compter le nombre de mises à jour
updates=$(($(wc -l < $update_file) - 1))
# Afficher le nombre de mises à jour en attente
echo "Il y a $updates mise(s) à jour en attente."
fi
' >> $bashrc
fi
# Recharger le fichier .bashrc
source $bashrc

39
local/bin/mkv_extract.sh Executable file
View File

@@ -0,0 +1,39 @@
#!/bin/bash
# Vérifier si le nombre d'arguments est correct
if [ $# -ne 1 ]; then
echo "Usage: $0 fichier.mkv"
exit 1
fi
# Nom du fichier MKV en entrée
input_file="$1"
# Vérifier si le fichier MKV existe
if [ ! -f "$input_file" ]; then
echo "Le fichier $input_file n'existe pas."
exit 1
fi
# Extraire le nombre de pistes audio dans le fichier MKV
num_audio_tracks=$(ffprobe -i "$input_file" -select_streams a -show_entries stream=index -of csv=p=0 | wc -l)
# Vérifier s'il y a au moins une piste audio
if [ "$num_audio_tracks" -eq 0 ]; then
echo "Le fichier MKV ne contient aucune piste audio."
exit 1
fi
# Créer un répertoire pour stocker les fichiers audio extraits
output_dir="${input_file%.mkv}_audio_tracks"
mkdir -p "$output_dir"
# Boucler à travers chaque piste audio et les extraire dans leur format natif
for ((i = 0; i < num_audio_tracks; i++)); do
output_file="$output_dir/audio_track_$i.$(ffprobe -i "$input_file" -select_streams a -show_entries stream=codec_name -of csv=p=0 -v 0 | sed -n "$(($i+1))p")"
ffmpeg -i "$input_file" -map "a:$i" "$output_file"
echo "Piste audio $i extraite dans $output_file."
done
echo "Extraction terminée. Les fichiers audio sont stockés dans le répertoire $output_dir."

View File

@@ -0,0 +1,63 @@
#!/bin/bash
# Intercepte le ^C
trap 'exit 130' INT
## Read config file or create/update
config_filename=~/.config/$(basename ${0})
test -f ${config_filename} && . ${config_filename} || echo "# Fichier de configuration créé $(date +%c)" | tee ${config_filename}
### edit directory path music background
if [[ -z "${path_music_files+set}" ]]; then
path_music_files=$(xdg-user-dir MUSIC)
echo "path_music_files=${path_music_files}" | tee -a ${config_filename}
fi
if [[ -z "${path_music_files+set}" ]]; then
path_music_files=~
echo "path_music_files=${path_music_files}" | tee -a ${config_filename}
fi
### edit volume
if [[ -z "${volume+set}" ]]; then
volume=0.06
echo "volume=${volume}" | tee -a ${config_filename}
fi
## Init var
files=($path_music_files/*)
## execute
echo Process number $$
echo Path files : $path_music_files
echo Number of files in the path : ${#files[@]}
run_play=0
while [ ${run_play} -eq 0 ];do
clear
file=${files["$[RANDOM % ${#files[@]}]"]}
# suppresion du fichier en cours de lecture
new_files=()
for file_keep in "${files[@]}"; do
[[ "$file_keep" != "$file" ]] && new_files+=("$file_keep")
done
files=("${new_files[@]}")
unset new_files
# Nombre d'éléments dans le tableau
elements_in_files=${#files[@]}
echo -e "\n => Now playing $file"
echo -e "\n => ${elements_in_files} files left"
play -S -v $volume "$file"
run_play=$(echo $?)
if [ ${elements_in_files} -eq 0 ]; then
run_play=2
fi
done

2
local/bin/tophoraire.sh Executable file
View File

@@ -0,0 +1,2 @@
play /home/cedric24c/Musique/jingles/t1.top_h_hkc.mp3 >/dev/null 2>&1 &
espeak-ng "top horaire. $(date +\'%k\') heures" -v fr+f5 -p 25 -s 135