Salut à tous, j'ai acquéri une compilation de 50 cds, que je suis en train de ripper et dont je voudrais automatiser le tag des métadonnées. Les fichiers et dossiers sont nommés suivant le pattern :
./CLASSIQUE - Divers - JE N'AIME PAS - CD01/track01.wav
J'ai un fichier tags.txt dans lequel se trouve la totalité des noms de piste sous la forme suivante (j'ai simplement c/c la description amazon) :
Disque : 1
1 Sonnenaufgang - Chicago Symphony Orchestra
2 O Fortuna - London Symphony Chorus / Boy's Choir of St. Paul's Cathedral, London, The / London Symphony Orchestra
3 Die Walkure, Wwv 86b: Walkurenritt - Orchester der Tiroler Festspiele
...
Disque : 2
...
11 Barcarolle - Boston Pops Orchestra
12 William Tell Overture - Boston Pops Orchestra
... et ainsi de suite pour 50 disques
EDIT : Script vraisemblablement fonctionnel ... ffmpeg est en train de tourner, j'ai rippé la moitié des cédés (25CD). ChatGPT m'a un peu aidé, c'était pas trop ça ce matin quand il m'a sorti un script python qui a foutu en l'air mes enregistrements. Le problème que je n'arrivais pas à résoudre avant d'ouvrir ce sujet était dû à des erreurs de syntaxe, vraisemblablement assez stricte en shell en général.
EDIT2 : Bilan, j'ai dû utiliser eval plutôt que des array (tableaux) pour enregistrer les titres de pistes (et numéros de piste et d'albums). Cette suggestion de chatgpt me paraît un peu étrange, mais ça semble fonctionner. Je mettrai le topic en résolu si je finis par avoir ma collection de 50CDs au format ogg et correctement taggée : )
EDIT3 : après quelques bourdes corrigées et 50 cédés rippés, je pense que je tiens le bon bout. Le sujet devrait passer en résolu dans une grosse heure, quand le script aura fini de tourner : )
Code ci-après :
#!/bin/ksh
# Parse titles/tracknumber files
discn=0;
while IFS="|" read -r track title ; do
if [[ "$(print "$track" | cut -c 1-6)" != "Disque" ]] ; then
var_title="disc$(printf "%02d" "$discn")_track$(printf "%02d" "$track")_title";
var_filename="disc$(printf "%02d" "$discn")_track$(printf "%02d" "$track")_filename";
escaped_title=$(print "$title" | sed 's/"/\\"/g');
clean_title=$(print "$title" | tr -d "'" | tr -d '"/:;,.' | tr -s ' ');
eval "$var_title=\"$escaped_title\"";
eval "$var_filename=\"$clean_title\"";
else # the line is a new disc
discn=$((discn+1));
printf "Going for parsing disc %02d titles ...\n" $discn;
fi
done < tags.txt
# Convert and tag files
for album in CLASSIQUE* ; do
discn=$(print "$album" | cut -c 40-41);
cd "/home/sylvain/mac/Music/Classique/$album";
print "\nGoing for tagging disc #$discn ...";
for file in track* ; do
track=$(print "$file" | cut -c 6-7);
var_title="disc${discn}_track${track}_title";
var_filename="disc${discn}_track${track}_filename";
eval title="\$${var_title}";
eval filename="\$${var_filename}";
ffmpeg -i $file -f ogg \
-metadata artist="Divers Classique" \
-metadata track="$track" \
-metadata title="$(print "$title" | sed 's/"/\\"/g')" \
-metadata album="Je n'aime pas le classique - la totale #$discn" \
-metadata genre="Classique" \
"$track $filename.ogg";
done
mkdir JNAPC_wav$discn && mv *.wav JNAPC_wav$discn;
done
cd /home/sylvain/mac/Music/Classique && mkdir JNAPC_wav && mv "CLASSIQUE*/JNAPC_wav*" JNAPC_wav
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
linktr.ee/Sylvain