Modification de la structure des dossiers. Script principal d'installation : install.sh
This commit is contained in:
parent
a014df4309
commit
ce33c77ac4
51
README.md
51
README.md
|
@ -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]
|
||||||
|
|
||||||
|
|
161
convertMKV
161
convertMKV
|
@ -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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
139
convertPDF
139
convertPDF
|
@ -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
|
|
|
@ -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."
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -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"
|
|
@ -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."
|
||||||
|
|
Loading…
Reference in New Issue