Bonjour les zami, un peu de bash le dimanche matin.
Vu que je suis toujours hésitant là dessus, j’ai trouvé une jolie commande (c’est pas tout jeune, 2012-2014) pour convertir tout mes sous-dossiers de flac en mp3 320 (lame Qualität) : Attention de ne pas la lancer depuis n’importe quel répertoire !
Les lecteurs mp3 qui lisent que des mp3 - personnellement j’en utilise
beaucoup et ceux qui lisent du flac/ogg sont une rareté ou des
smartphones espions
La plupart des auto-radios aussi son souvent seulement compatible mp3.
Si y’a des volontaires savants, je cherche à intégrer la suppression du fichier .flac, au fur et à mesure après encodage, à la première ligne de commande. Ça sera plus propre et permettra l’interruption et la reprise (au pire y’aura un doublon incomplet).
Ha ben si de suite tu sors la brosse à lustrer, moi j’accoure.
Edition : pour “normaliser” un peu l’écriture pour que ça soit plus simple à piger (parce qu’on appelle la même variable de deux manières, alors qu’une seule ça va très bien) : find -name "*.flac" -exec bash -c 'ffmpeg -i "$0" -y -acodec libmp3lame -ab 320k "${0/.flac/.mp3}" && rm "$0"' {} \;
Normalement ça « change rien » pour l’ordinateur, c’est plus pour
l’élégance. En fait y a deux processus à arrêter, d’où les deux « ctrl+c » : y a
cella de « find » qui itère sur chaque fichier, et ffmpeg qui fait la
conversion. Si tu fais que arrêter ffmpeg, find embraye sur un second
à moins que tu ne l’arrêtes avant.
Pour empêcher ça… Mhhhhm.
Ben faut encore ajouter un truc à cette ligne de commande plus si
courte
Pour expliquer en « humain » : find itère sur tout ce qui finit .flac ; à chaque fois il appelle ffmpeg pour la conversion ; si la conversion est un succès, on supprime l’original, si la conversion est une erreur; on arrêter tout.
Sauf qu’un AUTRE problème arrive si on fait ça. Vu que parfois si tu veux reprendre la conversion, ben il y aura des fichiers déjà convertis, et ffmpeg se rendra compte, et t’enverra probablement un code d’erreur, et là ça va tout interrompre.
Hum. Doooonc. find -name "*.flac" -exec bash -c '[ ! -f "${0/.flac/.mp3}" ] && { ffmpeg -i "$0" -y -acodec libmp3lame -ab 320k "${0/.flac/.mp3}" && rm "$0" || kill $PPID }' {} \;
Mais c’est grave du bricolage et à ce niveau vaudrait ptéte mieux écrire un vrai script
Avec parallel (à installer via le gestionnaire de paquets), on transcode sur les x coeurs du processeur (x fichiers à la fois, donc – puisque lame ne permet pas de paralléliser le transcodage d’un fichier) :