Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/06/2012, à 23:07

Kshegzyaj

Garder les métadonnées lors d'une conversion flac-mp3

Bonsoir,

Je suis en train de me faire un petit script pour convertir mes fichiers flac en mp3, à l'aide de flac, lame, metaflac et id3v2 (car le manuel lame n'est pas très explicite en ce qui concerne les tags supplémentaires).

Si je veux garder la sortie de metaflac dans une variable (j'aimerais éviter d'utiliser un fichier temporaire), les retours à la ligne ne sont pas conservés. Y a-t-il un moyen de les garder ?

$ metadonnees=$(metaflac --export-tags-to=- 01\ -\ Aria.flac)
$ echo $metadonees
ALBUM=The Open Goldberg Variations BWV 988 ALBUMARTIST=Kimiko Ishizaka ARTIST=Kimiko Ishizaka COMMENT=Generated by Merging Technologies Album Publishing Label Code: Open Goldberg COMPOSER=Johann Sebastian Bach DATE=2012 DISCNUMBER=1 ENCODEDBY=Merging Technologies Album Publishing GENRE=Classical ISRC=QMNYZ1200001 LABEL=Open Goldberg TITLE=Aria TRACKNUMBER=1 TRACKTOTAL=16

Si j'utilise un pipe, les retours à la ligne seront bien conservés, mais si je veux faire une série de grep, sed ou autres, le flux ne sera pas gardé après le premier grep :

$ metaflac --export-tags-to=- 01\ -\ Aria.flac | (grep ^ALBUM; grep ^ARTIST;)
ALBUM=The Open Goldberg Variations BWV 988
ALBUMARTIST=Kimiko Ishizaka

Je ne veux pas faire quelque chose de ce style là :

ARTIST=$(metaflac --show-tag=ARTIST | cut -d = -f 2)
ALBUM=$(metaflac --show-tag=ALBUM | cut -d -f 2)
etc...

En effet, je ne sais pas forcément à l'avance quels tags sont renseignés. Par exemple, les champs compositeur, interprète, numéro de disque sont parfois vides...Et je prévois de faire une petite fonction qui regarde quels sont les champs qui contiennent quelque chose.

Des idées ?


Netbook : Asus Eee 1215B / AMD C-60 / 4Go RAM / Radeon HD 6290 / Ubuntu 12.04
Laptop : Packard Bell EasyNote TM85 / Intel Core i5-430M / 4Go RAM / Windows Seven
Fixe : Packard Bell ? / Intel Pentium 4 / 2 Go RAM / Nvidia Geforce 6200LE / Windows XP et Ubuntu 12.04
Console : Nintendo Wii / IBM Broadway / 76 Mo RAM / ATI Hollywood / Debian Lenny

Hors ligne

#2 Le 21/06/2012, à 23:53

AnsuzPeorth

Re : Garder les métadonnées lors d'une conversion flac-mp3

Bjr,

Pour garder les sauts de lignes à une variable, faut l'entourer de guillemets.

:~$ echo "$var"
#ou meiux
:~$ echo "${var}"

Pour m'amuser ...

:~$ eval $(sed -r 's/(^[^=]*=)(.*)$/\1"\2"/g' <<< "$(metaflac --export-tags-to=- 01\ -\ Aria.flac)")
echo ${TRACKTOTAL}

Si tu dois recup des variables qui peuvent ne pas etre renseignés, tu peux leur données une valeur par defaut.

:~$ echo ${VarInconnu:-NaN}
NaN

Sinon, pour récupéré les tags, j'ai pas trouvé mieux que mutagen , le plus rapide et le seul qui a réussi à récupérer tous les tags de mes fichiers (même avec encodage exotique ...)

Dernière modification par AnsuzPeorth (Le 22/06/2012, à 00:05)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#3 Le 27/06/2012, à 12:26

Kshegzyaj

Re : Garder les métadonnées lors d'une conversion flac-mp3

Ah oui, c'était tout bête. Je savais qu'il fallait utiliser les double quotes pour conserver les espaces dans les noms de fichiers, par exemple, j'aurais dû y penser !


En ce qui concerne ta commande pour t'amuser :

$ eval $(sed -r 's/(^[^=]*=)(.*)$/\1"\2"/g' <<< "$(metaflac --export-tags-to=- 01\ -\ Aria.flac)")

Je suis encore un grand débutant en ce qui concerne les expressions régulières. Si j'ai bien compris l'utilisation de eval, ça ajoute des double quote après le '=', et à la fin de la ligne ? Cependant, la substitution en elle-même est un peu floue pour moi. À première vue, j'en déduis que les \1 et \2 représentent les deux couples de parenthèses ? Mais dans ce cas-là, pourquoi le '$' n'est pas dans la parenthèse, ou inversement, pourquoi le premier '^' y est ?


Je ne connaissais pas mutagen, je vais voir ce qu'il en est.

Dernière modification par Kshegzyaj (Le 27/06/2012, à 12:27)


Netbook : Asus Eee 1215B / AMD C-60 / 4Go RAM / Radeon HD 6290 / Ubuntu 12.04
Laptop : Packard Bell EasyNote TM85 / Intel Core i5-430M / 4Go RAM / Windows Seven
Fixe : Packard Bell ? / Intel Pentium 4 / 2 Go RAM / Nvidia Geforce 6200LE / Windows XP et Ubuntu 12.04
Console : Nintendo Wii / IBM Broadway / 76 Mo RAM / ATI Hollywood / Debian Lenny

Hors ligne

#4 Le 28/06/2012, à 12:49

AnsuzPeorth

Re : Garder les métadonnées lors d'une conversion flac-mp3

Bjr,
eval "evalue" les variables dans l'environnement.
La commande sed decoupe chaque ligne pour y ajouter des " autour de la valeur de la variable.
Chaque tag est une variable chargé dans l'environnement.
Donc, après cette commande, tu auras les variables, ALBUM, ARTIST, ALBUMARTIST, etc,etc, chargées avec leur valeur.
Je considère que la sortie de ton soft donne un tag par ligne, sinon, ca n'ira pas wink

Pour les ^ et $ hors des parenthèses, ca change rien, dedans ou dehors, c'est kif-kif.
Donc:
^ => debut de ligne
[^=]* => tout sauf un =, répété un nombre indéfini de fois.
(.*) => n'importe quel caractère, répété un nombre indéfini de fois.
$ => fin de ligne

\1"\2"
Donc le \1 aura comme value le tag=, et le \2 aura sa value, que j'ai entouré de "

Ca donnera donc :
ALBUM="The Open Goldberg Variations BWV 988"
ALBUMARTIST="Kimiko Ishizaka"
ARTIST="Kimiko Ishizaka"
etc,etc

Il faudra peut etre modifié un peu, il y aura peut etre un  blanc a la fin de la variable, je n'ai pas testé avec ton soft, donc je peux pas dire.

Pour mutagen, c'etait pour un lecteur que j'ai dans mes cartons, j'ai essayé un peu tout les lecteur de tag, et mutagen est le seul à s'en être bien sortie. Je l'utilise aussi dans un petit utilitaire, movebytag.
Mutagen est aussi le plus rapide que j'ai utilisé, et de loin ....


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne