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

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

View File

@ -13,6 +13,57 @@ Play audio file and vocal speech. To program with cron task.
```0 * * * * /home/cedric24c/scripts/tophoraire >/dev/null 2>&1``` ```0 * * * * /home/cedric24c/scripts/tophoraire >/dev/null 2>&1```
Vous pouvez créer un fichier README.md pour expliquer ce que fait le script, comment l'utiliser, et éventuellement fournir des exemples. Voici un exemple de contenu pour votre fichier README.md :
```markdown
## generate_playlist
Générateur de Playlist M3U
Ce script Bash vous permet de générer facilement une playlist au format M3U à partir des fichiers audio les plus récents dans un répertoire donné. Vous pouvez personnaliser le nombre de fichiers à inclure dans la playlist, le répertoire à scanner, et le nom du fichier de sortie.
### Utilisation
Pour utiliser ce script, suivez ces étapes :
1. Assurez-vous que vous avez les permissions d'exécution pour le script en utilisant la commande suivante :
```bash
chmod +x generate_playlist
```
2. Exécutez le script en utilisant la commande suivante avec les options appropriées :
```bash
generate_playlist -n <nombre de fichiers> -d <répertoire> -o <fichier de sortie>
```
- `-n` : Le nombre de fichiers à inclure dans la playlist (par défaut : 100).
- `-d` : Le répertoire à scanner (y compris les sous-répertoires) (par défaut : le répertoire actuel).
- `-o` : Le nom du fichier M3U de sortie (par défaut : un fichier dans le répertoire de la musique de l'utilisateur).
3. Le script générera la playlist M3U avec les fichiers audio les plus récents et vous indiquera l'emplacement du fichier de sortie.
### Exemples
- Générer une playlist M3U avec les 50 fichiers audio les plus récents dans le répertoire `/chemin/vers/ma/musique` et enregistrer le fichier en tant que `playlist.m3u` :
```bash
./generate_playlist -n 50 -d /chemin/vers/ma/musique -o playlist.m3u
```
- Générer une playlist M3U avec les 25 fichiers audio les plus récents dans le répertoire par défaut et enregistrer le fichier dans le répertoire de musique de l'utilisateur :
```bash
./generate_playlist -n 25 -o ~/playlist.m3u
```
### Remarques
- Assurez-vous que les fichiers audio dans le répertoire spécifié ont les extensions suivantes : `.mp3`, `.opus`, `.ogg`, `.m4a`.
- Si le répertoire de musique de l'utilisateur est défini dans le fichier `~/.config/user-dirs.dirs`, le script utilisera cet emplacement par défaut pour enregistrer le fichier M3U.
# License # License
Shield: [![CC BY-SA 4.0][cc-by-sa-shield]][cc-by-sa] Shield: [![CC BY-SA 4.0][cc-by-sa-shield]][cc-by-sa]

View File

@ -1,161 +0,0 @@
#!/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=~/convertMKV.log
echo -e "\n"
echo -e "==> Préparation de l'environnement...\n"|tee $logFile
echo ""
if [ -z "$1" ] ; then
echo "Indiquer le type de vidéo a traiter : avi, mkv..."
echo ""
echo "Syntaxe : convertFilm <typeSource> <cropSize:Y|N| >"
echo " à executer depuis le dossier à traiter."
echo ""
sleep 1
exit 0
fi
date_en_cours=$(date +"%Y%m%dT%H%M%S")
source_dir=$(pwd)
input_file_type=$1
output_file_type="new.mkv"
declare -a mesFichiers
listFileName=~/rsbConvert_${date_en_cours}.sh
# Construction d'un tableau des noms de fichiers
i=0
echo find -L "$source_dir" -type f -iname "*.$input_file_type" |tee -a $logFile
find -L "$source_dir" -type f -iname "*.$input_file_type" > ~/fichiersATraiter.lst
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.lst
echo -e "\n"
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"|tee -a $logFile
if [ "$in_file" != "$out_file" ]; then
# Get cropSize
cropSize=$(ffmpeg -i "$in_file" -ss 00:02:00 -vframes 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1)
# Get duration
duration=$(ffmpeg -i "$in_file" 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//)
echo -e "\n\n Crop Size : $cropSize"|tee -a $logFile
echo -e "\n\nDuration : $duration"|tee -a $logFile
# -c:v libx264 -tune zerolatency -preset slow -bf 5 -crf 25 -maxrate 6000k -bufsize 3000k -pix_fmt yuv420p \
# -c:v libvpx-vp9 -pix_fmt yuv420p \
echo -e "\n ==> Demande de compression"|tee -a $logFile
cmd_exec="ffmpeg -y -i \"${in_file}\""
if [ ${#cropSize} -ge 2 ]; then
echo -e "\n ==> CROP ${cropSize} "|tee -a $logFile
# compression réaliser avec un crop
cmd_exec="${cmd_exec} -vf ${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"
cmd_exec="${cmd_exec} -c:v libx264 "
cmd_exec="${cmd_exec} -preset veryfast "
cmd_exec="${cmd_exec} -bf 5 "
cmd_exec="${cmd_exec} -crf 23 -maxrate 20000k -bufsize 20000k -pix_fmt yuv420p"
# cmd_exec="${cmd_exec} -crf 23 -maxrate 3000k -bufsize 6000k -b:v 3000k -pix_fmt yuv420p"
cmd_exec="${cmd_exec} -color_primaries 1 -color_trc 1 -colorspace 1"
cmd_exec="${cmd_exec} -profile:v main -level 4.0 "
cmd_exec="${cmd_exec} -movflags +faststart -profile:v main"
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
chmod +x ${listFileName}
echo -e "rm ${listFileName}">> ${listFileName}
#./rsbConvert.sh
echo -e "\n ==== DONE CONVERTING FILES ===="|tee -a $logFile
echo -e "\n\n fichier à appeler : ${listFileName}\n";
exit 0

View File

@ -1,139 +0,0 @@
#!/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
# Tesseract existe ?
tesseract --version > /dev/null
RETURNCODE=$?
if [ $RETURNCODE -ne 0 ] ; then
echo -e "Déploiement de TESSERACT OCR avec APT\n"
sudo sudo apt install tesseract-ocr tesseract-ocr-fra
fi
tesseract --version > /dev/null
RETURNCODE=$?
if [ $RETURNCODE -ne 0 ] ; then
echo -e "Impossible d'utiliser TESSERACT\n"
exit 127
fi
fichierLog=convertPDF.log
echo -e "\n"
echo -e "==> Préparation de l'environnement...\n" | tee $fichierLog
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.lst
while read -e aLine
do
echo "[NFO] $aLine">>$fichierLog
if [ ${#aLine} -ge 2 ]; then
echo " a traiter.">>$fichierLog
mesFichiers[$i]=$aLine
i=$(($i+1))
fi
done < fichiersATraiter.lst
echo -e "\n"
echo -e "==> Traitement des PDF en cours...\n" | tee -a $fichierLog
# Parcours du tableau
nb_element=${#mesFichiers[*]}
echo -e "[NFO] Nombre de fichiers : $nb_element\n" | tee -a $fichierLog
for in_file in "${mesFichiers[@]}"
do # Liste tous les éléments du tableau.
echo -e " [NFO] Nom du fichier : \"$in_file\"\n" | tee -a $fichierLog
if [ ${#in_file} -ge 2 ]; then
echo -e "________________________________________________________________________________\n" | tee -a $fichierLog
echo -e " [NFO] Input \"$in_file\"\n" | tee -a $fichierLog
# 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")
echo -e " [NFO] Output \"$out_file\"\n" | tee -a $fichierLog
if [ "$in_file" != "$out_file" ]; then
echo -e " [NFO] Conversion (1re méthode) du PDF avec pdftocairo et convert \n" | tee -a $fichierLog
# explode to jpeg
echo -e " [NFO] PDFTOCAIRO : Création des fichiers JPG \"$in_file\"\n" | tee -a $fichierLog
pdftocairo "$in_file" -jpeg | tee -a $fichierLog
echo "" | echo -e " [NFO] PDFTOTEXT : Extraction du texte dans \"$out_file_txt\"\n" | tee -a $fichierLog
pdftotext "$in_file" "$out_file_txt" | tee -a $fichierLog
# OCR
echo -e " [NFO] TESSERACT : Détection par OCR des fichiers JPG \n" | tee -a $fichierLog
for i in *.jpg
do
echo -e "\n [NFO] TESSERACT : Fichier image \"$i\"\n" | tee -a $fichierLog
tesseract -l fra "$i" "$i.ocr" | tee -a $fichierLog
cat "$i.ocr.txt" >> "$out_file.ocr.txt"
rm "$i.ocr.txt"
done
# contact jpeg to pdf
echo -e " [NFO] CONVERT : Concatenation des JPG en PDF dans \"$out_file\" \n" | tee -a $fichierLog
convert -verbose *.jpg "$out_file" | tee -a $fichierLog
echo -e " [NFO] RM : Suppresison des JPG \n" | tee -a $fichierLog
rm -v *.jpg | tee -a $fichierLog
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")
# echo "" | pdftocairo "$in_file" -jpeg -jpegopt quality=95 convert *.jpg "$out_file" rm *.jpg
echo -e " [NFO] GS : Conversion (2eme méthode) du PDF \n" | tee -a $fichierLog
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -sOutputFile="$out_file.pdf" "$in_file"
echo -e "==> Finished "$out_file "\n\n" | tee -a $fichierLog
fi
fi
done
echo -e "\n\n==== DONE CONVERTING FILES ====" | tee -a $fichierLog
exit 0

41
install.sh Executable file
View File

@ -0,0 +1,41 @@
#!/bin/bash
# Spécifiez le chemin du répertoire du dépôt Git local
repository_dir="local/bin"
# Spécifiez le chemin du répertoire ~/.local/bin
destination_dir="$HOME/.local/bin"
# Vérifiez si le répertoire destination est déjà dans le PATH
if [[ ":$PATH:" == *":$destination_dir:"* ]]; then
echo "$destination_dir est déjà dans le PATH."
else
# Ajoutez le répertoire destination au PATH dans le fichier de configuration de session de l'utilisateur
echo 'export PATH="$PATH:'"$destination_dir"'"' >> ~/.bashrc
source ~/.bashrc
echo "$destination_dir a été ajouté au PATH dans le fichier de configuration de session de l'utilisateur."
fi
# Assurez-vous que le répertoire de destination existe, sinon, créez-le
if [ ! -d "$destination_dir" ]; then
mkdir -p "$destination_dir"
fi
# Copiez sélectivement les fichiers du dépôt Git local vers ~/.local/bin en préservant la structure
# Exécutez rsync pour copier les fichiers du dépôt Git local vers ~/.local/bin
copied_files=$(rsync -av --exclude='*' --include='*.sh' --include='*.py' --include='*.pl' "$repository_dir/" "$destination_dir/" | grep -oE '/[^/]+$')
# Renommez les fichiers en supprimant les extensions
for file in $copied_files; do
if [ -f "$destination_dir/$file" ]; then
new_name="${file%.*}" # Supprimer l'extension
mv -v "$destination_dir/$file" "$destination_dir/$new_name"
fi
done
# Affiche un message de confirmation
echo "Les fichiers du dépôt Git local ont été copiés vers $destination_dir avec succès."

View File

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

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."

0
tophoraire → local/bin/tophoraire.sh Normal file → Executable file
View File