Il y énormément à dire sur cet outil extrêmement versatile, mais j’aimerai ici juste montrer quelques basiques en guise d’introduction, comme réencoder et redimensionner des vidéos.
FFmpeg gratuit, open-source, cross-platform et surpuissant
Installation
Si vous êtes sur linux, un petit sudo apt install ffmpeg
dans le terminal suffira.
Sur ce lien vous pourrez télécharger les versions compilée de ffmpeg : https://www.ffmpeg.org/download.html
Pour windows rendez-vous directement sur cette page de build sur github
Plusieurs versions s’offre à vous. Prenez la version qui commence par ffmpeg-nx.x
(les ffmpeg-N-xxxx
sont les builds journalière), prenez la gpl
qui contient toutes les librairies, en format .zip
Cela contient en réalité pas un mais trois utilitaires, tous dans le dossier ffmpeg/bin
:
ffmpeg
: outil de traitementffprobe
: outils d’analyseffplay
: lecteur vidéo
Je me sers très rarement de probe et encore moins de play mais il peuvent s’avérer utile pour tester des fichiers.
Une fois téléchargé placer ces trois fichiers dans un endroit de votre disque qui ne sera pas amené à bouger. Pour ma part, je crée un dossier utils
à la racine de mon lecteur C:
qui contient tout mes executable en ligne de commande)
Le plus pratique pour l’usage reste d’ajouter le chemin du dossier des binaires au PATH windows (dans mon cas C:\utils
). De cette manière, il suffira ensuite de taper ffmpeg
dans le terminal pour y accéder directement.
Usage
Voici l’usage le plus basique qui montre en exemple comment s’organise la commande
pour l’exemple on considère que le terminal est ouvert dans le dossier de la vidéo et que l’export se fait aussi dans le même dossier
ffmpeg -i mavideo.mkv nouvellevideo.mp4
Cette commande créera déjà un fichier mp4 relativement optimisé tel-quel.
le marqueur -i
(input) suivi d’un espace puis mavideo.mkv
spécifie la source.
La vidéo de sortie nouvelle_video.mp4
n’a pas besoin de marqueur pour être spécifié, comme elle est à la fin on sait que c’est l’output.
Tout les arguments supplémentaire viendront s’ajouter entre la vidéo d’entrée et la vidéo de sortie
Réencoder
Ré-encoder sa vidéo permet de gagner pas mal de poids, si par exemple vous voulez alléger votre vidéo pour l’envoyer ou l’archiver.
La doc propose un très bon guide de démarrage qui reprend tout ça, en plus complet.
Pour cela nous allons nous intéresser a 3 arguments en particulier :
-pix_fmt (pixel format) - Défini comment sont encodé les pixels, c’est ce qui va permettre de rendre notre vidéo plus légère et davantage compatible avec les lecteurs vidéos existants. Pour ce faire le format “grand public” recommandé est yuv420p
qui permet le sous-échantillonnage de la chrominance (plus d’infos sur la page wikipédia yuv)
-crf (constant rate factor) - Cet argument va nous permettre de moduler facilement le ratio poid/qualité. Plus on donne un nombre proche de zéro plus le fichier et proche de sa source et donc lourd. En général en fonction du besoin on attribue des valeurs entre 15 et 25:
- 0 = (Lossless) super lourd, identique à la source.
- 10 = lourd, grande qualité
- 30 = lèger, mauvaise qualité
-preset - Détermine la vitesse d’encodage, une vitesse plus lente permet au logiciel d’optimiser le fichier pour gagner encore de la place, les valeurs disponibles sont :
- ultrafast
- superfast
- veryfast
- faster
- fast
- medium (default)
- slow
- slower
- veryslow
La commande que j’utilise régulièrement pour faire perdre du poids à mes vidéos tout en conservant une qualité décente utilise ces 3 paramètres:
Commande de ré-encodage
ffmpeg -i mavideo.mov -crf 20 -preset slower -pix_fmt yuv420p nomdesortie.mp4
Redimensionner
Autre point dont nous avons souvent besoin, le redimensionnement (qui affecte encore plus fortement le poid du fichier)
Considérons qu’on ai une source fullHD 1080p (1920x1080) que nous voulons convertir en HD 720p (1280x720).
le plus pratique est d’utiliser le filtre vidéo de scale : -vf scale=[largeur voulue]:-2
Commande de redimensionnement
ffmpeg -i mavideo.mov -vf scale=1280:-2 -pix_fmt yuv420p nomdesortie.mp4
Ici on redimensionne en spécifie seulement la largeur en pixel. le -2 permet de dire a ffmpeg de determiner automatiquement la hauteur en conservant le ratio.
Tout comme
-1
,-2
spécifie de concerver le ratio, mais cette fois en forcant une valeur divisible par 2, ce qui évite de potentielles erreurs.
Si on connait déjà la largeurxhauteur voulue, il est plus rapide de taper -s 1280x720
qui fonctionne aussi.
Suprimmer l’audio
Cet exemple permet d’aborder la copie de stream.
En effet votre fichier contient en général un stream vidéo et un stream audio (il peut y en avoir davantage).
Si vous voulez seulement supprimer le son vous n’avez pas à ré-encoder puisque qu’il vous suffit de copier uniquement le stream choisi avec la commande -c
.
-c copy : copie directement à la fois le stream video et audio
-c:v copy : copie directement le stream Vidéo
-c:a copy : copie directement le stream Audio
-an : Désactive l’audio
Commande de suppression audio
ffmpeg -i mavideo.mp4 -c:v copy -an mavideo_sansson.mp4
ici on aurait pu directement faire
-c copy -an
car -an désactive l’audio de toute façon.
Plus de commandes
On peut également couper simplement des vidéos :
ffmpeg -i mavideo.mp4 -ss [start] -to [end] mavideodecoupe.mp4
Exemple pour commencer a 1min 10s de la vidéo, on peut soit spécifier le temps en seconde : -ss 70
ou plus pratique, en timecode -ss 00:01:10
Une solution pour couper une vidéo rapidement fera probablement l’objet d’un prochain article.
Il existe énormément d’autre commande que vous pourrez explorer dans la documentation officielle
Vous trouverez plein des listes de commandes utiles partagées par la communauté d’utilisateurs.
Quelques liens qui regorge de notes utiles :
- https://gist.github.com/protrolium/e0dbd4bb0f1a396fcb55 (listes de commandes)
- https://github.com/leandromoreira/ffmpeg-libav-tutorial (tuto très descriptif)