Il y en a qui taquinent le bash ici ?
soupaloignon Membre non connecté
-
Modérateur
- Voir le profil du membre soupaloignon
- Inscrit le : 27/03/2009
- Site internet
- Groupes :
-
Equipe Rédaction
-
Equipe Modération
Tout est dans le titre. Je suis en train de finaliser un script bash et je bloque sur un truc. Donc s'il y en a ici qui ont des connaissances en bash et plus particulièrement dans l'écriture de tags dans des fichiers flac.
Je suis en train de transférer toute ma collection de cd audio en flac, pour pourvoir ensuite l'utiliser avec un serveur son. Je construit donc un script pour automatiser tout ça, sinon le temps passé risque d'être colossal s'il faut le faire en passant par des interfaces graphiques.
Le script est presque terminé. Pour le moment il fait les choses suivantes :
Création d'un dossier sur le bureau avec pour nom : Code - ARTISTE - Titre Du Cd
Rip en wav du cd dans ce dossier
Modification des noms des fichiers sous la forme : ARTISTE - Titre Du Cd - N° de piste
A partir des wav renommés, conversion en flac (en gardant les wav)
Création d'un dossier avec pour nom : Code - ARTISTE - Titre Du Cd à l'intérieur du 1er dossier, et déplacement des wav dans ce dossier
Copie dans le dossier des flac et celui des wav de la pochette du Cd (que je vais chercher dans un autre dossier de mon ordi)
Déplacement du dossier contenant les wav à un autre endroit de l'ordi.
Toutes les infos dont cette partie du script a besoin sont fournies au lancement du script, dans des variables avec zenity
Ensuite je voudrais taguer les fichier flac et c'est là que ça se corse.
Pas de souci pour l'artiste, le nom du Cd, l'année, le code, le genre musical. Cette partie fonctionne bien (là aussi renseignée dans des variables avec zenity, au lancement du script). Je fais ça avec le programme metaflac
Les problèmes que j'ai concernent les tags qui sont variables dans un Cd : Les numéros de pistes et les titres des morceaux.
Pour les numéros de pistes il faudrait un bout de code qui écrit le tag "TRACKNUMBER=01" sur le 1er morceau, et qui l'incrémente d'1 unités pour chaque morceau trouvé. Ca je n'arrive pas à le faire, et les recherches sur le net n'ont rien donné. Le man de metaflac est étonnamment discret la dessus.
2eme problème, les noms des différentes pistes, le tag "TITLE". 2 cas de figure peuvent se présenter :
Je n'ai aucun nom de pistes et là il faudrait remplir le tag avec une incrémentation sur "Track_01"
J'ai les noms sur un fichier texte, rangé dans le bon ordre, 1 nom par ligne. Et là il faudrait que le script aille chercher le sinfos dans ce fichier (qui peut être placé dans le dossier contenant les flacs), et qu'il remplisse chaque tag avec chaque ligne rencontrée dans le fichier.
Le choix de l'une ou l'autre des options (Track_01 ou lecture dans un fichier) se faisant au lancement du script.
Donc voilà. Si vous avez des infos, des pistes, des liens pour ces 3 points... Je vous bénirais vous et votre descendance sur 20 générations.
Merci d'avance pour vos réponses
1/ Avant de poster votre question, faite une recherche sur le forum et/ou le site
2/ Plus votre question sera détaillée, plus les éventuelles réponses seront pertinentes
3/ Plus votre français sera correct, plus vous donnerez envie que l'on vous réponde
2/ Plus votre question sera détaillée, plus les éventuelles réponses seront pertinentes
3/ Plus votre français sera correct, plus vous donnerez envie que l'on vous réponde
4/ ==> Libérez les Huitres du bassin d'Arcachon <== 
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
Si c'est de ça dont il s'agit, il te faudrait une map Album => dernier id attribué. Je sais pas si on peut faire des maps en bash, au pire en écrivant des fichiers tu peux t'en sortir.
Mais tu peux confirmer que j'ai bien compris ton problème avant d'aller plus loin ?
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
soupaloignon Membre non connecté
-
Modérateur
- Voir le profil du membre soupaloignon
- Inscrit le : 27/03/2009
- Site internet
- Groupes :
-
Equipe Rédaction
-
Equipe Modération
Mais j'ai mal dû exprimer le problème.
Une fois que le script actuel a fini de travailler, je me retrouve (par exemple) avec un dossier sur mon bureau nommé "0306B - TRYAD - Listen" (où 0306B est le code de mon album dans ma base de données perso qui me sert à gérer mes Cd, TRYAD le nom du groupe, Listen le nom de l'album).
Lorsque j'ouvre ce dossier j'ai :
0306B.jpg (pochette du Cd)
TRYAD - Listen - 01 (morceau N°1)
TRYAD - Listen - 02 (etc..)
TRYAD - Listen - 03
TRYAD - Listen - 04
TRYAD - Listen - 05
TRYAD - Listen - 06
TRYAD - Listen - 07
TRYAD - Listen - 08
TRYAD - Listen - 09
TRYAD - Listen - 10
TRYAD - Listen - 11
TRYAD - Listen - 12
TRYAD - Listen - 13
Les fichiers flac on été renommés de la sorte par le script (Groupe, Album, N° de piste). Mais il ne s'agit que du nom des fichiers.
Une partie des tags internes aux fichiers flac on été rempli par le script, en ce qui concerne les tags communs de l'album : Nom du groupe, nom de l'album, année de parution, genre musical, code (lui je le met dans le tag commentaire).
Ces tags communs sont écrits avec la portion de code suivante (je rempli ces variables au lancement du script dans des fenêtres zenity) :
Code BASH :
# Ecriture des tags dans les fichiers flac metaflac --set-tag="COMMENT=$code" --set-tag="ARTIST=$_ARTIST" --set-tag="ALBUM=$titre" --set-tag="DATE=$_DATE" --set-tag="GENRE=$_GENRE" *.flac
Là où je coince c'est pour les tags qui, sur un album donné, vont être différents : le tag "TRACKNUMBER" et le tag "TITLE"
Pour le tag "TRACKNUMBER" je n'arrive pas à écrire une portion de code qui me prennent les morceaux dans l'ordre où ils figurent dans le dossier, et en partant du 1er incrémente d'une unité les numéros de pistes.
Pour le tag "TITLE" il y a 2 options possibles:
Soit je ne connais pas les noms de chaque morceaux et là il suffirait de reprendre la portion de code de "TRACKNUMBER" mais en lui faisant incrémenter le tag "TITLE" sous la forme Track_01, Track_02 etc)
Soit j'ai les noms sur un fichier texte, rangé dans le bon ordre, 1 nom par ligne. Et là il faudrait que le script aille chercher les infos dans ce fichier, et qu'il remplisse chaque tag "TITLE" avec chaque ligne rencontrée dans le fichier.
En fait il n'y a que 2 points qui me posent problème, vu "TRACKNUMBER" et "TITLE" sous la forme Track_01 peuvent se gérer avec le même code en modifiant le tag visé.
En plus le man de metaflac ne dit absolument rien sur cette notion d'incrémentation. Ceci dit je suis preneur avec un autre programme que metaflac
le code actuel du script que je lance dès que j'ai introduit un Cd audio:
Code BASH :
#!/bin/bash ############################################################# # # www.soupaloignon.net # # Extraction audio/encodage en wav et flac # 2011/03/14 # V 0.1 ############################################################# ############################################################# # Paramétres modifiables en fonction des besoins # Code du Cd code=`zenity --entry --title "Code du Cd" --text "Saisissez le code du Cd :" --entry-text "0025A"` # Artiste artiste=`zenity --entry --title "Artiste" --text "Saisissez le nom du groupe ou de l'artiste (Nom + prénom) :" --entry-text "ARTISTE"` # Titre du Cd titre=`zenity --entry --title "Titre de l'album" --text "Saisissez le titre du Cd :" --entry-text "Titre"` # Nom global pour nommer les 2 dossiers global_nom_dossier="$code - $artiste - $titre - " # Nom global pour nommer les fichiers wav et flac global_nom_fichier="$artiste - $titre - " # Là ou sont stockés les dossiers endroit="/home/$USER/Bureau/" # répertoire des vignettes repertoire_image="/home/$USER/01-Musique/02-Musique-a-Classer/archive_cover/" # répertoire des sauvegardes en wav repertoire_wav="/home/$USER/01-Musique/01-Musique-Sauvegarde/Audio-wav/" # Tags des fichiers flac _ARTIST=`zenity --entry --title "[Tag FLAC] Artiste" --text "Saisissez l'artiste : Nom (Prénom)" --entry-text "$artiste"` _DATE=`zenity --entry --title "[Tag FLAC] Date" --text "Saisissez la date de l'album :" --entry-text "Date sur 4 chiffres"` _GENRE=`zenity --list --title="[Tag FLAC] Style de musique" --column="Style" --height="180" Africain "Afrique du Nord" Blues BO-film Classique Electro Electro-jazz Fanfare Folk Funk Guitare Jazz Jazz-rock Latin Percussion Piano Pop Rap Reggae Rock "Rock progressif" "Rythm'n blues" Texte Tzigane World` # pour le tag COMMENT le script récupère la valeur de la variable code / idem pour le nom de l'album # Fin des paramétres modifiables. Ne pas modifier ce qui suis, sauf si vous savez ce que vous faites ;) ############################################################# # Création du dossier mkdir $endroit/"$code - $artiste - $titre" # Se placer dans le dossier cd $endroit/"$code - $artiste - $titre" # Extraction des pistes audio du Cd cdparanoia -B # Renommer les fichiers audio extraits sur 2 chiffres IFS=$'n' let "indice=1" for fichier in *.wav do if [ -f "$fichier" ]; then extension=${fichier##*.} echo "$fichier" "=>" "$indice.$extension" mv "$fichier" `printf "%0"2"d" $indice`".$extension" let "indice+=1" fi done # Rajouter l'intitulé for fichier in *.wav do rename 's/^/'$global_nom_fichier'/' $fichier done ## Conversion en flac flac --best *.wav # Ecriture des tags dans les fichiers flac metaflac --set-tag="COMMENT=$code" --set-tag="ARTIST=$_ARTIST" --set-tag="ALBUM=$titre" --set-tag="DATE=$_DATE" --set-tag="GENRE=$_GENRE" *.flac # Création du dossier des wav et déplacement des wav dans ce dossier mkdir $endroit/"$code - $artiste - $titre"/"$code - $artiste - $titre" mv *.wav "$code - $artiste - $titre" # Récupération de la vignette du Cd cp $repertoire_image/$code.jpg $endroit/"$code - $artiste - $titre"/ cp $repertoire_image/$code.jpg $endroit/"$code - $artiste - $titre"/"$code - $artiste - $titre"/ # Déplacer le dossier contenant les pistes wav dans le dossier de sauvegarde des wav mv $endroit/"$code - $artiste - $titre"/"$code - $artiste - $titre" $repertoire_wav zenity --info "Fin" --text "C'est plié ma poule. Suivant !!" read
1/ Avant de poster votre question, faite une recherche sur le forum et/ou le site
2/ Plus votre question sera détaillée, plus les éventuelles réponses seront pertinentes
3/ Plus votre français sera correct, plus vous donnerez envie que l'on vous réponde
2/ Plus votre question sera détaillée, plus les éventuelles réponses seront pertinentes
3/ Plus votre français sera correct, plus vous donnerez envie que l'on vous réponde
4/ ==> Libérez les Huitres du bassin d'Arcachon <== 
ben.popeye Membre non connecté
-
Modérateur
- Voir le profil du membre ben.popeye
- Inscrit le : 04/08/2005
- Site internet
- Groupes :
-
Equipe Historique
Voilà la seule idée qui me vient à l'idée, je connais peu le contexte des fichiers audio et des meta-informations associées. D'une manière générale, je ne suis pas expert en bash (en même temps c'est tellement compliqué qu'il y a peu de gens qui maitrisent ce langage correctement).
Un problème, une question ? Cherchez dans la FAQ ou la documentation. Si vous ne trouvez pas la réponse, demandez du support sur le forum.
Bjarne Stroustrup, inventeur du C++ :"There are two ways to write error-free programs; only the third works."
soupaloignon Membre non connecté
-
Modérateur
- Voir le profil du membre soupaloignon
- Inscrit le : 27/03/2009
- Site internet
- Groupes :
-
Equipe Rédaction
-
Equipe Modération
J'ai 3 fichiers textes. 2 sont toujours identiques, l'un contient une série de chiffres de 01 à X et me sert à remplir le tag "TRACKNUMBER", l'autre une série Track_01, track_02 pour "TITTLE"c. Le 3eme fichier contient les noms des morceaux quand je les connais.
En procédant ainsi j'ai juste à bricoler une portion qui va chercher dans le bon fichier et envoi dans le bon tag. Pas de notion d'incrémentation, juste de la copie d'infos existantes. Bon c'est pas pour autant que c'est gagné, mais cela simplifie les choses quand même.
Excellent, merci pour cette piste
1/ Avant de poster votre question, faite une recherche sur le forum et/ou le site
2/ Plus votre question sera détaillée, plus les éventuelles réponses seront pertinentes
3/ Plus votre français sera correct, plus vous donnerez envie que l'on vous réponde
2/ Plus votre question sera détaillée, plus les éventuelles réponses seront pertinentes
3/ Plus votre français sera correct, plus vous donnerez envie que l'on vous réponde
4/ ==> Libérez les Huitres du bassin d'Arcachon <== 
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie