Il existe de nombreux outils open source pour éditer, peaufiner et convertir des multimédias en exactement ce dont vous avez besoin. Des outils comme Audacity ou Handbrake sont fantastiques, mais parfois vous voulez juste changer un fichier d’un format en un autre rapidement. Entrez dans FFmpeg.
FFmpeg est une collection de différents projets pour la manipulation des fichiers multimédia. Il est souvent utilisé dans les coulisses de nombreux autres projets liés aux médias. Malgré son nom, il n’a rien à voir avec le Moving Picture Experts Group ou la myriade de formats multimédias qu’il a créés.
Dans cet article, j’utiliserai FFmpeg par le biais de l’outil en ligne de commande ffmpeg, qui n’est qu’un seul et petit morceau du projet FFmpeg. Il est disponible sur de nombreux systèmes d’exploitation différents et est inclus par défaut dans certains systèmes d’exploitation. Il peut être téléchargé sur le site Web de FFmpeg ou par le biais de la plupart des gestionnaires de paquets.
FFmpeg est un outil puissant qui peut faire presque tout ce que vous pouvez imaginer avec des fichiers multimédias. Dans cet article, nous sommes intéressés à l’utiliser pour convertir des fichiers, donc nous ne ferons pas une plongée profonde dans l’ensemble de ses fonctionnalités. Avant d’examiner l’utilisation de FFmpeg, nous devons d’abord jeter un coup d’œil rapide sur ce qu’est exactement un fichier multimédia.
Fichiers multimédia
Dans une vue de très haut niveau, un fichier multimédia est décomposé en un conteneur et ses flux. Les flux comprennent les composants AV réels, tels que l’audio ou la vidéo d’un film, et sont codés à l’aide d’un codage média particulier, ou codec. Chaque codec a ses propres propriétés, forces et faiblesses. Par exemple, le codec FLAC est bon pour l’audio sans perte de haute qualité, tandis que Vorbis est conçu pour concurrencer le MP3 en termes de taille de fichier tout en offrant une meilleure qualité audio. Cela signifie qu’un fichier formaté en FLAC sera beaucoup plus volumineux qu’un flux audio Vorbis, mais que le son sera meilleur. Aucun n’est intrinsèquement meilleur que l’autre, car chacun essaie de faire des choses différentes.
Le conteneur est l’enveloppe des flux. Il présente une interface unique avec laquelle les lecteurs et outils multimédias peuvent interagir. Certains conteneurs sont très avancés et permettent toute sorte de flux, y compris plusieurs flux vidéo et audio à l’intérieur d’un seul conteneur. Les flux d’un conteneur ne doivent cependant pas être uniquement audio ou vidéo. Différents conteneurs autorisent différents flux, par exemple des sous-titres, des informations sur les chapitres ou d’autres métadonnées. Tout dépend de ce que le conteneur est configuré pour autoriser.
Ceci est une représentation abstraite des fichiers multimédias et passe sous silence une grande partie des différences entre les conteneurs. Beaucoup exigent certains flux et métadonnées ou mettent des restrictions sur les codecs ou les contenus autorisés. Cette explication est suffisante pour vous permettre de lire cet article. Pour en savoir plus, cliquez sur les liens ci-dessus.
Sachez que l’encodage vidéo et audio peut prendre beaucoup de temps à s’exécuter. Vous devriez être prêt à vous installer pendant un certain temps lorsque vous utilisez FFmpeg.
Conversion de base
La chose qui fait trébucher la plupart des gens lorsqu’il s’agit de convertir de l’audio et de la vidéo est de sélectionner les bons formats et conteneurs. Heureusement, FFmpeg est assez intelligent avec ses paramètres par défaut. Habituellement, il sélectionne automatiquement les bons codecs et conteneurs sans aucune configuration complexe.
Par exemple, disons que vous avez un fichier MP3 et que vous voulez le convertir en un fichier OGG :
ffmpeg -i input.mp3 output.ogg
Cette commande prend un fichier MP3 appelé input.mp3 et le convertit en un fichier OGG appelé output.ogg. Du point de vue de FFmpeg, cela signifie convertir le flux audio MP3 en un flux audio Vorbis et envelopper ce flux dans un conteneur OGG. Vous n’avez pas eu à spécifier les types de flux ou de conteneur, parce que FFmpeg l’a compris pour vous.
Cela fonctionne aussi avec les vidéos :
ffmpeg -i input.mp4 output.webm
Parce que WebM est un format bien défini, FFmpeg sait automatiquement quelle vidéo et quel audio il peut supporter et convertira les flux pour être un fichier WebM valide.
Selon votre conteneur de choix, cela ne fonctionnera pas toujours. Par exemple, les conteneurs comme Matroska sont conçus pour gérer presque tous les flux que vous voulez y mettre, qu’ils soient valides ou non. Cela signifie que la commande :
ffmpeg -i input.mp4 output.mkv
peut résulter en un fichier avec les mêmes codecs que ceux qu’avait le fichier input.mp4, ce qui peut ou non être ce que vous voulez.
Sélectionner vos codecs
Alors que faites-vous lorsque vous voulez utiliser un conteneur comme Matroska (qui peut gérer presque n’importe quel flux) mais toujours influencer quels codecs sont dans la sortie ? FFmpeg à la rescousse ! Vous pouvez sélectionner les codecs nécessaires en utilisant le drapeau -c.
Ce drapeau vous permet de définir les différents codecs à utiliser pour chaque flux. Par exemple, pour définir le flux audio pour être Vorbis, vous utiliserez la commande suivante:
ffmpeg -i input.mp3 -c:a libvorbis output.ogg
La même chose peut être faite pour changer la vidéo ainsi que le flux audio:
ffmpeg -i input.mp4 -c:v vp9 -c:a libvorbis output.mkv
Cela fera un conteneur Matroska avec un flux vidéo VP9 et un flux audio Vorbis, essentiellement le même que le WebM que nous avons fait plus tôt.
La commande ffmpeg -codecs imprimera chaque codec que FFmpeg connaît. La sortie de cette commande changera en fonction de la version de FFmpeg que vous avez installée.
Changer un seul flux
Plus souvent que vous ne le voudriez, le fichier que vous avez est partiellement correct avec seulement un seul flux dans le mauvais format. Cela peut prendre beaucoup de temps pour ré-encoder le flux correct. FFmpeg peut vous aider dans cette situation:
ffmpeg -i input.webm -c:v copy -c:a flac output.mkv
Cette commande copie le flux vidéo de input.webm dans output.mkv et encode le flux audio Vorbis dans un FLAC. Le drapeau -c est vraiment puissant.
Changer un conteneur
L’exemple précédent peut être appliqué à la fois aux flux audio et vidéo, vous permettant de convertir d’un format de conteneur à un autre sans avoir à faire un encodage de flux supplémentaire:
ffmpeg -i input.webm -c:av copy output.mkv
Influencer la qualité
Maintenant que nous avons une poignée sur les codecs, la question suivante est : comment définir la qualité de chaque flux ?
La méthode la plus simple consiste à modifier le débit binaire, ce qui peut ou non entraîner une qualité différente. La capacité des humains à voir et à entendre n’est pas aussi propre et nette que nous aimerions le penser. Parfois, la modification du débit binaire fait une énorme différence dans la qualité subjective. D’autres fois, cela ne fait rien d’autre que de modifier la taille du fichier. Parfois, il est très difficile de dire ce qui se passera sans l’essayer.
Pour définir le débit binaire de chaque flux, vous utilisez le drapeau -b, qui fonctionne de manière similaire au drapeau -c, sauf qu’au lieu des options de codec, vous définissez un débit binaire.
Par exemple, pour modifier le débit binaire de la vidéo, vous l’utiliseriez comme ceci:
ffmpeg -i input.webm -c:a copy -c:v vp9 -b:v 1M output.mkv
Ceci copiera l’audio (-c:une copie) de l’entrée.webm et convertir la vidéo vers un codec VP9 (-c:v vp9) avec un débit binaire de 1M/s (-b:v), le tout regroupé dans un conteneur Matroska (output.mkv).
Une autre façon dont nous pouvons avoir un impact sur la qualité est d’ajuster la fréquence d’images de la vidéo en utilisant l’option -r :
ffmpeg -i input.webm -c:a copy -c:v vp9 -r 30 output.mkv
Cela crée un nouveau Matroska avec le flux audio copié et la fréquence d’images du flux vidéo forcée à 30 images par seconde, au lieu d’utiliser la fréquence d’images de l’entrée (-r 30).
Vous pouvez également ajuster les dimensions de votre vidéo en utilisant FFmpeg. La façon la plus simple est d’utiliser une taille de vidéo prédéterminée:
ffmpeg -i input.mkv -c:a copy -s hd720 output.mkv
Cela modifie la vidéo à 1280×720 dans la sortie, mais vous pouvez définir la largeur et la hauteur manuellement si vous le souhaitez:
ffmpeg -i input.mkv -c:a copy -s 1280x720 output.mkv
Cela produit exactement la même sortie que la commande précédente. Si vous voulez définir des tailles personnalisées dans FFmpeg, n’oubliez pas que le paramètre de largeur (1280) vient avant la hauteur (720).
L’ajustement de la fréquence d’images et du débit binaire sont deux techniques grossières mais efficaces pour affecter la qualité des médias. Le réglage de ces valeurs très élevées ne peut pas améliorer la qualité d’une source existante si sa qualité est déjà faible.
La modification de ces paramètres est la plus efficace pour réduire rapidement un flux de haute qualité afin d’obtenir une taille de fichier plus petite. L’ajustement de la taille de votre vidéo ne peut pas améliorer la qualité, mais peut la faire mieux tenir sur une tablette plutôt que sur votre téléviseur. Changer la taille d’une vidéo 640×480 en 4K ne l’améliorera pas.
Changer la qualité de vos fichiers est une question très subjective, ce qui signifie qu’il n’y a pas une seule façon qui fonctionnera à chaque fois. La meilleure méthode est de faire quelques changements et de tester si cela vous semble ou sonne mieux.
Modification des flux
Souvent, vous avez un fichier qui est presque parfait, et vous avez juste besoin de couper quelques parties. Cela peut être fait plus facilement avec un outil qui vous montre ce que vous modifiez, mais si vous savez exactement où vous voulez le couper, il est très facile de le faire dans FFmpeg:
ffmpeg -i input.mkv -c:av copy -ss 00:01:00 -t 10 output.mkv
Ceci copiera les flux vidéo et audio (-c:av copy) mais coupera la vidéo. L’option -t définit la durée de coupe à 10 secondes et l’option -ss définit le point de départ de la vidéo pour le découpage, dans ce cas à une minute (00:01:00). Vous pouvez être plus précis que les heures, minutes et secondes, en descendant jusqu’aux millisecondes si nécessaire.
Extraction de l’audio
Parfois, vous ne vous souciez pas vraiment de la vidéo, vous voulez juste l’audio. Heureusement, cela est très simple dans FFmpeg avec le drapeau -vn :
ffmpeg -i input.mkv -vn audio_only.ogg
Cette commande extrait uniquement l’audio de l’entrée, l’encode en Vorbis, et l’enregistre dans audio_only.ogg. Vous avez maintenant un flux audio isolé. Vous pouvez également utiliser les drapeaux -an et -sn de la même manière pour dépouiller les flux audio et de sous-titres.
En faire un GIF
Récemment, les GIF animés (avec un g dur car je ne suis pas un monstre) ont fait leur retour. Personnellement, je pense que le GIF est le pire format que l’on puisse choisir pour une vidéo. Sa qualité de compression et sa taille sont terribles, il est soumis à des limites très strictes en matière de couleurs, de fréquence d’images et de métadonnées de conteneur, et il ne peut pas prendre en charge l’audio. Pourtant, il est très populaire. Donc, comment pouvez-vous faire d’un clip vidéo un GIF animé ?
L’utilisation du drapeau -an, similaire à ce que nous avons fait ci-dessus, est meilleure que la création d’un GIF animé si vous souhaitez faire une vidéo sans audio, mais il y a beaucoup d’endroits qui supportent les GIF qui ne supporteront pas un format vidéo différent. Pour tous ceux-là :
ffmpeg -i input.mkv output.gif
Cette commande crée un GIF de mêmes dimensions que le fichier d’entrée. C’est souvent une mauvaise idée, car les GIF ne se compressent pas bien par rapport aux autres formats vidéo (dans mon expérience, un GIF sera environ huit fois plus grand que la vidéo source). Il peut être utile d’utiliser l’option -s pour redimensionner votre GIF à quelque chose d’un peu plus petit, surtout si la source d’entrée est assez grande, comme une vidéo HD.
Autres outils
Alors que FFmpeg est l’outil de référence pour la plupart des tâches AV, il n’est pas parfait pour tout. Il existe certains outils qui, utilisés conjointement avec FFmpeg, peuvent tout rendre un peu plus facile.
Récupérer des vidéos de YouTube
Il peut être très facile de télécharger quelque chose sur YouTube, de perdre la vidéo source originale et de n’avoir que la version YouTube qui reste. Quel est le moyen le plus simple de récupérer une copie de vos vidéos YouTube ?
Youtube-dl est un petit outil astucieux que vous pouvez utiliser pour récupérer des vidéos de YouTube et de plusieurs autres services de streaming vidéo. Il est super simple à utiliser :
youtube-dl https://www.youtube.com/watch?v=2m5nW9CQLJ0
Cette commande télécharge la vidéo à l’URL indiquée et l’enregistre localement.
Youtube-dl a plusieurs options pour contrôler la qualité et le format de la vidéo téléchargée, mais je trouve plus facile d’utiliser la commande ci-dessus. Elle télécharge l’audio et la vidéo de la plus haute qualité dans un seul fichier, puis j’utilise FFmpeg pour les convertir dans le format que je veux.
Avoir des infos sur le média
Parfois, tout ce que vous avez besoin de savoir est ce qu’il y a à l’intérieur du conteneur du média. Bien qu’il existe plusieurs outils qui peuvent faire cela, mon préféré est MediaInfo. MediaInfo affiche toutes les informations à l’intérieur d’un conteneur multimédia, pour chacun des différents flux, ainsi que les métadonnées du fichier d’entrée. Cela vous donne tout ce que vous pourriez vouloir savoir – et probablement un tas de choses que vous n’avez pas.
Lancer la commande mediainfo inputFile.mkv crache une liste d’informations sur le fichier d’entrée dans une forme lisible par l’homme.
Et plus…
Ce n’est que gratter la surface de ce que FFmpeg peut faire. Heureusement, la documentation de FFmpeg et des autres outils du projet est très bonne et vaut la peine d’être consultée. Elle vous apprendra tout sur les nombreux tours différents que ce chien peut faire.
Si vous recherchez un outil avec une interface graphique pour convertir du multimédia, Handbrake est un outil exceptionnellement bon disponible sur Linux, Mac OS X et Windows. Handbrake utilise FFmpeg (entre autres outils) sous le capot.