Comment convertir plusieurs fichiers audio ogg en mp3
Comment convertir plusieurs fichiers audio ogg en mp3 en ligne de commandes.
Ouiiiiiiiiiii, je sais, mp3 c'est propriétaire, mais comme mon lecteur
ne veut rien lire d'autre...
Une ligne de bash pour transformer tous les .ogg d'un dossier en mp3
Exécuter la commande suivante dans une consule Bash :ls -b *.ogg |while read i ; do echo $i && oggdec "$i" && lame -b160 "$( echo $i | sed 's/ogg$/wav/g' )" "$(echo $i | sed 's/ogg$/mp3/g' )" ; done
Créer un script pour créer une commande qui transforme tous les .ogg d'un dossier en mp3
On peut avoir souvent besoin d'effectuer cette conversion, pour le bien-être de son baladeur préféré.
Voici ce que donnerait la ligne suivante, ré-écrite sur plusieurs lignes, dans un fichier de commandes.
Le fichier s'appelle dans notre cas ogg2mp3 ; on le crée dasn /usr/local/bin/ et on l'autorise à être exécuté :
#!/bin/bash
#fichier ogg2mp3
# convertit les ogg en mp3 dans le dossier courant
# a copier dans /usr/local/bin
# chmod 755 /usr/local/bin/ogg2mp3
ls -b *.ogg |while read i
do echo "conversion de $i en mp3"
oggdec "$i"
lame -b160 "$( echo $i | sed 's/ogg$/wav/g' )" "$(echo $i | sed 's/ogg$/mp3/g' )"
rm -- "$( echo $i | sed 's/ogg$/wav/g' )"
done
Ci-dessous les commentaires :
ls -b *.ogg : liste les fichiers ogg ; l'option -b permet de prendre en
comptes les espaces et autres caractères spéciaux en ajoutant un '\'
on passe le résultat à la boucle while.
'read' permet de lire le flux résultant, ligne par ligne (la boucle 'for' lirait mot par mot, en coupant sur chaque espace !!)
echo $i : ligne de contrôle pour nous indiquer le fichier qui va être traité
oggdec : dépend directement du paquet vorbis-tools, pour décoder en wav par exemple ;)
lame : l'option -b permet de définir le débit du flux mp3 résultant. La
compression par défaut est 128kbps sur ma distribution. Tu devrais
faire des tests car en fonction de la compression des .ogg en entrée,
il est inutile de laisser trop de qualité au mp3. un -b128 devrait
donner des résultats satisfaisants tout en produisant des fichiers
moins volumineux.
$( COMMANDES ) : les COMMANDES sont exécutées dans les parenthèses, et
le résultat remplace le bloc $( COMMANDES ). Il est ainsi possible de
calculer dynamiquement le nom de fichier.
echo $i : affiche le contenu de la variable $i (le fichier ogg)
sed 's/ogg$/wav/g' : sed permet d'exécuter une expression régulière sur
un flux de données texte. Ici, il s'agit de remplacer la chaine ogg en
fin de ligne (le $) par wav
idem pour calculer le nom du fichier mp3.
rm -- "$( echo $i | sed 's/ogg$/wav/g' )" : l'option -- de rm permet de
lui passer en nom de fichier des noms qu'on demande explicitement de ne
pas interpréter. Par exemple rm -- --help permet de supprimer un
fichier dont le nom est "--help". Le nom de fichier est calculé comme
ci-dessus. Il est entre guillemets pour ne pas avoir de problème avec
les espaces.
La version en ligne de commandes ne supprime pas les .wav ; c'est facile à ajouter ;)