ffmpeg, la boite à outils multimédia
Table des matières
ffmpeg est un logiciel très puissant de lecture et encodage de vidéo, s'utilisant en ligne de commande. Il existe des interfaces graphiques, mais ici, je parlerai de la ligne de commande.
Quelques commandes tordues qui m'ont "sauvé la vie" se trouvent ci-dessous.
Hé oui, cela ne sert à rien d'utiliser ffmpeg si le format qu'on souhaite traiter n'est pas pris en charge
La commande suivante répondra à nos interrogations :
L'option -c:v permet d'utiliser un codec video particulier et -c:a le codec audio :
Vous avez pris une vidéo avec votre smartphone préféré en mode portrait, et quand vous lisez celle-ci sur votre PC, il faut tourner la tête.
Voici la commande magique (exemple réalisé avec un fichier mp4)
Quand on fait une extraction de K7 ou vinyle, on extrait en WAV ou AIFF (Format non compressé).
Pour gagner de la place, je convertis en OGG avec la meilleure qualité (bon rapport taille/qualité).
Pour cela :
-c:a libvorbis permet de définir le codec audio à utiliser
-aq permet de conserver une qualité de 10 sur 10 (chez libvorbis)
Pour cela, rien de plus simple :
Par défaut, la qualité est faible.
-aq permet de conserver une qualité de 10 sur 10 (chez libvorbis).
-vn permet de ne pas inclure la vidéo (car le format OGG peut embarquer de la vidéo)
Si on veut du MP3, 320 :
Il est aussi possible d'enregistrer son bureau (ne fonctionne qu'avec X11, pas avec Wayland) :
Et avec le microphone en HD :
Encore plus optimisé pour le jeu :
Pour conserver la même qualité, utiliser le paramètre -qscale :
Si vous êtes comme moi, à aimer les photos, parfois, on est moins réactif qu'en effectuant une vidéo.
Pour extraire les images d'une vidéo (à environ 25 images par secondes), voici l'a ligne de commande à utiliser :
Pour couper une scène de la vidéo, on peut utiliser -ss pour le début de la séquence et -t pour sa durée.
Par exemple, pour couper 30 secondes de vidéo à partir de 39 minutes 45 secondes (en conservant la qualité originale), on utilisera :
Les options -c:v copy -c:a copy permettent d'utiliser les mêmes codecs.
Avec OpenShot, je ne peux exporter en HD qu'en format 16/9. Or, ma vidéo de base est en 4/3. Ca me créé donc 2 bandes noires de chaque côté. Voici l'astuce pour rogner la vidéo avec ffmpeg
La vidéo a été sortie en 1280x720. Je conserve les 720 de hauteur. La vidéo est centrée (Les 2 bandes noires sont de la même largeur).
(720x4)/3 = 960 au total.
Donc, j'ai 1280-960=320px à rogner (160 de chaque côté).
La commande que je vais utiliser est
où :
Dans mon exemple, j'ai donc utilisé :
Ici j'ai une vidéo en MP4, je veux la convertir en OGG mais en ne dépassant pas un bitrate vidéo de 512k et audio de 96k :
Quand je fais des vidéos parfois il n'est pas nécessaire d'avoir un grand nombre d'images par secondes.
Voici une astuce pour réduire les FPS à la conversion :
-r 9 correspond à peu près à 25 FPS, pourquoi, je ne sais pas. La console l'indique de toute façon :
Il m'arrive de faire des vidéos (avec le même appareil) ou avec SimpleScreenRecorder (donc au même format) et de vouloir les concaténer.
Voici la méthode utilisée. Créer un fichier texte avec tous les noms dans l'ordre des vidéos à concaténer :
Ensuite, exécuter la commande suivante pour tout concaténer :
Et le tour est joué !
Voici une astuce pour ajouter une piste audio. On a une vidéo sans son par exemple et on a la piste son à côté. Pour poser l'audio sur la vidéo sans réencoder, procéder ainsi :
Si on se rend compte après montage que le son n'est pas très fort dans une vidéo, on peut monter celui-ci sans réencoder la vidéo.
Voici comment utiliser ffmpeg pour monter le son de 10 décibels :
On peut aussi baisser le son :
Si on veut créer une vidéo avec une piste audio (MP3) et y inclure une image statique (JPG par exemple), procéder comme ceci :
Exemple ici de conversion de fichiers aif en ogg :
Voici un exemple pour zoomer de 1.5 fois la vidéo, le surplus est rogné. Le -1 signifie que la hauteur est définie automatiquement.
Dans cet exemple, j'avais une vidéo en 1920x1080. Elle pesait 18Go. Pour l'uploader sur mon site, je voulais réduire la taille.
Voici un exemple pour la redimensionner en 1280x720 :
Ici, le -1 permet de conserver l'échelle.
On aurait pu écrire ainsi :
Envoyer les fichiers convertis dans le dossier MP3 :
Avec la commande ci-dessus, si les fichiers contiennent des métadonnées (Titre, Année, Album, ReplayGain, BPM), elles sont perdues.
Voici les options à rajouter : -map_metadata 0 -map_metadata 0:s:0 -id3v2_version 3 -vn
Ce qui donne :
ffmpeg est aussi capable d'extraire un spectrogramme audio d'un fichier. Il est utile pour analyser la qualité audio.
On utilisera la commande suivante :
Ici, je spécifie la taille de l'image, sinon, on a une taille de 4096x2048 !
Cela génère une image spectrogram.png :
La génération est assez longue, sox le fait plus rapidement mais reste limité à des fichiers audio uniquement, sur les formats les plus courants : https://www.linuxtricks.fr/wiki/sox-le-couteau-suisse-de-la-manipulation-audio
- Introduction
- Commandes
- Que puis-je lire ? et encoder ?
- Encoder une vidéo en h264 et son aac
- Pivoter une vidéo de 90°
- Convertir un fichier audio en OGG excellente qualité
- Extraire l'audio d'une vidéo
- Capturer l'écran de son bureau
- Convertir une vidéo mp4 en avi en conservant la même qualité
- Extraire d'une vidéo les images en png
- Couper une vidéo
- Rogner une vidéo
- Convertir une vidéo en forçant un bitrate
- Réduire le nombres d'images par secondes
- Concaténer plusieurs vidéos
- Supprimer le son d'une vidéo
- Ajouter une piste audio à une vidéo
- Augmenter ou diminuer le volume de la bande son d'une vidéo sans réencoder
- Faire une vidéo avec un fichier JPG et un son MP3
- Convertir des fichiers en lots
- Zoomer une vidéo à 1.5x
- Redimensionner une vidéo
- Convertir des OGG en MP3 en lot
- Convertir des OGG en MP3 en gardant les METADATA
- Générer un spectrogramme audio
Introduction
ffmpeg est un logiciel très puissant de lecture et encodage de vidéo, s'utilisant en ligne de commande. Il existe des interfaces graphiques, mais ici, je parlerai de la ligne de commande.
Commandes
Quelques commandes tordues qui m'ont "sauvé la vie" se trouvent ci-dessous.
Que puis-je lire ? et encoder ?
Hé oui, cela ne sert à rien d'utiliser ffmpeg si le format qu'on souhaite traiter n'est pas pris en charge
La commande suivante répondra à nos interrogations :
Code BASH :
ffmpeg -formats
Encoder une vidéo en h264 et son aac
L'option -c:v permet d'utiliser un codec video particulier et -c:a le codec audio :
Code BASH :
ffmpeg -i source.mp4 -c:v h264 -c:a aac video264.mkv
Pivoter une vidéo de 90°
Vous avez pris une vidéo avec votre smartphone préféré en mode portrait, et quand vous lisez celle-ci sur votre PC, il faut tourner la tête.
Voici la commande magique (exemple réalisé avec un fichier mp4)
Code BASH :
ffmpeg -i ori.mp4 -vf "transpose=1" ret.mp4
Valeurs possibles de transpose :
0 = 90CounterCLockwise and Vertical Flip (default)
1 = 90Clockwise
2 = 90CounterClockwise
3 = 90Clockwise and Vertical Flip
1 = 90Clockwise
2 = 90CounterClockwise
3 = 90Clockwise and Vertical Flip
Convertir un fichier audio en OGG excellente qualité
Quand on fait une extraction de K7 ou vinyle, on extrait en WAV ou AIFF (Format non compressé).
Pour gagner de la place, je convertis en OGG avec la meilleure qualité (bon rapport taille/qualité).
Pour cela :
Code BASH :
ffmpeg -i mamusique.aif -aq 10 -c:a libvorbis mamusique.ogg
-c:a libvorbis permet de définir le codec audio à utiliser
-aq permet de conserver une qualité de 10 sur 10 (chez libvorbis)
Extraire l'audio d'une vidéo
Pour cela, rien de plus simple :
Code BASH :
ffmpeg -i video.mp4 -vn -aq 10 audio.ogg
Par défaut, la qualité est faible.
-aq permet de conserver une qualité de 10 sur 10 (chez libvorbis).
-vn permet de ne pas inclure la vidéo (car le format OGG peut embarquer de la vidéo)
Si on veut du MP3, 320 :
Code BASH :
ffmpeg -i video.mp4 -b:a 320k audio.mp3
Capturer l'écran de son bureau
Il est aussi possible d'enregistrer son bureau (ne fonctionne qu'avec X11, pas avec Wayland) :
Code BASH :
ffmpeg -f x11grab -r 30 -s 1920x1080 -i :0.0 -vcodec libx264 out.mkv
- -s 1920x1080 : correspond à la résolution en partant du coin supérieur gauche
Et avec le microphone en HD :
Code BASH :
ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 30 -s 1920x1080 -i :0.0 -acodec pcm_s16le -vcodec libx264 bureau.mkv
Encore plus optimisé pour le jeu :
Code BASH :
ffmpeg -threads 0 -async 30 -f alsa -i pulse -f x11grab -s 1920x1080 -r 30 -i :0 -vcodec libx264 -preset superfast -crf 16 -acodec libmp3lame -f mp4 video.mp4
Convertir une vidéo mp4 en avi en conservant la même qualité
Pour conserver la même qualité, utiliser le paramètre -qscale :
Code BASH :
ffmpeg -i video.mp4 -qscale 0 video.avi
Extraire d'une vidéo les images en png
Si vous êtes comme moi, à aimer les photos, parfois, on est moins réactif qu'en effectuant une vidéo.
Pour extraire les images d'une vidéo (à environ 25 images par secondes), voici l'a ligne de commande à utiliser :
Code BASH :
ffmpeg -i video.mp4 -r 25 output_%04d.png
Couper une vidéo
Pour couper une scène de la vidéo, on peut utiliser -ss pour le début de la séquence et -t pour sa durée.
Par exemple, pour couper 30 secondes de vidéo à partir de 39 minutes 45 secondes (en conservant la qualité originale), on utilisera :
Code BASH :
ffmpeg -i sequenceacouper.avi -ss 00:39:45.00 -t 00:00:30.00 -c:v copy -c:a copy nouvellesequence.avi
Les options -c:v copy -c:a copy permettent d'utiliser les mêmes codecs.
Rogner une vidéo
Avec OpenShot, je ne peux exporter en HD qu'en format 16/9. Or, ma vidéo de base est en 4/3. Ca me créé donc 2 bandes noires de chaque côté. Voici l'astuce pour rogner la vidéo avec ffmpeg
La vidéo a été sortie en 1280x720. Je conserve les 720 de hauteur. La vidéo est centrée (Les 2 bandes noires sont de la même largeur).
(720x4)/3 = 960 au total.
Donc, j'ai 1280-960=320px à rogner (160 de chaque côté).
La commande que je vais utiliser est
Code BASH :
ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4
où :
- out_w est la largeur de la vidéo finale
- out_h est la hauteur de la vidéo finale
- x et y spécifient les coordonnées du coin supérieur gauche du rectangle précédemment défini (les coordonnées 0:0 sont en haut à gauche de la vidéo
Dans mon exemple, j'ai donc utilisé :
Code BASH :
ffmpeg -i in.mp4 -filter:v "crop=960:720:160:0" out.mp4
Convertir une vidéo en forçant un bitrate
Ici j'ai une vidéo en MP4, je veux la convertir en OGG mais en ne dépassant pas un bitrate vidéo de 512k et audio de 96k :
Code BASH :
ffmpeg -i CLDM.mp4 -b:v 512k -b:a 96k CLDM-2.ogg
Réduire le nombres d'images par secondes
Quand je fais des vidéos parfois il n'est pas nécessaire d'avoir un grand nombre d'images par secondes.
Voici une astuce pour réduire les FPS à la conversion :
Code BASH :
ffmpeg -i CLDM.mp4 -r 9 CLDM.ogg
-r 9 correspond à peu près à 25 FPS, pourquoi, je ne sais pas. La console l'indique de toute façon :
Code RUBY :
frame= 3645 fps= 25 q=0.0 Lsize= 12018kB time=00:06:04.55 bitrate= 270.1kbits/s dup=0 drop=7273
Concaténer plusieurs vidéos
Il m'arrive de faire des vidéos (avec le même appareil) ou avec SimpleScreenRecorder (donc au même format) et de vouloir les concaténer.
Voici la méthode utilisée. Créer un fichier texte avec tous les noms dans l'ordre des vidéos à concaténer :
Code BASH :
vi fic.txt
Code TEXT :
file 'out-2016-06-16_17.49.16.ogg' file 'out-2016-06-16_18.04.20.ogg' file 'out-2016-06-16_18.12.01.ogg'
Ensuite, exécuter la commande suivante pour tout concaténer :
Code BASH :
ffmpeg -f concat -i fic.txt -c copy out.ogg
Et le tour est joué !
Supprimer le son d'une vidéo
Code BASH :
ffmpeg -i video.mp4 -c copy -an video-sansson.mp4
Ajouter une piste audio à une vidéo
Voici une astuce pour ajouter une piste audio. On a une vidéo sans son par exemple et on a la piste son à côté. Pour poser l'audio sur la vidéo sans réencoder, procéder ainsi :
Code BASH :
ffmpeg -i video.mp4 -i audio.mp3 -c copy -map 0:0 -map 1:0 video_finale.mp4
Augmenter ou diminuer le volume de la bande son d'une vidéo sans réencoder
Si on se rend compte après montage que le son n'est pas très fort dans une vidéo, on peut monter celui-ci sans réencoder la vidéo.
Voici comment utiliser ffmpeg pour monter le son de 10 décibels :
Code BASH :
ffmpeg -i video.mp4 -vcodec copy -af "volume=10dB" video-augmentee.mp4
On peut aussi baisser le son :
Code BASH :
ffmpeg -i video.mp4 -vcodec copy -af "volume=-5dB" video-diminuee.mp4
Faire une vidéo avec un fichier JPG et un son MP3
Si on veut créer une vidéo avec une piste audio (MP3) et y inclure une image statique (JPG par exemple), procéder comme ceci :
Code BASH :
ffmpeg -loop 1 -i image.jpg -i son.mp3 -shortest -c:v libx264 -c:a copy video.mp4
Convertir des fichiers en lots
Exemple ici de conversion de fichiers aif en ogg :
Code BASH :
for f in *.aif do ffmpeg -i "$f" -aq 10 -c:a libvorbis "${f/.aif/.ogg}" done
Zoomer une vidéo à 1.5x
Voici un exemple pour zoomer de 1.5 fois la vidéo, le surplus est rogné. Le -1 signifie que la hauteur est définie automatiquement.
Code BASH :
ffmpeg -i input.webm -vf "scale=1.5*iw:-1, crop=iw/1.5:ih/1.5" output-zoom-150.webm
Redimensionner une vidéo
Dans cet exemple, j'avais une vidéo en 1920x1080. Elle pesait 18Go. Pour l'uploader sur mon site, je voulais réduire la taille.
Voici un exemple pour la redimensionner en 1280x720 :
Code BASH :
ffmpeg -i 2021-12-11.mkv -vf scale=-1:720 2021-12-11-720p.mkv
Ici, le -1 permet de conserver l'échelle.
On aurait pu écrire ainsi :
Code BASH :
ffmpeg -i 2021-12-11.mkv -vf scale=1280:-1 2021-12-11-720p.mkv
Convertir des OGG en MP3 en lot
Envoyer les fichiers convertis dans le dossier MP3 :
Code BASH :
for file in *.ogg do ffmpeg -i "$file" -c:a libmp3lame -b:a 320K -ac 2 "MP3/${file/%ogg/mp3}" done
Convertir des OGG en MP3 en gardant les METADATA
Avec la commande ci-dessus, si les fichiers contiennent des métadonnées (Titre, Année, Album, ReplayGain, BPM), elles sont perdues.
Voici les options à rajouter : -map_metadata 0 -map_metadata 0:s:0 -id3v2_version 3 -vn
Ce qui donne :
Code BASH :
ffmpeg -i entree.ogg -c:a libmp3lame -b:a 320K -ac 2 -map_metadata 0 -map_metadata 0:s:0 -id3v2_version 3 -vn sortie.mp3
Générer un spectrogramme audio
ffmpeg est aussi capable d'extraire un spectrogramme audio d'un fichier. Il est utile pour analyser la qualité audio.
On utilisera la commande suivante :
Code BASH :
ffmpeg -i fichier.mp3 -lavfi showspectrumpic=s=1000x500 spectrogram.png
Ici, je spécifie la taille de l'image, sinon, on a une taille de 4096x2048 !
Cela génère une image spectrogram.png :
La génération est assez longue, sox le fait plus rapidement mais reste limité à des fichiers audio uniquement, sur les formats les plus courants : https://www.linuxtricks.fr/wiki/sox-le-couteau-suisse-de-la-manipulation-audio