Transcodez facilement n’importe quel média vers n’importe quel format grâce à FFmpeg

Si vous travaillez avec de l’audio ou de la vidéo, vous devez probablement souvent convertir/transcoder vos médias, et ce n’est pas forcément facile de trouver un outil qui gère tous les formats, qui est rapide, à la fois sur Windows, Mac ou même Linux. Vous en avez sûrement essayé beaucoup, et peut être même que vous en utilisez plusieurs en fonction des formats. Une solution serait d’utiliser FFmpeg.

Mise à jour du 9 octobre 2017 : à la demande de plusieurs lecteurs, j’ai ajouté les commandes pour convertir avec des séquences d’images, en entrée comme en sortie, et en prenant le son.

FFmpeg est un logiciel libre, qui gère tous les formats que vous pourriez avoir besoin – H.264, H.265, Apple ProRes, Avid DnxHD et beaucoup d’autres, et même des séquences d’images comme le PNG et autres – quelque soit votre plateforme ! La seule difficulté est que c’est un outil en ligne de commande, et je pense que c’est la raison pour laquelle si peu de personnes l’utilisent. Je vais vous montrer que ce n’est pas si difficile à utiliser, et que c’est réellement beaucoup plus rapide que plein d’autres outils comme Adobe Media Encoder, qu’il est beaucoup plus rapide à encoder que tous les autres outils que j’ai testé. Et en plus, c’est gratuit !

Si vous n’avez encore jamais utilisé la ligne de commande, je peux vous aider à démarrer, ici sur Windows, là sur mac (bientôt disponible).

D’abord, il faut télécharger les binaires (les fichiers compilés et exécutables de l’application), allez sur le site officiel : ffmpeg.org. Vous pourrez télécharger les fichiers nécessaires pour votre système dans la partie Downloads, dans le cadre Get the packages.

Usage de base, et aide

Pour convertir très rapidement un média, l’usage de base de FFmpeg est celui ci :

ffmpeg -i "example video.mov" "transoded video.mp4"

Une fois le transcodage lancé, appuyez simplement sur q si vous voulez le stopper. FFmpeg peut vous demander si vous voulez écrasez des fichiers existant, tapez Y ou n pour accepter ou refuser.
Bien sûr, il y a beaucoup d’opions ; pour afficher la liste des plus courantes utilisez :

ffmpeg -h

Et si vous voulez plus de détails tapez :

ffmpeg -h long

Vous aurez peut-être besoin de la liste des codecs et de leurs noms d’usage pour ffmpeg :

ffmpeg -codecs

Ou vous aurez plus probablement besoin de voir juste la liste des encodeurs (ceux que vous pouvez utiliser pour vos transcodages) :

ffmpeg -encoders

Vous pouvez aussi afficher les options spécifiques à un encodeur particulier :

ffmpeg -h encoder=name par exemple : ffmpeg -h encoder=h264

Exemples

Le meilleur moyen d’apprendre les options les plus utiles est simplement de vous montrer des exemples.

La manière la plus rapide de convertir n’importe quel média en un mp4 H.264 standard est :

ffmpeg -i "example video.mov" "transcoded video.mp4"

Mais vous devriez être un peu plus précis et au moins spécifier le débit :

ffmpeg -i "example video.mov" -vcodec h264 -b:v 10485760 "transcoded video.mp4"
L’option-vcodec spécifie l’encoduer à utiliser, -b:v le débit (bitrate) de la vidéo. Le débit est donné en bits par seconde, la valeur ici est de 10 Mbps (10 x 1024 x 1024 bits par seconde)

Vous pouvez être encore plus précis et spécifier aussi comment l’audio doit être encodé :

ffmpeg -i "example video.mov" -vcodec h264 -b:v 10485760 -acodec aac -b:a 327680 "transcoded video.mp4"
L’option-acodec est pour l’encodeur audio, -b:a est le débit audio, 320kbps dans cet exemple example.


Vous pouvez forcer ffmpeg à écraser les fichiers existant sans confirmation, ajoutez simplement l’option -y au début :

ffmpeg -y -i "example video.mov" -vcodec h264 -b:v 10485760 -acodec aac -b:a 327680 "transcoded video.mp4"


Parfois, on veut juste transcoder seulement la vidéo ou seulement l’audio, ce qui peut être très rapide, FFmpeg étant capable de simplement copier le flux existant :

Pour transcoder seulement l’audio et copier la vidéo originale sans transcodage :ffmpeg -i "example video.mov" -vcodec copy -acodec aac -b:a 327680 "transcoded video.mp4"
Pour transcoder seulement la vidéo : ffmpeg -i "example video.mov" -vcodec h264 -b:v 10485760 -acodec copy "transcoded video.mp4"

Bien sûr, on peut aussi extraire l’audio ou la vidéo vers un fichier contenant seulement du son ou de la vidéo :

Pour extraire l’audio : ffmpeg -i "example video.mov" -vn -acodec pcm_16le "transcoded video.wav"
Ici, pcm_16le est le codec très standard PCM utilisé par les fichiers .wav. Remarquez que l’extension de la sortie doit correspondre au codec choisi. L’option -vn dit à FFmpeg d’ignorer la vidéo.
Pour retirer l’audio d’un fichier vidéo : ffmpeg -i "example video.mov" -vcodec copy -an "transcoded video.mov"
Ici, l’option-anretire le son, et la vidéo est simplement copiée vers le nouveau fichier.


Si vous devez changer des paramètres de la vidéo, vous pouvez entrer une nouvelle taille, changer la fréquence d’images, changer l’échantillonage du son

ffmpeg -i "example video.mov" -vcodec h264 -b:v 10485760 -s 1998x1080 -r 24 -acodec aac -b:a 327680 -ar 96000 "transcoded video.mp4"
La taille est changée vers le standard DCP 2K Flat de 1998 pixels de large sur 1080 pixels de haut avec l’option-s, la fréquence d’image vers 24ips avec l’option-r, et le son est ré-échantilloné à 96KHz grâce à l’option-ar.


Un autre encodeur très utile de FFmpeg est l’encodeur ProRes, en particulier pour les utilisateurs de Windows :

ffmpeg -i "example video.mp4" -vcodec prores -profile 3 "transcoded video.mov"
L’option-profileest spécifique à l’encodeur ProRes, elle définit le profil de qualité : 0 pour Proxy, 1 pour LT, 2 pour Normal, et 3 pour HQ.


On travaille souvent en animation avec des séquences d’images
Pour encoder une séquence d’images dans une vidéo :

ffmpeg -framerate 24 -i "image_%03d.png" -vcodec h264 -b:v 10485760 "transcoded video.mp4"
Dans le nom du fichier en entrée, %03d signifie que la séquence est numérotée à cet endroit là avec trois chiffres (001, 002, etc.). Ne pas oublier de spécifier la fréquence d’images avec -framerate(sinon, c’est 25 ips par défaut).

FFmpeg attend une séquence numérotée à partir de 0 par défaut. Si la séquence commence à un autre numéro :

ffmpeg -framerate 24 -start_number 12 -i "image_%03d.png" -vcodec h264 -b:v 10485760 "transcoded video.mp4"
Ici l’encodage commencera à l’image numéro 12 grâce à l’option -start_number.

Et si on veut aussi mettre du son dans la vidéo :

ffmpeg -framerate 24 -i "sound.wav" -i "image_%03d.png" -vcodec h264 -b:v 10485760 -acodec aac -b:a 327680 "transcoded video.mp4"

Enfin, on peut évidemment convertir une vidéo en séquence d’images :

ffmpeg -i "example video.mp4" -vcodec png -an "image_%03d.png"

Ce qu’on peut faire en récupérant le son aussi (voir la partie sur les sorties multiples du chapitre suivant) :

ffmpeg -i "example video.mp4" -vcodec png -an "image_%03d.png"-vn -acodec pcm_16le "transcoded video.wav"

Utiliser plusieurs sorties et une file d’attente

Ce qui est vraiment génial, c’est qu’on peut facilement avoir plusieurs sorties pour un fichier unique, et construire une file d’attente de transcodage pour plusieurs entrées.

Pour ajouter deux (ou plus) sorties :

ffmpeg -i "example video.mov" -vcodec h264 -b:v 10485760 "transcoded video.mp4" -vcodec prores -profile 3 "transcoded video.mov"
Cette commande créera une sortie H.264 et ProRes de la même source.

Pour préparer une file d’attente :

ffmpeg -i "example video1.mov" -vcodec h264 -b:v 10485760 "transcoded video1.mp4" && ffmpeg -i "example video2.mov" -vcodec h264 -b:v 10485760 "transcoded video2.mp4"
Cette commande transcodera « example video2.mov » dès que la première sera finie, grâce à && ffmpeg au milieu qui relance la commande.

Et on peut même combiner tout ça pour construire une file d’attente avec des sorties multiples :

ffmpeg -i "example video1.mov" -vcodec h264 -b:v 10485760 "transcoded video1.mp4" -vcodec prores -profile 3 "transcoded video1.mov" && ffmpeg -i "example video2.mov" -vcodec h264 -b:v 10485760 "transcoded video2.mp4" -vcodec prores -profile 3 "transcoded video2.mov"


Si l’encodeur le permet, on peut utiliser cette technique pour transcoder en faisant jusqu’à trois passes pour améliorer la qualité de la vidéo.

ffmpeg -y -i "example video.mov" -vcodec h264 -b:v 10485760 -an -pass 1 -f mp4 NUL && ffmpeg -i "example video.mov" -vcodec h264 -b:v 10485760 -pass 2 "transcoded video.mp4"
L’option-passest utilisé pour spécifier quelle est la passe en cours. La première passe ne crée aucun fichier, elle envoie vers rien NUL. Note : sur Mac ou Linux, remplacez NUL par /dev/nul. Lors de la première passe,  -f mp4 précise, en l’absence de fichier de sortie, qu’on veut du mp4 à la fin.

Conclusion et UI

Et voilà ! Je pense que tout ça c’est vraiment très utile, FFmpeg est vraiment une application rapide et versatile pour le transcodage. J’espère que tout ça vous aidera à l’utiliser, et que vous verrez que c’est en fait assez facile de la prendre en main.

Comme je l’utilise beaucoup moi même et que je sais que la ligne de commande n’est pas toujours le plus pratique, j’ai commencé à développer une interface simple mais complète pour FFmpeg. Voici une capture d’écran de la version actuelle, encore très tôt dans son développement, mais j’espère que ce sera disponible rapidement !

Je l’utilise déjà et ça marche bien, rendant mes encodages vraiment rapides et faciles. Mais je veux encore l’améliorer un peu et ajouter des fonctionnalités comme la file d’attente et d’autres options faciles avant de le distribuer gratuitement (et sous licence libre). A bientôt !


I could not do and share what I do for free without your support. Help me on Patreon! Thanks.

5 pensées sur “Transcodez facilement n’importe quel média vers n’importe quel format grâce à FFmpeg

  • 8 octobre 2017 à 20 h 27 min
    Permalink

    Y-a-t-il une coquille c’est « transoded video.mp4 » ou « transcoded video.mp4 » ?
    Merci pour le tuto

    Répondre
    • 9 octobre 2017 à 11 h 07 min
      Permalink

      Hello ! on peut mettre ce qu’on veut, c’est le nom du fichier de sortie qui sera créé par FFmpeg… Mais effectivement, « transcoded » serait plus logique, je corrige !

      Répondre
      • 10 octobre 2017 à 10 h 46 min
        Permalink

        On ne prend pas le temps de lire correctement, je pensais que c’était une commande !!
        Merci encore pour le partage.

  • 9 octobre 2017 à 9 h 21 min
    Permalink

    Salut !
    C’est bien écrit « transoded » ?
    il ne manque pas un « c » pour « transcoded » ?
    Germain

    Répondre
    • 9 octobre 2017 à 11 h 07 min
      Permalink

      Hello ! on peut mettre ce qu’on veut, c’est le nom du fichier de sortie qui sera créé par FFmpeg… Mais effectivement, « transcoded » serait plus logique, je corrige !

      Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *