Logo de FFmpeg, comportant un monogramme vert stylisé "FF" sur la gauche - ressemblant à des bandes de film ou à des circuits - à côté du texte noir "FFmpeg" en caractères gras sans-serif, souvent utilisé pour convertir des fichiers MP3 et Ogg Vorbis via Bash, sur un fond gris clair.

Bash : convertir des MP3 en Ogg Vorbis avec FFmpeg

Pour les besoins du Centre de Kriya Yoga France, j’ai déjà eu à convertir toute une série de fichiers MP3 vers Ogg Vorbis afin de les publier proprement sur le Web.

À l’époque, j’utilisais avconv. Aujourd’hui, je recommande plutôt ffmpeg. Il est plus courant, mieux documenté, disponible dans les dépôts des distributions Linux modernes, et beaucoup plus simple à retrouver dans six mois quand vous aurez oublié la commande exacte. Ce qui arrivera. Soyons honnêtes.

Voici donc une version moderne pour convertir des fichiers MP3 en Ogg Vorbis, puis faire l’opération inverse si nécessaire.

Installer FFmpeg sous Linux

Sur Ubuntu, Debian, Linux Mint et distributions dérivées, installez FFmpeg avec apt :

sudo apt update
sudo apt install ffmpeg

Vérifiez ensuite que la commande est disponible :

ffmpeg -version

Vous pouvez aussi vérifier que FFmpeg connaît les encodeurs Vorbis et MP3 :

ffmpeg -encoders | grep -E 'libvorbis|libmp3lame'Code language: JavaScript (javascript)

Vous devriez voir au moins libvorbis pour Ogg Vorbis et libmp3lame pour MP3.

Convertir un fichier MP3 en Ogg Vorbis

Pour convertir un seul fichier MP3 en Ogg Vorbis :

ffmpeg -i "fichier.mp3" -c:a libvorbis -q:a 5 "fichier.ogg"Code language: CSS (css)

Le paramètre -c:a libvorbis force l’encodeur audio Vorbis. Le paramètre -q:a 5 active une qualité variable raisonnable pour la plupart des usages.

Pour Ogg Vorbis, la qualité ne se pense pas exactement comme un débit fixe en kilobits par seconde. On utilise plutôt une échelle de qualité. En pratique, -q:a 4 ou -q:a 5 donne déjà un résultat propre pour de l’audio parlé ou musical standard.

Convertir tous les MP3 d’un dossier en Ogg Vorbis

Si vos noms de fichiers ne contiennent pas d’espaces, une boucle simple peut suffire :

for file in *.mp3; do
    ffmpeg -i "$file" -c:a libvorbis -q:a 5 "${file%.mp3}.ogg"
doneCode language: JavaScript (javascript)

La partie ${file%.mp3}.ogg remplace proprement l’extension .mp3 par .ogg.

Version plus robuste, avec gestion des fichiers contenant des espaces :

find . -maxdepth 1 -type f -iname '*.mp3' -print0 | while IFS= read -r -d '' file; do
    output="${file%.*}.ogg"
    ffmpeg -i "$file" -c:a libvorbis -q:a 5 "$output"
doneCode language: JavaScript (javascript)

Cette version utilise find avec -print0, ce qui évite de casser la boucle dès qu’un fichier contient un espace, une apostrophe ou un caractère un peu pénible.

Éviter d’écraser les fichiers existants

Par défaut, FFmpeg peut demander confirmation si le fichier de sortie existe déjà. Pour refuser l’écrasement automatiquement, ajoutez -n :

find . -maxdepth 1 -type f -iname '*.mp3' -print0 | while IFS= read -r -d '' file; do
    output="${file%.*}.ogg"
    ffmpeg -n -i "$file" -c:a libvorbis -q:a 5 "$output"
doneCode language: JavaScript (javascript)

À l’inverse, pour écraser les fichiers existants sans poser de question, utilisez -y. À manier avec calme et caféine modérée.

ffmpeg -y -i "fichier.mp3" -c:a libvorbis -q:a 5 "fichier.ogg"Code language: CSS (css)

Choisir la qualité Vorbis

Pour Ogg Vorbis, -q:a définit une qualité variable. Plus la valeur est élevée, plus le fichier sera lourd, mais meilleure sera la qualité.

QualitéUsage conseillé
-q:a 3Audio parlé, taille réduite
-q:a 4Bon compromis pour voix et musique légère
-q:a 5Qualité confortable pour un usage Web
-q:a 6Meilleure qualité, fichiers plus lourds

Pour des conférences, cours, méditations guidées ou contenus parlés, -q:a 4 peut suffire. Pour de la musique, je partirais plutôt sur -q:a 5 ou -q:a 6.

Convertir des Ogg Vorbis en MP3

Pour convertir un fichier Ogg Vorbis vers MP3 :

ffmpeg -i "fichier.ogg" -c:a libmp3lame -q:a 2 "fichier.mp3"Code language: CSS (css)

Avec libmp3lame, -q:a 2 donne généralement une très bonne qualité en VBR. Pour un fichier parlé, vous pouvez viser plus léger avec un débit fixe :

ffmpeg -i "fichier.ogg" -c:a libmp3lame -b:a 128k "fichier.mp3"Code language: CSS (css)

Pour convertir tous les fichiers .ogg du dossier courant en MP3 :

find . -maxdepth 1 -type f -iname '*.ogg' -print0 | while IFS= read -r -d '' file; do
    output="${file%.*}.mp3"
    ffmpeg -n -i "$file" -c:a libmp3lame -q:a 2 "$output"
doneCode language: JavaScript (javascript)

Gardez toutefois une chose en tête : convertir un Ogg en MP3 revient à convertir un format avec perte vers un autre format avec perte. Si vous avez encore les fichiers originaux en WAV ou FLAC, repartez de ces sources.

Conserver les métadonnées audio

FFmpeg conserve souvent les métadonnées simples, mais vous pouvez être plus explicite avec -map_metadata 0 :

ffmpeg -i "fichier.mp3" -map_metadata 0 -c:a libvorbis -q:a 5 "fichier.ogg"Code language: CSS (css)

Pour vérifier les métadonnées d’un fichier avant ou après conversion :

ffprobe "fichier.ogg"Code language: JavaScript (javascript)

HTML5 audio : faut-il encore fournir MP3 et Ogg ?

Pour intégrer de l’audio dans une page HTML, vous pouvez fournir plusieurs formats avec plusieurs balises source. Le navigateur choisira le format qu’il sait lire.

<audio controls>
    <source src="audio.mp3" type="audio/mpeg">
    <source src="audio.ogg" type="audio/ogg">
    Votre navigateur ne supporte pas l’élément audio.
</audio>Code language: HTML, XML (xml)

En pratique, MP3 bénéficie aujourd’hui d’une excellente compatibilité. Ogg Vorbis reste intéressant comme format ouvert, notamment si vous voulez proposer plusieurs sources ou privilégier un format libre.

Créer un dossier de sortie

Pour éviter de mélanger les fichiers source et les fichiers convertis, créez un dossier dédié :

mkdir -p ogg

Puis envoyez les fichiers convertis dedans :

find . -maxdepth 1 -type f -iname '*.mp3' -print0 | while IFS= read -r -d '' file; do
    base="$(basename "${file%.*}")"
    ffmpeg -n -i "$file" -c:a libvorbis -q:a 5 "ogg/${base}.ogg"
doneCode language: JavaScript (javascript)

C’est plus propre, surtout si vous devez ensuite envoyer les fichiers vers un site WordPress, un CDN ou un dossier d’archives.

Version Bash réutilisable

Si vous faites souvent cette conversion, créez un petit script :

nano mp3-to-ogg.shCode language: CSS (css)

Collez le contenu suivant :

#!/usr/bin/env bash

set -euo pipefail

output_dir="ogg"
quality="5"

mkdir -p "$output_dir"

find . -maxdepth 1 -type f -iname '*.mp3' -print0 | while IFS= read -r -d '' file; do
    base="$(basename "${file%.*}")"
    output="${output_dir}/${base}.ogg"

    if [[ -e "$output" ]]; then
        printf 'Ignoré, fichier existant : %s\n' "$output"
        continue
    fi

    printf 'Conversion : %s -> %s\n' "$file" "$output"
    ffmpeg -hide_banner -i "$file" -map_metadata 0 -c:a libvorbis -q:a "$quality" "$output"
doneCode language: PHP (php)

Rendez-le exécutable :

chmod +x mp3-to-ogg.shCode language: CSS (css)

Puis lancez-le dans le dossier contenant vos MP3 :

./mp3-to-ogg.sh

Checklist avant conversion

  • Installez ffmpeg.
  • Travaillez sur une copie si les fichiers sont importants.
  • Utilisez des guillemets autour des noms de fichiers.
  • Préférez find -print0 pour les lots avec espaces et caractères spéciaux.
  • Utilisez -n pour éviter d’écraser les fichiers existants.
  • Évitez les conversions avec perte répétées.
  • Pour le Web, testez l’intégration avec plusieurs navigateurs.

À retenir

Pour convertir des MP3 en Ogg Vorbis sous Linux, utilisez désormais ffmpeg plutôt que avconv.

La commande simple à retenir est :

ffmpeg -i "fichier.mp3" -c:a libvorbis -q:a 5 "fichier.ogg"Code language: CSS (css)

Pour un lot complet, préférez une boucle robuste avec find -print0. Elle vous évitera les petits drames causés par les espaces dans les noms de fichiers. Les fichiers audio ont déjà assez souffert comme ça.

Sources

The 18th Century : the Age of Enlightenment photo

The 18th Century: the Age of Enlightenment

  1. The 18th Century: the Age of Enlightenment
  2. The Gothic and the Fantastic
  3. The 19th Century : Romanticism in Art and Literature
  4. English Romanticism (1798-1832)
  5. 19th Century Literary Movements : Realism and Naturalism
  6. British Civilisation and Literature: 19th and 20th centuries

Introduction

The 18th Century can be dubbed “the Age of Enlightenment” as it was marked by French philosophers such as Voltaire, Rousseau or Diderot (the Encyclopédie was published in 1761).

The Enlightenment is characterized by the belief of the natural goodness of man: man is perfectible, it is the idea of progress obtained through the use of reason.

Since man is naturally good, all bad things come from society: if we could fight prejudices and oppressive social institutions, man would be better. It’s a question of education: political and social reforms would bring man happiness. These are the principles of the French Revolution.

The situation is different in the United Kingdom. The revolution had already been made: the “Glorious Revolution” of 1688 established a parliamentary monarchy but it was not a democracy since you needed to be rich to go to Parliament.

John Locke, a famous British philosopher, influenced the notion of parliamentary democracy. He was a predecessor of the Enlightenment but his ideas were only applied in America after the War of Independence (1776-1782).

The American Constitution was applied in 1789. In the USA, there is a republican government with a president and a principle of equality in front of the law: “Everyone has the right to life, liberty and the pursuit of happiness”. There is a truly optimistic belief in man and happiness, and progress and reason.

Lire la suite

MySQL : convertir les tables MyISAM au format InnoDB photo

MySQL : convertir les tables MyISAM au format InnoDB

MySQL : MyISAM et InnoDB

A ses débuts, MySQL utilisait le moteur de stockage MyISAM.

C’est la raison pour laquelle on retrouve beaucoup d’exemples de création de tables sur Internet avec l’instruction engine=MyISAM (ce qui, au passage, peut faire planter pas mal de créations de bases/tables).

Aujourd’hui, le moteur de stockage par défaut de MySQL est InnoDB.

MyISAM n’est plus activement développé, à l’inverse d’InnoDB. Il est donc recommandé de convertir les tables MyISAM au format InnoDB, afin de bénéficier des dernières optimisations de performance du nouveau moteur.

innodb-myisam-mysql

Le moteur InnoDB

InnoDB est un moteur de stockage inclus d’origine dans toutes les distributions fournies par MySQL AB. Son principal avantage par rapport aux autres moteurs de stockage de MySQL est qu’il permet des transactions ACID (Atomiques, Cohérentes, Isolées et Durables), ainsi que la gestion des clés étrangères (avec vérification de la cohérence).

Toutes les bases de données sont stockées au même endroit. Par défaut dans le fichier ibdata1 qui, sous les systèmes de type unix, se trouve généralement dans /var/lib/mysql. Il est également possible d’utiliser plusieurs fichiers ou même d’utiliser directement une ou plusieurs partitions sur le disque en mode RAW.

Ce moteur de base de données utilise aussi deux fichiers de logs, d’habitude ib_logfile0 et ib_logfile1. Les fichiers de définitions de table .frm sont également dans un dossier au nom de la base comme pour MyISAM.

Depuis sa version 5.5, MySQL utilise InnoDB comme moteur par défaut.

Comment connaitre le format actuel de vos tables ?

Pour faire un petit état des lieux du format actuel des tables de votre base de données, il suffit de vous identifier sur le serveur SQL et de lancer cette requête :

SHOW TABLE STATUS FROM `database`;Code language: JavaScript (javascript)

Il vous suffit de remplacer database par le nom de votre base de données et de regarder la valeur de la colonne Engine.

Convertir les tables MyISAM au format InnoDB

Pour convertir des tables MyISAM au format InnoDB, il suffit de lancer une requête SQL va grandement nous simplifier la vie:

SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;')
FROM information_schema.tables
WHERE 1=1
    AND engine = 'MyISAM'
    AND table_schema NOT IN ('information_schema', 'mysql', 'performance_schema');Code language: JavaScript (javascript)

Le résultat de cette requête est une liste bien formatée de requêtes à lancer pour que toutes nos tables soient converties au format InnoDB.

Voici le résultat de cette requête sur le serveur :

+-----------------------------------------------------------+
| CONCAT('ALTER TABLE ',table_schema,'.',table_name,' ENGINE=InnoDB;')   |
+-----------------------------------------------------------+
| ALTER TABLE blog.blog_wc_comments_subscription ENGINE=InnoDB;
| ALTER TABLE blog.blog_wc_phrases ENGINE=InnoDB;
| ALTER TABLE blog.blog_wc_users_voted ENGINE=InnoDB;
+-----------------------------------------------------------+Code language: JavaScript (javascript)

Toutes les tables des bases de données qui sont au format MyISAM au format InnoDB sont listées, à l’exception des tables utilisées dans la gestion de MySQL (‘information_schema’, ‘mysql’, ‘performance_schema’) qui doivent rester en MyISAM.

Etape de Conversion

Il vous suffit ensuite de lancer cette liste de requêtes ALTER TABLE sous MySQL, Adminer ou PHPMyAdmin pour convertir vos tables. Lancez la liste de commandes que vous venez de trouver :

ALTER TABLE blog.blog_wc_comments_subscription ENGINE=InnoDB;
ALTER TABLE blog.blog_wc_phrases ENGINE=InnoDB;
ALTER TABLE blog.blog_wc_users_voted ENGINE=InnoDB;

Et voilà, vos tables MyISAM sont maintenant devenues des tables InnoDB.

Lire la suite