FFmpeg est une bibliothèque multi-plateforme à code source ouvert permettant d'enregistrer, de convertir et de diffuser des fichiers vidéo et audio. Créée en 2000, c'est un puissant outil en ligne de commande qui fonctionne sur les systèmes d'exploitation Linux, Windows et Mac. FFmpeg est actuellement utilisé par de nombreux sites web et programmes, dont YouTube et VLC Media Player, et est publié sous la licence GNU Lesser General Public License 2.1+.
La page officielle : https://ffmpeg.org/
Installer FFmpeg sur Fedora
Le package FFmpeg est disponible sur les dépôts RPMfusion, qu'il faut avoir préalablement installé.
Ensuite, taper la commande :
sudo dnf -y install ffmpeg
Quelques commandes utiles
Pour obtenir facilement beaucoup d'informations sur un fichier vidéo donné :
$ ffmpeg -i video.mp4 -hide_banner
L'option -hide_banner
permet de cacher la bannière donnant les versions de librairies et de build.
Redimensionner une vidéo
En utilisant le filtre -vf scale
, il est possible de redimensionner une vidéo à une taille voulue :
$ ffmpeg -i input.mp4 -vf scale=320:240 output_320x240.mp4
Créer une fichier audio à partir d'une vidéo se fait par la commande :
$ ffmpeg -i source_video.mp4 -vn -ar 44100 -ac 2 -ab 192k -f mp3 sound.mp3
avec :
-i
: la video source d'entrée source_video.avi
-vn
: la désactivation de l'enregistrement video
-ar
: la frequence d'échantillonage de 44.1 kHz
-ac
: le nombre de channel audio : 1 = mono, 2 = stéréo
-ab
: le bitrate audio de sortie de 192 kb/s (valeur = [96, 112, 128, 160, 192, 256, 320])
-f
: le format de sortie audio en mp3
- le fichier son de sortie sound.mp3
Concanténer plusieurs fichiers videos en un
FFmpeg permet également de joindre les multiples parties de la vidéo et de créer un seul fichier vidéo.
Créez un fichier join.txt
qui contient les chemins d'accès exacts des fichiers que vous voulez joindre. Tous les fichiers doivent avoir le même format (même codec). Le nom du chemin de tous les fichiers doit être mentionné un par un comme ci-dessous :
file /home/math/videos/part1.mp4
file /home/math/videos/part2.mp4
file /home/math/videos/part3.mp4
file /home/math/videos/part4.mp4
Maintenant, concaténer tous les fichiers avec la commande :
$ ffmpeg -f concat -i join.txt -c copy output.mp4
Fixer un fichier video corrompu
$ ffmpeg -i input.mp4 -c copy output.mp4
Réduire la taille d'une vidéo en diminuant le bitrate
Le procédé le plus courant pour réduire la taille d'un fichier vidéo est d'utiliser ffmpeg et de réduire le bitrate. Avant de commencer, voyons d'abord quelques statistiques de notre fichier d'entrée qui pèse 22 MB :
$ ffmpeg -i input.mp4
...
17015 kb/s, 29.99 fps, 30 tbr, 90k tbn, 180k tbc (default)
...
Le bitrate de notre vidéo est de 17015 kb/s avec un poids de 22 MB. Si je veux diviser son poids par 2, je vais diviser le bitrate par 2 soit un bitrate final de 8507 kb/s.
La commande suivante va donc réduire le bitrate de la vidéo d'entrée par 2 et le sauver dans out.mp4
:
$ ffmpeg -i foo.mp4 -b 8507k out.mp4
Convertir une vidéo MP4 en fichier GIF en gardant une bonne qualité
Pour utiliser 3 secondes de vidéos (paramètre -t
) après les 30 premières secondes (paramètre -ss
), voici la commande à utiliser :
$ ffmpeg -ss 30 -t 3 -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif
avec les paramètres suivants :
- Le filtre fps définit la fréquence des images. Un taux de 10 images par seconde est utilisé dans l'exemple.
- Le filtre scale redimensionne la sortie à 320 pixels de large et détermine automatiquement la hauteur tout en préservant le rapport d'aspect. L'algorithme de mise à l'échelle de Lanczos est utilisé dans cet exemple.
- Les filtres palettegen et paletteuse génèrent et utilisent une palette personnalisée générée à partir de votre entrée. Ces filtres ont de nombreuses options, aussi référez-vous aux liens pour une liste de toutes les options et valeurs disponibles. Consultez également la section Options avancées ci-dessous.
- Le filtre split permet de tout faire en une seule commande et évite d'avoir à créer un fichier PNG temporaire de la palette.
- Contrôlez le bouclage avec l'option de sortie -loop mais les valeurs sont confuses. Une valeur de 0 est un bouclage infini, -1 n'est pas un bouclage, et 1 bouclera une fois, ce qui signifie qu'il sera lu deux fois. Ainsi, une valeur de 10 fera en sorte que le GIF soit lu 11 fois.
Pour extraire un clip vidéo entre l'horodatage de début (paramètre -ss
) et l'horodatage de fin (paramètre -to
) de la vidéo, voici la commande à utiliser :
$ ffmpeg -i input.mp4 -ss 00:55:19 -to 00:56:32 -c copy output.mp4
Les horodatages doivent être en format "HH:MM:SS.xxx" ou en secondes ("s.msec"). Au lieu du paramètre -to
, vous pouvez utiliser l'option -t
pour spécifier la durée d'encodage.
L'option -c copy
permet de spécifier que l'on conserve le même codec que le fichier initiale.