Nautilus-script : FLAC2MP3 pour que ça sonne bien dans la voiture
Je ne sais pas pour vous mais, de mon côté, je ne conçois point de déplacement motorisé sans musique. De plus, j'ai depuis longtemps pris l'habitude d'archiver ma musique sous forme numérique dans mon ordinateur. Et pour cela, j'ai choisi l'excellent format FLAC.
Le seul problème avec le FLAC c'est qu'à l'instar du MKV pour la vidéo (et pas la peine de venir troll sur la différence conteneur/codec, ça ne change rien à mon exemple), il est très peu supporté par les lecteurs hardware destinés au grand public. En fait, je ne connais personnellement que deux modèles d'autoradio qui lisent le FLAC (mais il est tout à fait possible qu'il y en ait d'autres), des Kenwood pour ne pas les citer (je n'ai pas pour habitude de citer des marques mais quand lesdites marques font un effort pour supporter les codecs et conteneurs libres, elles le méritent un tantinet). D'autre part, il faut bien avouer que de lire du FLAC dans sa voiture présente un intérêt somme toute limité, la différence de qualité sonore avec un MP3 au bitrate suffisant en ce milieu bruyant qu'est une automobile en marche n'étant vraisemblablement à la portée que de ceux ayant une ouïe digne de celle de Daredevil, ce qui n'est pas mon cas. Et puis, même si le prix des clefs USB a sérieusement baissé ces dernières années, il n'empêche que 400 morceaux en MP3 prennent 4Go alors qu'en FLAC, ils en prennent 16 (en gros, hein, ne cherchez pas la petite bête).
Enfin, le contenu de ma clef USB dédiée à l'autoradio change régulièrement, au gré de mes envies et humeurs : je parcours ma médiathèque quand soudain, j'avise un morceau ou un album et le besoin de l'envoyer sur ma clef me chatouille. Que faire ? Ouvrir une interface graphique ? Non merci. Passer par un terminal ? J'aime la ligne de commande mais ça peut vite devenir fastidieux, même avec les alias qui vont bien. Par contre — ô joie — j'utilise Nautilus comme gestionnaire de fichiers. Et j'aime beaucoup me faire des petits scripts pour y ajouter des fonctionnalités. Alors quoi de plus logique, simple et pratique que d'en mitonner un qui me permettra de transformer mes FLAC en MP3 sur un simple clic-droit ? D'autant que je veux :
- encoder mes FLAC en MP3 en
+ gardant les Tags que je fais avec amour quand je transcode mes CD/vinyles/K7/whatever
+ normalisant le volume
+ maximisant le volume
+ évitant toute saturation
Ben oui parce que devoir (presque) à chaque fois ajuster le volume quand ça passe d'un morceau à l'autre, ça me brouille l'écoute, si vous voyez c'que j'veux dire et si vous me permettez de manier le contrepet sur un sujet aussi grave. Donc, trêve de digressions oiseuses, place au script en question :
#!/bin/bash IFS=' ' printf %s "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" | while read -r f do flac2mp3() { # Retrieve the tags from the FLAC file ARTIST=$(metaflac "$1" --show-tag=ARTIST | cut -d= -f2-) TITLE=$(metaflac "$1" --show-tag=TITLE | cut -d= -f2-) ALBUM=$(metaflac "$1" --show-tag=ALBUM | cut -d= -f2-) GENRE=$(metaflac "$1" --show-tag=GENRE | cut -d= -f2-) TRACKNUMBER=$(metaflac "$1" --show-tag=TRACKNUMBER | cut -d= -f2-) TOTALTRACKS=$(metaflac "$1" --show-tag=TOTALTRACKS| cut -d= -f2-) DATE=$(metaflac "$1" --show-tag=DATE | cut -d= -f2-) COMMENT=$(metaflac "$1" --show-tag=COMMENT | cut -d= -f2-) # Actually do something flac -dc "$1" | lame -m j -q 0 --replaygain-accurate --vbr-new -V 0 -\ --add-id3v2 --pad-id3v2 --ignore-tag-errors\ --ta "$ARTIST"\ --tt "$TITLE"\ --tl "$ALBUM"\ --tg "$GENRE"\ --tn "$TRACKNUMBER"/"$TOTALTRACKS"\ --ty "$DATE"\ --tc "$COMMENT"\ "$2".mp3; # Normalize, maximize and prevent clipping mp3gain -e -r -k -m 20 "$2".mp3; } # File or folder? if [[ -d $f ]]; then # Folder find "$f" -type f |\ grep flac |\ egrep -v "(Instrumental)|(Inst.)|(Instru.)" |\ while read -r file do name="${file##*/}"; name="${name%.*}"; mkdir -p "$f"/$(basename "$f"); cd "$f"/$(basename "$f"); flac2mp3 "$file" "$name"; done else # File name="${f##*/}"; name="${name%.*}"; flac2mp3 "$f" "$name"; fi done # Let me know when you're done, dude zenity --info --title='FLAC to MP3' --text="Conversion FLAC vers MP3 terminée."
Quelques notes :
Que fait le script, concrètement ? C'est simple : on prend un fichier en FLAC (sauf les pistes instrumentales, si elles sont correctement nommées), on récupère ses Tags, on le stream dans lame pour l'encodage en MP3 (joint-stereo, qualité 0, VBR new 0 — bref, la meilleure qualité possible — et on ajoute les Tags) puis on le passe à mp3gain pour normaliser et maximiser le volume tout en interdisant la saturation. De ce fait, on obtient des MP3 haute qualité ayant tous le même volume perçu. C'est‑y pas beau, ça ?
Pour que ce script fonctionne, il vous faut avoir installé flac, lame, mp3gain et zenity. Vous pouvez avantageusement remplacer ce dernier par notify-send, par exemple, mais comme le traitement d'un grand nombre de fichier peut être relativement long, j'aime que le script me présente un « OK » à cliquer pour me signifier qu'il a fini alors qu'une notification, on peut toujours la rater.
Je ne suis pas un génie du bash, alors il est fort probable qu'on puisse faire un script mieux, plus beau, qui vous assurera un franc succès auprès de la gent féminine ou que sais-je encore mais en tout cas, il fonctionne. Ceci dit, si vous parlez en bash à votre femme et que vous l'avez appris même à votre chat et que vous avez une suggestion, elle est bienvenue.
Il y a une limitation connue : si vous lancez le script sur un dossier contenant des sous-dossier, tous les morceaux iront dans un sous-dossier du dossier sur lequel vous lancez le script et portant son nom. Vous suivez ? Concrètement, je lance le script sur dossier1 qui contient dossier2 et dossier3, les morceaux de dossier2 et dossier3 vont tous dans ./dossier1/dossier1. Personnellement, je m'en fiche parce que 1) je ne mets pas de discographie complète sur ma clef et 2) même si je voulais en mettre, il suffit d'aller dans dossier1, de sélectionner dossier2 et dossier3 et de lancer le script dessus, ça fonctionne très bien.
Enfin, ça n'a rien à voir mais j'irais volontiers mettre mon poing dans la figure de l'ingénieur sadique au cerveau dérangé qui a conçu le système de classement des morceaux de mon autoradio… L'ordre alphabétique ? Trop simple, pas intéressant, has-been. Non, si on prenait plutôt l'ordre d'écriture des fichiers sur la partition ? Enfoiré ! ‑_-