đŸ 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
âĄïž Next capture (2024-03-21)
-=-=-=-=-=-=-
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 :
âââ
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.
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
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.
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Ă©.
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.
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.
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
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.
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).
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 » :
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.