Linux Quimper

FLAC to MP3 dans des sous-dossiers en ligne de commande


(piero) #1

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 !

find -name "*.flac" -exec bash -c 'ffmpeg -i "{}" -y -acodec libmp3lame -ab 320k "${0/.flac}.mp3"' {} \;

Après, un petit coup de

find -name "*.flac" -exec bash -c 'rm "{}"' \;

pour supprimer les flac’s en trop, et le tour est joué :slight_smile:


(Michel) #2

Joli ! Vive le bash !
Je ne sais pas si cela me servira un jour, mais je prends note.


(l'homme réparé) #3

Quel est l’intérêt de convertir un fichier d’un format libre à un format propriétaire :slight_smile:


(vincent) #4

Sans compter l’empreinte carbone d’une telle conversion !

Scandale !


(Otyugh) #5

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 :stuck_out_tongue:

La plupart des auto-radios aussi son souvent seulement compatible mp3.


(Otyugh) #6

…Sans parler du fait que mp3 est tombé dans le domaine publique
depuis décembre 2017 : MP3 — Wikipédia


(piero) #7

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).


(Otyugh) #8

find -name "*.flac" -exec bash -c 'ffmpeg -i "{}" -y -acodec libmp3lame -ab 320k "${0%.flac}.mp3" && rm "${0}"' {} \;

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"' {} \;


(piero) #9

Testé ta commande retouchée [dans ton Edit] : résiste à plusieurs interruption [(Ctrl + c) x 2]

Un grand merci @Otyugh !!!


(Otyugh) #10

résiste à plusieurs interruption [(Ctrl + c) x 2]

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 :stuck_out_tongue:

find -name "*.flac" -exec bash -c 'ffmpeg -i "$0" -y -acodec libmp3lame -ab 320k "${0/.flac/.mp3}" && rm "$0" || kill $PPID' {} \;

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 :stuck_out_tongue:


(piero) #11

Franchement, ton code, la version Édit ci dessus, est exactement ce que je cherchais, et fonctionne parfaitement.


(Otyugh) #12

Pis ça m’arrange, j’avais pas testé le truc que j’ai envoyé par la suite et je suis sûr qu’y aurait eu des trucs à corriger :smiley: