2021-07-02 14:00:50 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
2021-12-11 17:25:35 +01:00
|
|
|
# Sortie à la moindre erreur
|
2021-07-02 14:00:50 +02:00
|
|
|
set -e
|
|
|
|
|
|
|
|
shopt -s globstar
|
|
|
|
|
2021-12-11 17:25:35 +01:00
|
|
|
# Initialisation de la mise en forme
|
2021-07-02 14:00:50 +02:00
|
|
|
blue=$(tput setaf 4)
|
|
|
|
green=$(tput setaf 2)
|
2022-07-23 02:26:09 +02:00
|
|
|
red=$(tput setaf 1)
|
2021-07-02 14:00:50 +02:00
|
|
|
reset=$(tput sgr0)
|
|
|
|
bold=$(tput bold)
|
|
|
|
|
2021-12-11 17:25:35 +01:00
|
|
|
# Répertoire source
|
2023-07-29 02:50:05 +02:00
|
|
|
rootdir="${HOME}/Musique"
|
2021-07-02 14:00:50 +02:00
|
|
|
|
|
|
|
cd "$rootdir"
|
|
|
|
|
2021-12-11 17:25:35 +01:00
|
|
|
# Pour tous les sous-répertoires, à tous les niveaux
|
2023-06-17 11:56:49 +02:00
|
|
|
for dir in **/ ./
|
2021-07-02 14:00:50 +02:00
|
|
|
do
|
2022-10-18 01:34:52 +02:00
|
|
|
# Ignorer les liens symboliques
|
2023-06-17 11:56:49 +02:00
|
|
|
if [[ -h "${rootdir}/${dir::-1}" ]]
|
2022-10-18 01:34:52 +02:00
|
|
|
then
|
|
|
|
continue
|
|
|
|
fi
|
2021-12-11 17:25:35 +01:00
|
|
|
|
2023-06-17 11:56:49 +02:00
|
|
|
# Répertoire de destination
|
2023-07-29 02:50:05 +02:00
|
|
|
dstdir="/mnt/data/breizh/Musique.opus/${dir}"
|
2023-06-17 11:56:49 +02:00
|
|
|
|
|
|
|
# Création du répertoire de destination
|
2021-07-02 14:00:50 +02:00
|
|
|
mkdir -p "${dstdir}"
|
2023-06-17 11:56:49 +02:00
|
|
|
|
2021-12-11 17:25:35 +01:00
|
|
|
# On entre dans le répertoire à traiter
|
2021-07-02 14:00:50 +02:00
|
|
|
cd "${rootdir}/${dir}"
|
2022-08-10 18:37:33 +02:00
|
|
|
|
2023-07-29 02:50:05 +02:00
|
|
|
togain=false
|
|
|
|
|
2021-12-11 17:25:35 +01:00
|
|
|
# Pour chaque fichier
|
2021-07-02 14:00:50 +02:00
|
|
|
for file in *
|
|
|
|
do
|
2023-06-17 11:56:49 +02:00
|
|
|
# On ignore les dossiers
|
|
|
|
if [[ -d "${file}" ]]
|
|
|
|
then
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
2023-07-29 02:29:42 +02:00
|
|
|
# Définition du fichier de destination
|
|
|
|
dstfile="${file%.*}.opus"
|
|
|
|
|
|
|
|
# Passe les fichiers déjà traités
|
2023-07-29 02:50:05 +02:00
|
|
|
if [[ "${dstdir}${dstfile}" -nt "${file}" || "${dstdir}${file}" -nt "${file}" ]]
|
2023-07-29 02:29:42 +02:00
|
|
|
then
|
|
|
|
echo "[${blue}SKIP${reset}] ${dir#./}$file"
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
2023-07-29 02:50:05 +02:00
|
|
|
# Converti uniquement les flacs
|
|
|
|
if [[ "$file" =~ \.flac$ ]]
|
2021-07-02 14:00:50 +02:00
|
|
|
then
|
2023-07-29 02:50:05 +02:00
|
|
|
togain=true
|
|
|
|
|
2023-06-17 11:56:49 +02:00
|
|
|
# Parallélisation des conversions
|
2021-07-02 14:00:50 +02:00
|
|
|
declare -a running
|
|
|
|
|
2022-11-10 00:55:04 +01:00
|
|
|
mapfile -t running < <(jobs -p)
|
2023-07-29 02:50:05 +02:00
|
|
|
if [[ "${#running[@]}" -ge 6 ]]
|
2021-07-02 14:00:50 +02:00
|
|
|
then
|
|
|
|
wait -n
|
|
|
|
fi
|
|
|
|
|
|
|
|
(
|
2023-06-17 11:56:49 +02:00
|
|
|
echo " ${dir#./}$file"
|
2023-07-16 04:49:25 +02:00
|
|
|
ffmpeg -n -loglevel error -i "file:$file" -c:a libopus -b:a 128K "file:${dstdir}${dstfile}" && \
|
2023-06-17 11:56:49 +02:00
|
|
|
echo "[${green} OK ${reset}] ${dir#./}$file" || \
|
|
|
|
echo "[${red}FAIL${reset}] ${dir#./}$file"
|
2021-07-02 14:00:50 +02:00
|
|
|
) &
|
|
|
|
else
|
2023-06-17 11:56:49 +02:00
|
|
|
# Copie les autres types de fichiers
|
|
|
|
echo "[${green}COPY${reset}] ${dir#./}$file"
|
2023-08-14 18:12:39 +02:00
|
|
|
cp -n --reflink=auto "${file}" "${dstdir}/"
|
2021-07-02 14:00:50 +02:00
|
|
|
fi
|
|
|
|
done
|
2023-07-29 02:50:05 +02:00
|
|
|
wait
|
|
|
|
|
|
|
|
if ${togain}
|
|
|
|
then
|
|
|
|
(
|
|
|
|
cd "${dstdir}"
|
|
|
|
shopt -s nullglob
|
|
|
|
echo "[${blue}GAIN${reset}] $dir"
|
|
|
|
loudgain -q -S -a -k -s e -- *.opus &>/dev/null && \
|
|
|
|
echo "[${green}GAIN${reset}] $dir" || \
|
|
|
|
echo "[${red}GAIN${reset}] $dir"
|
|
|
|
shopt -u nullglob
|
|
|
|
) & disown $!
|
|
|
|
|
|
|
|
# Réinitialise le tag togain
|
|
|
|
togain="false"
|
|
|
|
fi
|
2021-07-02 14:00:50 +02:00
|
|
|
done
|
|
|
|
wait
|