đŸ’Ÿ Archived View for sebastien-mouchet.fr â€ș blog â€ș fr â€ș encodage-audio-video-avec-ffmpeg.gmi captured on 2024-02-05 at 09:43:35. Gemini links have been rewritten to link to archived content

View Raw

More Information

âžĄïž Next capture (2024-03-21)

-=-=-=-=-=-=-

Encodage audio/video avec FFmpeg

Publié le 20 janvier 2024, par Sébastien

This blog post is also available in English.

———

TLDR ?
Si vous n’avez pas 15 minutes à accorder à la lecture de cet article, voici une version raccourcie à 3 minutes :

Aide-mémoire FFmpeg

———

FFmpeg est un outil puissant, capable de décoder et encoder des centaines de formats audio et vidéo différents.

Et il ne se limite pas Ă  l’encodage et au dĂ©codage, il est aussi capable de :

Cet article concerne uniquement le transcodage, cela dit.

Si vous n’avez jamais entendu parler d’FFmpeg, sachez que c’est un programme en ligne de commande.

Attendez
 ne partez pas en courant, il est assez facile Ă  utiliser, en rĂ©alitĂ©. 😉

Il fournit des bibliothÚques logicielles utilisées par de trÚs nombreux programmes, notamment des lecteurs multimédia, comme VLC, et beaucoup de logiciels de transcodage audio/vidéo (par exemple Handbrake).

Par le passĂ©, j’ai utilisĂ© des applications avec une interface graphique pour faire du transcodage, mais depuis, j’ai supprimĂ© les intermĂ©diaires, et j’utilise dĂ©sormais FFmpeg directement.

Installation

Si vous ĂȘtes sous Windows, vous pouvez tĂ©lĂ©charger des binaires prĂ©-compilĂ©s :

https://ffmpeg.org/download.html#get-packages

En pratique, la derniĂšre fois que j’ai eu besoin de tĂ©lĂ©charger FFmpeg, j’ai utilisĂ© la derniĂšre version Ă  l’adresse suivante :

https://github.com/BtbN/FFmpeg-Builds/releases

Plus précisément :

ffmpeg-master-latest-win64-gpl.zip 

DĂ©compressez le ZIP quelque part.

Pour plus de commoditĂ©, vous pouvez ajouter le dossier contenant « ffmpeg.exe » Ă  votre « Path » (variable d’environnement), ce qui vous permettra d’appeler « ffmpeg.exe » depuis n’importe quel dossier.

Une recherche de « variables d’environnement » dans le menu dĂ©marrer devrait faire apparaĂźtre la boĂźte de dialogue correspondante, oĂč vous pouvez modifier la variable utilisateur « Path ».

Pour éviter de casser quoi que ce soit, assurez-vous de ne rien supprimer dans cette variable (ajoutez simplement le chemin souhaité à la fin).

Ensuite, ouvrez un terminal en utilisant Maj + clic-droit sur le dossier souhaité, puis « Ouvrir dans le Terminal ».

Si besoin, vous pouvez changer de dossier grùce à la commande « cd » (qui signifie « change directory ») :

cd C:\Users\Sebastien\Videos\

Si vous ĂȘtes sous Linux, l’installation est gĂ©nĂ©ralement trĂšs simple, vu qu’FFmpeg est inclus dans la plupart des distributions majeures.

Par exemple, sous Ubuntu ou Debian, il suffit de taper :

sudo apt install ffmpeg

Audio, sans perte → FLAC

Supposons que vous ayez un fichier WAV, non compressĂ©, copiĂ© Ă  partir d’un CD.

Vous pouvez le convertir en FLAC, qui sera environ 30 % plus petit (parfois jusqu’à 50 %) sans perdre en qualitĂ©, grĂące Ă  la compression sans perte.

ffmpeg -i input.wav output.flac

C’est aussi simple que ça. La syntaxe de base nĂ©cessite seulement de spĂ©cifier le fichier d’entrĂ©e avec l’option « -i » (« input ») et de terminer la commande par le nom du fichier de sortie.

FFmpeg comprendra automatiquement qu’il doit utiliser l’encodeur FLAC, en se basant sur l’extension du fichier.

Bien sĂ»r, convertir de l’audio avec perte (comme le MP3) en FLAC n’a pas d’intĂ©rĂȘt : vous ne rĂ©cupĂ©rerez pas la qualitĂ© perdue en faisant ça.

Audio, avec pertes, compatibilitĂ© maximum → MP3

L’encodage avec pertes permet des gains significatifs sur la taille du fichier, au prix d’une perte de qualitĂ© (irrĂ©versible).

Le MP3 est un codec avec pertes trÚs célÚbre, avec une trÚs large compatibilité. Pratiquement tous les appareils/logiciels qui prennent en charge des codecs « avec pertes » supportent le MP3.

ffmpeg -i input.wav -c:a libmp3lame -q:a 0 output.mp3

Par rapport Ă  l’exemple du FLAC, il y a 2 options supplĂ©mentaires :

Ici, j’ai explicitement sĂ©lectionnĂ© l’encodeur MP3 LAME (libmp3lame). Je suis Ă  peu prĂšs sĂ»r que c’est l’encodeur MP3 par dĂ©faut, donc vous pouvez probablement vous passer de cette option dans le cas prĂ©sent.

Le MP3 peut ĂȘtre encodĂ© soit avec un dĂ©bit constant (jusqu’à 320 kbit/s), soit avec un dĂ©bit variable (VBR). Le dĂ©bit constant est considĂ©rĂ© comme du gaspillage, du fait que la complexitĂ© du signal varie au cours du temps. Il est donc logique d’allouer moins de dĂ©bit au parties du morceaux qui sont plus faciles Ă  encoder.

Le fait de spĂ©cifier le paramĂštre de qualitĂ© demande Ă  LAME d’utiliser le mode dĂ©bit variable. 0 est la qualitĂ© la plus Ă©levĂ©e, et 9, la plus faible.

Voici les dĂ©bits trĂšs approximatifs que vous pouvez obtenir – pour du stĂ©rĂ©o – en jouant sur le paramĂštre de qualité :

La grande majoritĂ© des gens ne sont pas capables d’entendre la diffĂ©rence entre une source sans perte (lossless) et un MP3 encodĂ© correctement avec un dĂ©bit de 245 kbit/s. MĂȘme si le MP3 n’est pas sans perte, les dĂ©bits Ă©levĂ©s sont dits « transparents ».

Il y a de nombreuses annĂ©es, j’avais dĂ©terminĂ© lors d’un « blind test » que je n’étais personnellement pas capable de distinguer une version lossless d’une version encodĂ©e avec LAME avec un dĂ©bit variable de 190 kbit/s de moyenne.

Si vous ne recherchez pas la transparence, vous pouvez descendre jusqu’à 130 kbit/s (« -q:a 5 ») avec une qualitĂ© correcte – du moment que votre fichier source Ă  une bonne qualitĂ©.

Et l’AAC ?

L’AAC (Advanced Audio Coding) est un autre codec « avec pertes » connu, popularisĂ© par Apple avec ses iPods et avec iTunes. L’AAC n’est pas aussi rĂ©pandu que le MP3, cela dit.

Bien que l’AAC soit techniquement supĂ©rieur au MP3, l’encodeur AAC natif d’FFmpeg n’est malheureusement pas bon – il est en fait pire que l’encodeur MP3 LAME.

FFmpeg supporte un autre encodeur de meilleure qualitĂ©, « libfdk_aac », mais, en raison de problĂšmes liĂ©s Ă  sa licence, vous ne pouvez pas tĂ©lĂ©charger de binaires prĂ©-compilĂ©s qui l’incluent. Il vous faudrait compiler FFmpeg vous-mĂȘme (bonne chance
).

Si vous voulez vraiment encoder de l’AAC avec une qualitĂ© correcte, votre meilleure option est iTunes, pas FFmpeg.

Audio, avec pertes, dernier cri → Opus

L’Opus est un codec plus rĂ©cent, et techniquement supĂ©rieur Ă  Ă  peu prĂšs n’importe quel autre codec audio avec pertes, Ă  la fois pour de la musique, et pour de la voix Ă  bas-dĂ©bit.

Il est utilisĂ© par des services de streaming comme SoundCloud, YouTube, ou Vimeo, et pour les communications vocales dans Skype, Discord, WhatsApp, Signal, et bien d’autres.

ffmpeg -i input.wav -c:a libopus -b:a 160k output.opus

La commande ci-dessus utilisera un débit variable, avec un débit moyen aux alentours de 160 kbit/s.

« -b:a » signifie « débit audio » (« audio bitrate ») et « -ab » est un alias de « -b:a ».

Vous pouvez aussi utiliser l’extension « .ogg » pour des fichiers Opus.

Opus se place systĂ©matiquement en tĂȘte des tests d’écoute (« blind tests ») qui le comparent Ă  d’autres codecs.

Par exemple, jetez un Ɠil aux rĂ©sultats suivants (2014, en anglais) :

http://listening-test.coresv.net/results.htm

La perte de qualitĂ© d’Opus Ă  96 kbit/s a Ă©tĂ© considĂ©rĂ©e par beaucoup comme Ă©tant imperceptible, et comme « perceptible, mais pas pĂ©nible » par d’autres.

L’AAC (encodĂ© par iTunes) n’était pas loin derriĂšre, en termes de qualitĂ©, au mĂȘme dĂ©bit.

Le MP3 se plaçait un tout petit peu moins bien que l’AAC (plus proche de « perceptible, mais pas pĂ©nible »), mais avec un dĂ©bit plus Ă©levĂ©, cela dit (de l’ordre de 130 kbit/s).

Du moment que l’appareil / le logiciel que vous souhaitez utiliser prend en charge le format Opus, vous devriez l’utiliser, si vous avez besoin d’un codec audio avec pertes.

VidĂ©o, large compatibilitĂ© → H.264 + MP3

H.264, aussi connu sous le nom d’AVC (Advanced Video Coding), est une norme de compression vidĂ©o trĂšs populaire.

C’est le codec vidĂ©o principal utilisĂ© dans les Blu-rays classiques (les Blu-rays Ultra HD utilisent son successeur, le H.265).

Bien que des codecs plus récents existent, il est toujours trÚs utilisé sur le Web.

En plus de la compatibilitĂ©, sa popularitĂ© lui confĂšre un autre avantage : l’accĂ©lĂ©ration matĂ©rielle.

La plupart des appareils construits dans les 10 Ă  15 derniĂšres annĂ©es peuvent dĂ©coder du H.264 au niveau matĂ©riel, ce qui permet de meilleures performances, et une utilisation d’énergie moindre, comparĂ©es Ă  un dĂ©codage logiciel.

L’encodeur H.264 d’FFmpeg s’appelle x264 :

ffmpeg -i input.mp4 -c:v libx264 -crf 24 -c:a libmp3lame -q:a 2 output.mp4

Vous pouvez utiliser « -vcodec » à la place de « -c:v » si vous voulez (« codec vidéo »).

Ici, j’ai utilisĂ© le conteneur MP4 (extension « .mp4 »), qui est trĂšs bien pris en charge, y compris par les navigateurs.

Le Matroska (MKV) est un autre conteneur intĂ©ressant. Il est trĂšs polyvalent : il peut stocker un nombre illimitĂ© de pistes vidĂ©o, audio, et de sous-titres dans un seul fichier. Alors que le seul moyen d’inclure des sous-titres dans un fichier MP4 est de les « incruster » dans le flux vidĂ©o. Le MKV n’est pas aussi largement supportĂ© que le MP4, cependant.

Pour l’utiliser, remplacez simplement « .mp4 » par « .mkv » dans la commande.

Le paramĂštre « -crf » vous permet d’ajuster la qualitĂ© de sortie du flux vidĂ©o. CRF est l’abrĂ©viation de « Constant Rate Factor » et signifie que l’encodeur va essayer de garder une qualitĂ© globalement constante tout au long de la vidĂ©o, plutĂŽt qu’un dĂ©bit constant.

Voici l’explication de la documentation FFmpeg à propos des valeurs du CRF (traduite par mes soins) :

L’intervalle du CRF est 0–51, oĂč 0 est sans perte (pour du 8 bit uniquement, pour du 10 bit, utilisez -qp 0), 23 est la valeur par dĂ©faut, et 51 est la moins bonne qualitĂ© possible. Une valeur plus basse donne gĂ©nĂ©ralement une meilleure qualitĂ©, et un intervalle raisonnable est 17–28. ConsidĂ©rez 17 ou 18 comme Ă©tant visuellement sans perte ou presque; Ça devrait ĂȘtre visuellement identique ou presque identique Ă  la source, mais ce n’est pas techniquement sans perte.
L’intervalle est exponentiel, donc augmenter la valeur du CRF de +6 conduit Ă  diviser par deux le dĂ©bit / la taille de fichier, en gros, tandis que -6 double approximativement le dĂ©bit.

https://trac.ffmpeg.org/wiki/Encode/H.264

VidĂ©o, dernier cri → AV1 + Opus

En 2024, le codec vidĂ©o le plus avancĂ© que vous pouvez utiliser est l’AV1. (À ne pas confondre avec le – trĂšs vieux – format de conteneur AVI !)

FFmpeg propose plusieurs encodeurs AV1 : « libaom », « SVT-AV1 » et « rav1e ».

https://trac.ffmpeg.org/wiki/Encode/AV1

Sur ma machine, j’ai obtenu de meilleurs rĂ©sultats avec « SVT-AV1 », en termes de vitesse d’encodage, comparĂ©e Ă  la qualitĂ© de sortie.

ffmpeg -i input.mp4 -c:v libsvtav1 -crf 38 -preset 4 -c:a libopus -b:a 128k output.webm

Cette fois-ci, j’ai utilisĂ© le conteneur WebM. C’est un format ouvert, qui supporte les codecs suivants :

J’aurais aussi pu utiliser le MKV ou le MP4.

L’option « preset » de « libsvtav1 » sert Ă  ajuster le compromis entre la vitesse d’encodage et la qualitĂ©. Elle va de 0 (meilleure qualitĂ©) Ă  13 (le plus rapide). Utilisez la valeur la plus faible possible. C’est Ă  dire que la vitesse d’encodage devrait ĂȘtre aussi lente que vous pouvez vous le permettre. Sinon, vous pourriez obtenir une qualitĂ© dĂ©cevante.

Les valeurs de CRF ne sont pas directement comparables Ă  celles de x264 : j’ai fait un petit test, et j’ai obtenu une qualitĂ© un peu meilleure avec un CRF de 38 pour « SVT-AV1 » qu’avec un CRF de 24 pour x264.

L’AV1 peut atteindre une compression 30 % supĂ©rieure au VP9, et 50 % par rapport au H.264.

Le décodage matériel nécessite un appareil récent, cela dit.

Il a commencé à apparaßtre en 2020 (dans des produits Intel, NVIDIA, AMD), et est devenu plus courant dans des produits sortis en 2023 (chez Apple, Qualcomm, 
).

Sans décodage matériel, la lecture de vidéos utilisera beaucoup de CPU, et videra la batterie rapidement.

Codecs vidéo intermédiaires : VP8, VP9, H.265

Le VP8 est un format ouvert, conçu comme une alternative à H.264. Il est un peu inférieur en termes de qualité, cependant.

Il a Ă©tĂ© remplacĂ© par le VP9, avec une efficacitĂ© amĂ©liorĂ©e. Il devrait ĂȘtre capable de faire mieux que le H.264 de ce cĂŽtĂ© lĂ .

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 40 -b:v 0 -c:a libopus -b:a 128k output.webm

H.265 est le successeur de H.264, et est compĂ©titif avec le VP9 d’un point de vue du ratio qualitĂ© / taille de fichier.

Le dĂ©codage matĂ©riel est plus courant pour le VP9 et le H.265 que pour l’AV1 (mais moins courant que pour le H.264).

Compatibilité avec les navigateurs

Si vous avez un jour besoin d’encoder une vidĂ©o pour qu’elle soit lue directement dans un navigateur (sans rĂ©-encodage par une plateforme telle que YouTube), allez faire un tour sur « Can I use » :

https://caniuse.com/mpeg4

https://caniuse.com/webm

https://caniuse.com/av1

https://caniuse.com/opus

Remarque au sujet des brevets logiciels

Si vous ĂȘtes un particulier, et que vous encodez des fichiers audio/vidĂ©o pour votre propre usage, vous n’avez probablement pas Ă  vous soucier des brevets logiciels.

Par contre, si vous avez l’intention de diffuser du contenu audio/vidĂ©o au public, ou de dĂ©velopper un logiciel ou du matĂ©riel en rapport avec des codecs, attention.

Faites les recherches nĂ©cessaires pour dĂ©terminer si vous avez besoin d’une licence d’utilisation portant sur des brevets.

Heureusement, certains codecs ne donnent pas lieu Ă  des royalties, soit parce que les brevets en question ont expirĂ© (ex : MP3), soit parce qu’ils ont Ă©tĂ© conçus dĂšs le dĂ©part pour ĂȘtre exempts de redevances (ex : FLAC, VP8, VP9, AV1).

Opus a Ă©galement Ă©tĂ© conçu pour utiliser uniquement des brevets qui ne donnent pas lieu Ă  des redevances, mais un groupe d’entreprises ayant des pratiques discutables essaye dĂ©sormais de se faire payer des royalties pour les appareils qui implĂ©mentent Opus au niveau matĂ©riel.