Vulgarisation

Quel format audio choisir pour son cloud musical ?

Il existe aujourd'hui de nombreux formats pour stocker des données audio, chacun avec ses cas d'usages, ses fonctionnalités, ses qualités et ses défauts. Il peut être difficile de s'y retrouver parmi cette jungle, je vais donc essayer de vous donner quelques clefs qui vous permettront d'y voir plus clair et de choisir celui adapté à vos besoins. J'en profiterai aussi pour vous expliquer quels formats j'ai choisis pour mes différents cas d'usage, et notamment dans mon cloud musical autohébergé.

Je vous préviens tout de suite que je ne vais pas être exhaustif, ni sur les formats (il en existe beaucoup trop), ni sur tous les paramètres possibles de chaque codec, sinon ça va devenir beaucoup trop long et vous allez vous enfuir (et moi aussi 😅️) ! Je me contenterais donc de parler des formats que je pense être les plus courants pour stocker de la musique, et des paramètres de bases des codecs utilisés.

Le domaine de l'audio numérique comporte plein de termes et de concepts techniques mais pas de panique, je vais essayer d'expliquer les points réellement importants au fur et à mesure. Je vous rajoute cependant un petit glossaire en fin d'article pour détailler davantage certains points et pour que vous puissiez vous y référer en cas de besoin. 😄️

Note

Cet article fait partie d'une série sur Nextcloud Music et sur l'autohébergement de son cloud musical :

Même si je fais parfois référence aux anciens articles dans les plus récents, tous les articles de la série sont indépendants, vous pouvez donc les lire dans l'ordre qu'il vous convient ! 😄️

Formats audio et compression

Comme je le disais en introduction, il existe aujourd'hui pleeeeeiiiiiiiinnnnnn de formats audio. On peut cependant tous les classer dans l'une des trois familles suivantes :

  • Sans compression : la qualité est maximale, mais la taille des fichiers est énorme. Généralement vous retrouvez des données audio non compressées dans des fichiers .wav (en pratique c'est un peu plus compliqué que ça mais on ne va pas rentrer dans les détails aujourd'hui) ou encore dans des fichiers .aiff.
  • Avec une compression SANS perte (lossless compression en anglais) : là encore la qualité est maximale et la taille des fichiers est importante mais moins qu'avec les formats sans compression. Le format le plus courant est le FLAC, mais on peut également rencontrer le format ALAC d'Apple.
  • Avec une compression destructive (lossy compression en anglais) : cette fois-ci la musique subit des pertes, normalement non perceptibles par un humain si la qualité est suffisante, et les fichiers sont beaucoup BEAUCOUP plus petits. Le format de compression à perte le plus célèbre est incontestablement le MP3, mais on peut en nommer pas mal d'autres qu'on trouve couramment : Vorbis, Opus ou encore AAC.

Je vous résume tout ça dans un petit tableau :

Compression Format Extensions de fichier Librement utilisable ? Créateur Année
aucune WAV (PCM) .wav ✅️ oui Microsoft/IBM 1991
AIFF .aiff .aif ❓️ (oui?) Apple 1988
sans perte FLAC .flac ✅️ oui Xiph.org 2001
ALAC .m4a .caf ⚠️ oui (depuis 2011) Apple 2004
destructive MP3 .mp3 ⚠️ oui (depuis 2017) multiple 1992
Vorbis .ogg .oga ✅️ oui Xiph.org 2000
Opus .opus ✅️ oui IETF 2012
AAC .aac .m4a ❌️ non Fraunhofer 1997

Le choix de la famille de format est déterminant et doit se faire d'abord en fonction du besoin :

  • Archivage : Pour conserver de la musique sur le long terme, on souhaite la préserver au maximum. On se tournera donc plutôt vers des formats de compression sans perte, ou éventuellement vers des formats non compressés mais c'est un peu dommage vu que ça prend plus de place.
  • Stockage : Pour de l'utilisation au quotidien (stockage sur son PC, sur un baladeur ou sur un téléphone par exemple) on partira plutôt sur des formats de compression destructifs. La qualité sera bien suffisante pour l'écoute et on gagnera énormément de place.
  • Streaming : Pour du streaming on se tournera là encore vers des formats de compression destructifs afin d'économiser de la bande passante. On aura toutefois tendance à utiliser une qualité plus faible que pour le stockage, la bande passante pouvant être assez limitée suivant les usages.

Une fois le type de compression choisie en fonction du besoin, il faut sélectionner un format. Comme on le verra un peu plus tard, les performances varient énormément d'un format à l'autre, mais la taille du fichier final n'est pas le seul point auquel il faut s'intéresser. La compatibilité du format avec les logiciels et appareils que l'on souhaite utiliser doit aussi être prise en compte. Il n'est par exemple pas pertinent d'encoder sa musique en Opus si on souhaite la lire dans sa voiture et que celle-ci ne supporte que le MP3. 😅️

Voici quelques exemples de critères pour choisir le format à utiliser :

  • La taille du fichier de sortie en fonction de la qualité que l'on choisit.
  • La compatibilité du format avec les appareils et les logiciels qu'on utilise.
  • L'ouverture du format (personnellement je privilégie les formats libres et ouverts plutôt que les formats propriétaires, même lorsqu'ils sont devenus librement utilisables par expiration des brevets, comme c'est le cas du MP3).
  • Le coût à l'encodage (à quel point ça consomme des ressources et donc à quel point c'est long d'encoder un fichier dans ce format).
  • Le coût au décodage (à quel point le décodage de la musique consomme des ressources et donc de la batterie sur les équipements portables).
  • ...

Bref, à vous de voir en fonction de vos besoins et de vos préférences personnelles. 🙃️

Débit binaire (bitrate)

Une fois le format choisi, il y a un paramètre très important à définir : le débit binaire (ou bitrate en anglais). Concrètement il s'agit de la quantité de données nécessaires pour stocker 1 seconde de musique. Ce débit s'exprime en bits par seconde et comme la plupart du temps il faut beaucoup de bits pour stocker 1 seconde de musique, on parlera plutôt en kilobits par seconde (abrégé kb/s ou kbps).

Lorsque vous utilisez un format non compressé, ce débit est fixe et vous n'avez pas la main dessus. Il dépend en pratique de la fréquence d'échantillonnage, de la résolution et du nombre de canaux (mono, stéréo, surround,...) mais on ne va pas rentrer autant dans les détails pour le moment. Vous retrouverez cependant un peu plus d'infos sur ces sujets dans le glossaire en fin d'article.

Pour ce qui est des formats de compression sans perte, le débit binaire peut être fixe ou variable mais vous n'avez là encore pas la main dessus.

En revanche, lorsque vous utilisez un format de compression destructif, le débit binaire est un paramètre sur lequel vous avez la main. Vous définissez le débit cible, et l'encodeur va se débrouiller pour l'atteindre. Pour faire cela, il va supprimer plus ou moins de données ce qui va affecter la qualité du résultat final. En clair : plus le débit binaire est faible, plus la qualité est médiocre et plus il est élevé, plus la musique est préservée.

Débit constant ou variable ?

Encore un autre paramètre sur lequel vous avez généralement la main pour les formats de compression destructifs — et parfois avec les formats de compression sans perte également — c'est de choisir si ce débit binaire est constant ou variable :

  • Débit binaire constant (ou constant bitrate, abrégé CBR en anglais) : le débit binaire reste toujours le même du début à la fin du fichier audio. Quelle que soit la complexité de la musique — une symphonie ou un silence — 1 seconde de donnée prendra toujours exactement la même place.
  • Débit binaire variable (ou variable bitrate, abrégé VBR en anglais) : le débit binaire change au cours du temps, en fonction de la complexité de la donnée audio à encoder. Ainsi 1 seconde de silence prendra beaucoup moins de place que 1 seconde d'une symphonie.

Dans le cas du débit binaire variable, on choisit, en fonction des codecs :

  • Soit un débit binaire « cible » qui sera une indication du niveau de qualité souhaité. Le logiciel d'encodage va alors essayer d'encoder aux alentours de ce débit, mais il pourra utiliser des débits plus faibles ou plus élevés en fonction de la complexité des données à un instant T.

    C'est de cette manière que fonctionne le paramètre de qualité de l'encodeur Vorbis oggenc ou encore le mode "ABR" de l'encodeur MP3 LAME.

  • Soit un intervalle de débits (un minimum et un maximum) qui contraindront l'encodeur. C'est ce qui est utilisé par le mode "VBR" de l'encodeur MP3 LAME.

  • Soit une taille de fichier cible, et dans ce cas on laisse l'encodeur se débrouiller pour trouver comment ajuster les débits binaires pour atteindre cet objectif. C'est un peu ce qu'on faisait à l'époque où on encodait nos films en DivX et qu'on souhaitait qu'il puisse tenir sur un CD de 700 Mo... 🙃️

Les encodages à débit variable préservent mieux la qualité des passages complexes d'une musique, il s'agit donc d'un bon choix la plupart du temps.

Dans le cas du streaming, les encodages à débit constant sont par contre à privilégier, car des changements brusques dans la quantité de données transmise ne peuvent pas être anticipés par les équipements réseau et on peut se retrouver avec des petites coupures qui sont fortement désagréables à l'écoute.

Attention toutefois, ici quand je parle de streaming, je parle de flux continu en direct, comme par exemple une webradio ou un live Twitch. La musique en « streaming » telle qu'elle fonctionne sur Nextcloud Music ou sur des plateformes comme Spotify, Deezer et autres n'est pas en direct. Le logiciel client télécharge les fichiers audio qu'il va en suite lire. Certes il peut arriver que le logiciel télécharge le fichier au fur et à mesure de la lecture mais il est en capacité d'anticiper les problèmes en téléchargeant une certaine quantité de données à l'avance. Il est donc tout à fait possible d'utiliser du VBR dans ce cas-ci.

C'est quoi un « bon » débit ?

Maintenant qu'on sait tout ça, c'est quoi un « bon » débit binaire ? Eh bah ça dépend du format, de la qualité du logiciel qui fait l'encodage et de la complexité de la donnée audio à encoder. Il n'y a pas de réponse toute faite, mais je vais quand même vous donner quelques éléments de réponse. 😁️

En supposant qu'on encode une musique stéréo à une fréquence d'échantillonnage de 44,1 kHz avec une profondeur de 16 bits depuis une source sans perte — soit typiquement un CD audio 😉️ — et avec un logiciel d'encodage de bonne qualité, on s'accorde généralement les valeurs suivantes.

Format MP3

Pour un MP3, la qualité perçue est :

  • médiocre en dessous de 96 kbps (le minimum étant 32 kbps),
  • "OK" à partir de 128 kbps,
  • bonne à partir de 192 kbps,
  • très bonne à partir de 256 kbps,
  • excellente à 320 kbps (le maximum supporté par ce format).

Source :

Format Vorbis

Pour du Vorbis, la qualité est :

  • bonne à 110 kbps (qualité 3 dans les paramètres du codec),
  • très bonne à 160 kbps (qualité 5 dans les paramètres du codec).

Source :

Format Opus

Pour de l'Opus, la qualité perçue est considérée :

  • bonne de 64 à 96 kbps (c'est la gamme de débit recommandée pour le streaming de musique et les webradios),
  • très bonne entre 96 kbps et 128 kbps (c'est la gamme de débit recommandé pour le stockage de musique).

À 128 kbps, les développeurs du format considèrent que l'encodage est « transparent », c'est-à-dire qu'aucune perte de qualité n'est perceptible par un être humain. Les débits au-delà ne sont utiles que pour encoder des données audio surround (plus de 2 pistes audio).

Source :

Comme vous pouvez le voir, tout ceci est très variable d'un format à l'autre, mais on peut remarquer que les formats les plus récents s'en sortent généralement mieux que les formats les plus anciens (ils ont besoin d'un débit plus faible pour stocker la musique dans une bonne qualité). C'est pour cette raison que j'ai tenu à indiquer les dates de création des différents formats dans le tableau récapitulatif de la section précédente. 😄️

Petit benchmark rapide

Afin d'illustrer rapidement la différence de poids entre les fichiers, j'ai encodé un même fichier audio non compressé¹ vers différents formats et différents débits binaires. Pour chaque format j'ai utilisé l'encodeur open source de référence :

  • flac pour FLAC,
  • lame pour MP3,
  • oggenc pour Vorbis,
  • et opusenc pour Opus.

Note

NOTE¹ : Pour ceux qui se demanderaient le morceau que j'ai choisi pour ce petit test est « Walkman » de LukHash. Vous pouvez aller l'écouter sur sa page Bandcamp si le cœur vous en dit :

Résultats du benchmark

Voici les résultats que j'ai obtenus :

Codec Bitrate cible Taille du fichier
WAV (PCM) 1411 kbps CBR 32,47 Mio
FLAC VBR 23,82 Mio
MP3 320 kbps ABR 6.53 Mio
192 kbps ABR 4,19 Mio
128 kbps ABR 2,85 Mio
Vorbis 160 kbps VBR (q5) 3,76 Mio
110 kbps VBR (q3) 2,56 Mio
Opus 128 kbps VBR 3,14 Mio
96 kbps VBR 2,35 Mio
64 kbps VBR 1,55 Mio

Et voici un petit graphique pour mieux mesurer les écarts :

Taille des fichiers en Mio en fonction du codec et du bitrate choisi

Taille des fichiers en Mio en fonction du codec et du bitrate choisi

On ne peut bien évidemment pas tirer de généralités de ce petit benchmark. Il faudrait pour cela reproduire le même encodage sur une grande quantité de musiques variées. Mais ça permet quand même de se faire une idée.

Pour reproduire à la maison

Si jamais vous voulez tester par vous-même sur des musiques que vous avez sous la main, voici le petit script qui permet de reproduire les encodages que j'ai effectués avec tous les paramètres des différents encodeurs que j'ai utilisés :

#!/bin/bash

## USAGE:
##   ./encode.sh INPUT_WAVE OUTPUT_NAME

INPUT_WAVE="$1"
OUTPUT_NAME="$2"

if [ ! -f "$INPUT_WAVE" ] || [ -z "$OUTPUT_NAME" ] ; then
    cat "$0" | grep "^##" | sed "s/^## \\?//"
    exit 1
fi

# FLAC (flac): sudo apt install flac
flac --best "$INPUT_WAVE" -o "$OUTPUT_NAME.flac"

# MP3 (lame): sudo apt install lame
lame -q 0 --abr 128 "$INPUT_WAVE" "$OUTPUT_NAME.abr-128.mp3"
lame -q 0 --abr 192 "$INPUT_WAVE" "$OUTPUT_NAME.abr-192.mp3"
lame -q 0 --abr 320 "$INPUT_WAVE" "$OUTPUT_NAME.abr-320.mp3"
# Example VBR encoding (96 kbps - 224 kbps)
# lame -q 0 --vbr-new -V 4 -b  96 -B 224 "$INPUT_WAVE" "$OUTPUT_NAME.vbr-096-224.mp3"
# Example CBR ecoding (128 kbps)
# lame -q 0 --cbr -b 128 "$INPUT_WAVE" "$OUTPUT_NAME.cbr-128.mp3"

# Vorbis (oggenc): sudo apt install vorbis-tools
oggenc -q 3 "$INPUT_WAVE" -o "$OUTPUT_NAME.vbr-q3.ogg"
oggenc -q 5 "$INPUT_WAVE" -o "$OUTPUT_NAME.vbr-q5.ogg"

# Opus (opusenc): sudo apt install opus-tools
opusenc --vbr --bitrate  64 "$INPUT_WAVE" "$OUTPUT_NAME.vbr-064.opus"
opusenc --vbr --bitrate  96 "$INPUT_WAVE" "$OUTPUT_NAME.vbr-096.opus"
opusenc --vbr --bitrate 128 "$INPUT_WAVE" "$OUTPUT_NAME.vbr-128.opus"

Pour l'utiliser vous aurez besoin d'installer les différents encodeurs nécessaires, ce qui peut se faire avec la commande suivante sous Debian et Ubuntu :

sudo apt install flac lame vorbis-tools opus-tools

Puis d'enregistrer le script dans un fichier "encode.sh" que vous pourrez ensuite lancer avec la commande :

bash encode.sh Walkman.wav Walkman_encoded

  • "Walkman.wav" est le nom du fichier audio non compressé d'entrée (au format Microsoft WAVE/PCM),
  • "Walkman_encoded" est le nom qui sera utilisé comme base pour les fichiers de sortie ("Walkman_encoded.vbr-q3.ogg", "Walkman_encoded.vbr-128.opus",...).

Quels formats ai-je choisis ?

Dans mon cas j'utilise essentiellement deux formats pour deux usages différents.

Lorsque je copie un CD ou achète de la musique en ligne, je privilégie les formats de compression sans perte et en particulier FLAC. Et comme les choses sont bien faites, la plupart des boutiques sérieuses proposent directement ce format !

Si on me fournit un autre format sans perte alors je réencode en FLAC car c'est celui que je préfère : il donne généralement des fichiers plus petits que les formats concurrents et il est libre et ouvert depuis ses débuts (comme je l'ai déjà dit, c'est important pour moi de privilégier les formats libres). Bien évidemment si la musique n'est disponible que dans des formats destructifs, je les conserve alors en l'état ; inutile de se retrouver avec des fichiers plus lourd, ça ne ramènera pas la qualité originale. 🙃️

Pour l'utilisation dans mon cloud en revanche j'ai fait le choix d'un format d'encodage destructif car la taille compte : plus le fichier est petit, plus on réduit le temps et la bande passante nécessaires pour le récupérer et plus on réduit la place occupée dans le cache du lecteur de musique.

Au début je pensais utiliser Vorbis pour cet usage, surtout par habitude, mais après un petit bench il s'est avéré qu'Opus, un format plutôt récent sur lequel je ne m'étais jamais penché, était un bien meilleur choix ! Il offre une meilleure qualité à débit binaire plus faible, il est plus rapide à encoder (ce qui est toujours intéressant quand on a quelques milliers de musiques à importer), il est libre et ouvert, et pour finir il est bien supporté partout où j'en avais besoin (navigateurs Web et clients Subsonic et Ampache que j'utilise sur mon PC et mon téléphone Android). Il a de plus été créé par les mêmes personnes que les formats Vorbis et Speex : il tire donc parti de toute l'expérience engrangée lors du développement et des années d'utilisation de ces formats !

Actuellement j'encode tout en Opus 128 kbps VBR pour mon cloud. J'ai choisi ce débit binaire un peu par défaut car quand j'ai monté mon cloud j'étais un peu pressé et j'avais la flemme de tester ce que ça donnait au niveau de la qualité dans les débits plus faibles. Mais à terme je réduirais probablement ce débit à 96 kbps car d'après mes tests récents ça semble bien suffisant.

C'est là qu'on voit l'intérêt d'utiliser des formats sans perte pour l'archivage : on peut réencoder comme on veut en fonction de l'évolution de nos besoins et contraintes, sans cumuler les pertes dues aux différents formats destructifs et aux encodages successifs.

En résumé :

  • j'utilise du FLAC pour l'archivage,
  • et de l'Opus VBR pour mon cloud, actuellement à un débit de 128 kbps mais je vais certainement passer à 96 kbps dans le futur.

Glossaire

J'ai regroupé ici une petite liste des termes barbares de l'article. Pour certains il s'agit d'une redite de ce que j'ai expliqué plus tôt, pour d'autres j'ai rajouté des informations qu'il n'était pas pertinent de développer dans l'article. Pour chacun des termes j'ai rajouté des liens vers des sources pour aller plus loin.

Codec

Codec est l'acronyme de COdeur DECodeur.

Bien qu'on utilise souvent ce terme pour désigner à la fois un format audio (ou vidéo) et ses implémentations il ne faut pourtant pas mélanger les deux :

  • un format audio est une norme qui définit comment sont organisées (et éventuellement compressées) les données,
  • un codec est une implémentation logicielle ou matérielle d'un format.

Par exemple MP3 est un format audio, LAME est un codec pour le format MP3.

Plus d'information :

Fréquence d'échantillonnage

Pour encoder un signal analogique, comme — au hasard — un signal audio, il faut l'échantillonner. Cela consiste à relever à intervalle régulier un point sur la courbe de ce signal. La fréquence d'échantillonnage (ou sampling rate en anglais) correspond au nombre de points que l'on relève par seconde et s'exprime en Hertz (Hz).

À gauche : signal continu, à droite : signal échantillonné résultant.

À gauche : signal continu, à droite : signal échantillonné résultant (graphique repris de la page Wikipédia sourcée plus bas)

Dans le cas de l'audio, et plus particulièrement de la musique, on retrouvera la plupart du temps une fréquence d'échantillonnage de 44,1 kHz soit 44100 points de données par secondes. Il s'agit de la fréquence d'échantillonnage utilisée par les CD audio. On peut quelques fois tomber sur des morceaux échantillonnés à 48 kHz mais c'est plutôt utilisé pour les pistes audio accompagnant de la vidéo (sur les DVD et la TNT entre autres). Des fréquences plus élevées sont également possibles mais elles sont plutôt réservées à la production audio professionnelle (Studio Master, tout ça).

Plus d'information :

Résolution

Comme on l'a vu juste avant, l'échantillonnage consiste à relever des points de données à intervalle régulier. La résolution (ou bit depth en anglais) correspond à la précision de chacun de ces points de données, ce qui se traduit dans notre monde numérique par le nombre de bits utilisés pour les encoder.

Le plus souvent vos musiques auront une résolution de 16 bits car c'est ce qu'utilisent les CD audio, mais vous pouvez parfois trouver de la musique à une résolution de 24 bits (musiques vendues sous l'appellation « Studio Master » ou « High-resolution », ou parfois sur les pistes audio des DVD ou des BluRay).

Plus d'information :

Débit binaire

Le débit binaire (ou bitrate en anglais) correspond à la quantité de données nécessaire pour stocker 1 seconde d'un flux audio. Ce débit s'exprime en kilobits par seconde (abrégé kb/s ou kbps).

Ce qu'il faut retenir c'est que pour deux musiques encodées dans les mêmes conditions (même format, même encodeur, etc.), celle avec le débit binaire plus élevée sera de meilleure qualité. Il ne faut par contre pas comparer les débits binaires des différents formats entre eux. Un fichier Opus à 128 kbps sera de qualité équivalente à un MP3 encodé à 224 ou 320 kbps.

Plus d'informations dans le passage dédié de cet article et sur Wikipédia :

CBR / VBR / ABR

Lorsque l'on encode une musique dans un format destructif, le débit binaire peut être constant ou variable. On distingue les dénominations suivantes :

  • CBR (constant bitrate) : Le débit binaire est toujours le même d'un bout à l'autre du fichier audio.

  • VBR (variable bitrate) : Le débit binaire varie au fil du temps en fonction de la complexité des données à encoder. Par exemple un silence de 1 seconde prendra beaucoup moins de place que 1 seconde de musique complexe. Une musique encodée en VBR sera généralement de meilleure qualité qu'une musique encodée avec un débit CBR équivalent.

  • ABR (average bitrate) : Il s'agit là encore d'un encodage à débit binaire variable. À ma connaissance on ne retrouve cette terminologie qu'avec l'encodeur MP3 LAME.

    Contrairement à la méthode d'encodage "VBR" de LAME, qui demande de choisir un débit minimal et maximal (par exemple "lame --vbr-new -b 96 -B 224 input.wav output.mp3"), la méthode "ABR" demande de choisir un débit moyen qui servira de cible pour la qualité du résultat (exemple: "lame --abr 128 input.wav output.mp3").

    Le principal intérêt de cette méthode est une plus grande prévisibilité de la taille du fichier finale, qui se rapprochera davantage de celle du CBR tout en améliorant la qualité du résultat.

Évolution du débit binaire avec un encodage CBR et VBR sur un échantillon de 3 secondes de musique

Évolution du débit binaire avec un encodage CBR et VBR sur un échantillon de 3 secondes de musique

Plus d'informations dans le passage dédié de cet article et sur les liens suivants (en anglais) :

Pulse-code modulation (PCM)

La modulation par impulsions et codage, plus connue sous son abréviation anglaise « PCM » (pour pulse-code modulation) est une manière de représenter un signal analogique sous une forme numérique.

Pour faire court, il s'agit de la manière dont sont stockées les données d'un CD audio. On retrouve aussi couramment ce codage dans les fichiers WAVE (.wav) de Microsoft ou AIFF (.aiff) d'Apple.

Plus d'informations :

Zee end

Cet article est beaucoup plus long que ce que j'avais prévu au départ [et pourtant j'ai pas mal taillé dans le gras !] mais j'espère qu'il vous aura intéressés et qu'il vous aura permis d'y voir plus clair dans le domaine de l'encodage audio.

À bientôt pour de nouveaux articles ! 😄️