ffmpeg : Installation MacOS / Windows + Tutoriel

FFMPEG est un puissant convertisseur audio/vidéo, open-source compatible Linux, Mac et Windows. Il fonctionne en ligne de commande. Ce mode de fonctionnement peut vous paraître difficile à première vue, mais une fois initiés, vous n’allais jamais vous séparer de cet outil ! Sans vous rendre compte, vous utilisez déjà un logiciel qui utilise ffmpeg : Kodi, VLC, Blender… et j’en passe.

Mise à jour :

06-02-2018 :

  • ajout d’une option de personnalisation pour la création de vidéo à partir d’image.
  • Faire une loop d’une vidéo.

Installation :

sur Windows :

C’est relativement simple, il suffit de télécharger la dernière version pour Windows, décompresser et renommer le dossier en « ffmpeg » et le mettre sur c : (à côté de program files et windows) ensuite, clique droit sur l’icône « Ordinateur » > Propriétés Systèmes > Variable d’environnements. Chercher PATH et ajouter à la fin (sans effacer le contenu) “;C:\ffmpeg”. Pour tester, il suffit d’ouvrir MS-DOS et taper « ffmpeg ».

Il existe deux tutoriels très pratique sur comment installer ffmpeg sur Windows.
Je vous conseille le premier lien.

(EN) : http://adaptivesamples.com/how-to-install-ffmpeg-on-windows/
(FR) : http://fr.wikihow.com/installer-FFmpeg-sur-Windows

Vous êtes sur Windows 10 ? il est possible de lancer Bash directement depuis Win10.

sur MacOS :

Un moyen pratique d’installer ffmpeg est de faire appel au gestionnaire de paquets sous MacOS « Homebrew ».
Pour installer Homebrew, ouvrir le terminal.

Commande + espace et taper « terminal »
ou allez à Application/Utilitaires/Terminal.

Une fois le terminal ouvert, tapez cette commande :

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Un mot de passe administrateur vous sera peut être demander.

Une fois Homebrew installé, il suffit de taper cette commande pour installer ffmpeg :

brew install ffmpeg

vous pouvez aussi exécuter cette commande pour avoir ffmpeg avec les dépendances recommandées :

brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-libass --with-libquvi --with-libvorbis --with-libvpx --with-opus –with-x265

Pour s’assurer d’avoir la dernière version de Homebrew et de ffmpeg, vous pouvez exécuter cette commande :

brew update && brew upgrade ffmpeg

Tapez « ffmpeg » via le terminal, vous aurez normalement un écran comme celui ci :

Voilà ! Vous êtes maintenant prêt à utiliser le convertisseur via le terminal.

C’est parti !

Testons les possibilités de ce logiciel.

Munissez-vous d’une vidéo pour faire les tests. Utilisez une de vos vidéos ou téléchargez à partir de ce lien : http://www.h264info.com/clips.html

Pour ma part, j’ai pris la première vidéo du lien, le trailer de Gravity en 2K (2048×858), un ratio cinémascope de ~2.39:1, encodé en H.264 avec un son en AAC et un conteneur Mpeg4.

On va appeler notre vidéo : vid0.mp4 et la placer dans un répertoire appelé « conversion » sur le bureau.

On revient vers notre terminal et on va naviguer grâce à ce dernier jusqu’à ce répertoire.

Pour ce faire, deux commandes sont à retenir : LS et CD.

LS permet de lister tous les fichiers et dossiers qui se trouvent dans le répertoire actuel et CD permet d’accéder à des répertoires.

Tapez ls

Vu que notre dossier « conversion » se trouve dans le répertoire « desktop », tapez :

cd desktop/conversion

un petit changement va s’opérer et vous allez voir apparaître le nom du répertoire avant le nom d’utilisateur, un peu comme ceci :

le nom de mon ordinateur s’appel ch, je me trouve dans le répertoire conversion et le nom d’utilisateur est emir. (attention! Seulement sur MacOS)

Maintenant, tapez ls pour s’assurer que notre fichier se trouve bien dans ce répertoire :

à chaque opération, on va retrouver le fichier de sortie dans notre dossier « conversion ». Pendant la conversion, une ligne apparaît avec plusieurs informations :

ces informations nous indique à quel niveau est rendu la conversion, la vitesse par rapport à une lecture en temps réel, le bitrate…etc.

Vous pouvez, à tout moment, arrêter la conversion en appuyant sur la touche « q ».

Pour avoir de l’aide
ffmpeg -h
Extraire le son seul
ffmpeg -i vid0.mp4 -vn -f ac3 audio0.mp3

le -i représente l’input, il est suivi du nom du fichier présent dans le dossier.

Le -vn va désactiver la vidéo

le -f va forcer le format d’entrée ou de sortie

ac3 est le type de codec qu’on va utiliser

et enfin audio0.mp3 est le nom de notre fichier de sortie.

Une autre façon d’extraire le son mais avec plus de configuration :

ffmpeg -i vid0.mp4 -ac 2 -ar 44100 -vn -b:a 256k audio1.mp3

-ac 2 détermine le nombre de canaux à 2

-ar détermine le taux d’échantillonnage, définit à 44100. Si on utilise pas cette fonction, il sera par défaut le même nombre que l’entrée.

-b:a va détermine le débit (bitrate), définit à 256k.

Désactiver le son
ffmpeg -i vid0.mp4 -an vid1.mp4

-an va désactiver le son.

Resize
ffmpeg -i vid0.mp4 -vf scale=640:268 vid1.mp4

-vf scale= agit comme un filtre pour redimensionner la vidéo dans le format de notre choix.

Attention! Respectez les proportions. Ma vidéo a un ratio de 2.39:1 (2048/858). Pour 640 en largeur, il faut diviser par 2.39 pour avoir la hauteur.

À titre d’information, le ratio du 16/9 est de 1.77:1.

On peut aussi utiliser la fonction scale=x:-1 qui va garder la proportion de la vidéo.

ffmpeg -i vid0.mp4 -vf scale=640:-1 vid1.mp4
Changer la durée
ffmpeg -i vid0.mp4 -t 80 vid1.mp4

-t 80 va déterminer la durée de la vidéo à 80 secondes.

Ffmpeg i vid0.mp4 -ss 90 vid1.mp4

-ss va commencer la lecture après 90 secondes.

Évidemment, on peut mélanger nos fonctions en une seule ligne. Exemple :

ffmpeg -i vid0.mp4 -vf scale=640:268 -ss 90 -t 80 -an vid1.mp4

Si on utilise à chaque fois le même nom en sortie (vid1.mp4 dans notre cas) ffmpeg va nous demander si on veut écraser le fichier. Si oui, tapez Y.

Pour avoir des informations sur notre vidéo
ffmpeg -i vid0.mp4

ces informations seront précieuses pour la suite, comme le codec, le format, le bitrate, framerate…etc.

Couper une section d’une vidéo
ffmpeg -i vid0.mp4 -ss 00:00:10 -t 00:00:05 vid1.mp4

on va prendre seulement 5 secondes à partir de la 10ème seconde.

Rotation d’une vidéo
ffmpeg -i vid0.mp4 -vf rotate=45 vid1.mp4

une rotation de 45°.

Conteneur 

Pour connaître la liste des conteneurs (formats) disponibles sous ffmpeg, tapez :

ffmpeg -formats

cette fonction va tout simplement changer de format du .mp4 en .mov :

ffmpeg -i vid0.mp4 -codec copy vid1.mov

on peut même forcer une extension :

ffmpeg -i vid0.mp4 -f mp4 -codec copy vid0.dess

et ça marche. On peut même le lire via VLC puisque le contenu, en H.264, est resté intact.

Codecs

Pour connaître la liste des codecs :

ffmpeg -codecs

On va ré-encoder notre vidéo au format ProRes :

ffmpeg -i vid0.mp4 -codec:v prores vid1.mov

on a, à la fois, changer le contenu et le contenant. (le codec et le format).

Pour convertir en h264 :

ffmpeg -i vid0.mp4 -vcodec h264 vid1.mov

sachez que vous pouvez utiliser « -codec:v », « -vcodec » ou encore mieux, “-c:v”.

Bitrate
ffmpeg -i vid0.mp4 -b:v 5000k vid1.mp4

le bitrate (taux d’échantillonnage) est de 5Mo/s.

Plus le bitrate est haut, meilleur est la qualité. Par exemple, Youtube recommande 8000k pour une vidéo de 1080p avec une fréquence d’image standard (24, 25 et 30).

Voir :

Paramètres d’encodage Youtube.

Paramètres d’encodage Vimeo.

Deux vidéos bout à bout  
ffmpeg -i vid0.mp4 -i vid1.mp4 -filter_complex "[0:v] [1:v] concat=n=2:v=1:a=0 [v]" -map "[v]" -vcodec h264 vidfinal.mp4
Overlay (superposition) 

On va mettre, en exemple, le logo de l’université superposé à notre vidéo.

Téléchargez le logo ici > Logo UdeM

et mettez le dans le même répertoire que la vidéo (dans notre exemple, le répertoire « conversion »)

J’ai choisi une image en png parce que ce format supporte la transparence, contrairement au jpeg.

ffmpeg -i vid0.mp4 -i udem-logo.png -filter_complex "[0:v][1:v]overlay[out]" -map "[out]" vid1.mp4

bien pratique si jamais on veut faire un watermark sur une série de vidéo.

On peut aussi superposer une vidéo :

ffmpeg -i vid0.mp4 -i vid1.mp4 -filter_complex "[0:v][1:v]overlay=x=200:y=100[out]" -map "[out]" -t 20 vidfinal.mp4

vous remarquez ici qu’on a spécifié des coordonnées en x et y de la deuxième vidéo qu’on veut superposer, et une fonction -t 20 qui va juste faire une conversion de 20 secondes de la vidéo. La fonction -t peut aussi être placé avant les vidéos en input. (Exemple : ffmpeg -t 10 -i vid0.mp4… etc.)

Crop 
ffmpeg -i vid0.mp4 -filter:v crop=320:180:160:90 vid1.mp4

autrement dit, le width est de 320, le height est de 180, avec des coordonnées x de 160 et y de 90.

on peut aussi l’écrire ainsi :

ffmpeg -i vid0.mp4 -filter:v crop=w=320:h=180:x=160:y=90 vid1.mp4
extraire une série d’image  

Dans cet exemple, on va extraire les deux premières secondes en une série d’image avec des noms qui se suivent :

ffmpeg -i vid0.mp4 -r 24 -t 2 -f image2 img-%04d.png

la valeur -r 24 correspond au nombre d’images par seconde de la vidéo vid0.mp4 (24fps)

combiner des images pour en faire une vidéo 

il faut que les noms des images se suivent. Dans cet exemple, ça va être 001.jpg, 002 jpg…etc.

Si jamais il y a un texte avant les numéros, par exemple img-, n’hésitez pas à l’ajouter avant le %03d.jpg, ce qui va donner img-%03d.jpg. Le rendu va être par défaut à 25fps et 200kbps. %03d représente le nombre de chiffre après le texte (%03d = img-001.jpg / %04d = img-0001.jpg …etc.)

ffmpeg -i %03d.jpg test.mp4

pratique pour créer des animations stopmotion ou timelapse.

un autre moyen mais avec plus de personnalisation :

ffmpeg -framerate 60 -i image-%04d.jpg -start_number 1 -r 60 -c:v libx264 -crf 25 -pix_fmt yuv420p pattern60.mp4

-framerate : à mettre avant l’input pour spécifier combien d’image à lire en input par seconde.

-start_number : par quelle image il faut commencer ?
-vframes : combien d’image à utiliser ?
– r : combien d’image par seconde ?
-c:v libx264 -crf 25 -pix_fmt yuv420p : ceci va permettre d’encoder en H264, sans perte et en 4.2.0.

-i image-%04.jpg : le 04 représente le nombre de chiffre qui suit le texte image- (image-0001, image-0002…etc)
se référer dans le tableau ci dessous :

Type de patternExemple
img-%d.pngimg-1.png
img-2.png
img-3.png
image-%02d.jpgimage-01.jpg
image-02.jpg
image-03.jpg
...
photo-%03d.pngphoto-001.png
photo-002.png
photo-003.png
...
test-*.png
(voir remarque en bas)
test-a.png
test-b.png
test-c.png
...

attention ! une valeur img-*.png doit s’écrire ainsi : -pattern_type glob -i “image-*.png”

img-*.png est valable aussi pour les chiffres. On est d’accord que 15 vient avant 110 mais des fois, le système mets en avant 110 avant 15. Pour être sure, tapez dans le terminal echo img-*.png pour connaitre comment votre système liste les numéros.

Loop

Faire un loop de 30 secondes d’une vidéo :

ffmpeg -i loop 1 -i input.mp4 -t 30 out.mp4
Luminosité (par un facteur de 4) 
ffmpeg -i vid0.mp4 -vf lutyuv=y=val*4 vidlum.mp4

seulement le rouge par 2 :

ffmpeg -i vid0.mp4 -vf lutyuv=r=val*2 vidr.mp4
rendre la vidéo noir et blanc 
ffmpeg -i vid0.mp4 -vf hue=s=0 -c:a copy vidnb.mp4
Teinte 
ffmpeg -i vid0.mp4 -vf hue=h=90:s=1 -c:a copy vidteinte.mp4

la teinte est à 90° et la saturation à 1.

on peut aussi s’amuser à faire tourner la teinte et balancer la saturation entre 0 et 2 chaque 1 seconde.

ffmpeg -i vid0.mp4 -vf hue="H=2*PI*t: s=sin(2*PI*t)+1" -c:a copy vidtcolor.mp4

et le résultat est plutôt amusant.

Appliquez un Fade-In de 30 images 
ffmpeg -i vid0.mp4 -vf fade=in:0:30 -c:a copy vidfadin.mp4

on peut aussi appliquer un noir de 5 secondes, ensuite un fade-in de 0.5 seconde :

ffmpeg -i vid0.mp4 -vf fade=t=in:st=5:d=0.5 -c:a copy vidfadin.mp4
 
Denoise 
ffmpeg -i vid0.mp4 -vf "split [main][tmp]; [tmp] dctdnoiz=4.5 [tmp2]; [main][tmp2] overlay" vidfinal.mp4
Splitscreen (une vidéo de chaque côté) 
ffmpeg -i vid0.mp4 -i vid1.mp4 -filter_complex "[0:v:0]pad=iw*2:ih[bg];[bg][1:v:0]overlay=w" out.mp4

<!– @page { margin: 2cm } P { margin-bottom: 0.21cm } –><br />

Vous voyez, à travers ces exemples, que c’est bien plus pratique d’utiliser ffmpeg que de passer par un logiciel de montage vidéo pour exécuter des fonctions simples. Cela représente un gain de temps énorme, surtout s’il s’agit de faire la même action (encodage, apposer un watermark, fade-in, splitscreen pour un preview multicam…etc.). L’autre avantage c’est que ffmpeg est gratuit, libre et open source, il dispose aussi d’une communauté importante avec une documentation plus que complète.

Note pour les étudiants du cours ART6200 à l’UdeM : n’hésitez surtout pas à m’envoyer un courriel (emir.chouchane@umontreal.ca), à écrire sur Studium ou laisser un commentaire en bas de l’article si jamais vous avez des questions !

Pour allez plus loin…

Article sur mon blog concernant ffmpeg :

Liens utiles 
Emir C. Écrit par :

Soyez le premier à commenter

Laisser un commentaire

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