| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| ffmpeg [Le 25/08/2024, 16:59] – [Transformer la vidéo] ouvradou | ffmpeg [Le 03/11/2026, 16:27] (Version actuelle) – màj liens internes krodelabestiole |
|---|
| {{tag>Focal audio vidéo encodage montage_vidéo capture_vidéo multimédia}} | {{tag>Focal audio vidéo encodage_vidéo encodage_audio montage_vidéo capture_vidéo multimédia}} |
| |
| ---- | {{ https://upload.wikimedia.org/wikipedia/commons/7/76/FFmpeg_icon.svg?80|Logo de FFmpeg}} |
| | |
| {{ http://ffmpeg.org/ffmpeg-logo.png?150| Logo de ffmpeg}} | |
| ====== FFmpeg ====== | ====== FFmpeg ====== |
| |
| **FFmpeg** est une application de lecture et encodage de vidéo. Très puissante comme son alter ego [[Mencoder]], il assure en [[;commande_shell|ligne de commande]] la possibilité de convertir les fichiers vidéo d'un format à un autre, dont le **mts** et m2ts. | **FFmpeg** est une application de lecture et encodage de vidéo. Très puissante comme son alter ego [[Mencoder]], il assure en [[:commande_shell|ligne de commande]] la possibilité de convertir les fichiers vidéo d'un format à un autre, dont le **mts** et m2ts. |
| |
| ===== Utilisation graphique ===== | ===== Utilisation graphique ===== |
| |
| Il existe des interfaces graphiques permettant de simplifier grandement le transcodage de fichiers : | Il existe des interfaces graphiques permettant de simplifier grandement le transcodage de fichiers : |
| | * [[https://www.framegui.app/|Frame]] - une interface graphique open source et moderne qui permet de convertir vidéos, audios et images sans toucher au terminal. Dispo en [[:appimage]] sur [[https://github.com/66HEX/frame/releases/latest|Github]] ou en [[:flatpak]] sur [[https://flathub.org/fr/apps/io.github._66HEX.Frame|Flathub]] |
| * [[http://ekd.tuxfamily.org/|EKD]] - EKD est un logiciel libre qui se propose de faire des opérations de post-production aussi bien pour des vidéos, que pour des images. En ce qui concerne les images, EKD fait du traitement par lots. | * [[http://ekd.tuxfamily.org/|EKD]] - EKD est un logiciel libre qui se propose de faire des opérations de post-production aussi bien pour des vidéos, que pour des images. En ce qui concerne les images, EKD fait du traitement par lots. |
| * [[WinFF]] - Cette application vous permet de choisir parmi une liste de profils un encodage vidéo qui conviendra à vos attentes. Par exemple si vous voulez faire une vidéo compatible Blackberry, il ne vous sera même pas nécessaire de savoir quel est l'encodage interne utilisé. | * [[WinFF]] - Cette application vous permet de choisir parmi une liste de profils un [[:encodage vidéo]] qui conviendra à vos attentes. Par exemple si vous voulez faire une vidéo compatible Blackberry, il ne vous sera même pas nécessaire de savoir quel est l'encodage interne utilisé. |
| |
| D'autres interfaces graphiques ont été créées pour répondre à des attentes spécifiques : | D'autres interfaces graphiques ont été créées pour répondre à des attentes spécifiques : |
| Stream #0.1: Video: wmv3, yuv420p, 320x240, 323 kb/s, 25 tbr, 1k tbn, 1k tbc | Stream #0.1: Video: wmv3, yuv420p, 320x240, 323 kb/s, 25 tbr, 1k tbn, 1k tbc |
| </code> | </code> |
| | <note tip>Un utilitaire très léger est dédié à l'accés au métadonnées des fichiers média : [[:mediainfo]]</note> |
| | |
| Le nombre d'instructions à passer peut être grand, il faudra en ajouter bout à bout et au final vous finirez par créer vous-même une commande correspondant à vos besoins ! | Le nombre d'instructions à passer peut être grand, il faudra en ajouter bout à bout et au final vous finirez par créer vous-même une commande correspondant à vos besoins ! |
| Une commande finale ressemblera à ça : | Une commande finale ressemblera à ça : |
| === Utilisation Multithreads === | === Utilisation Multithreads === |
| |
| Si FFmpeg est compilé avec la possibilité de faire du **[[multithreading]]** (la version par défaut d'Ubuntu le permet par exemple), il permet sans aucune difficulté d'utiliser les processeurs actuels à leur plein potentiel pour encoder un fichier, il suffit de passer l'instruction threads à ffmpeg à chaque encodage : | Si FFmpeg est compilé avec la possibilité de faire du //[[wpfr>multithreading]]// (la version par défaut d'Ubuntu le permet par exemple), il permet sans aucune difficulté d'utiliser les processeurs actuels à leur plein potentiel pour encoder un fichier, il suffit de passer l'instruction threads à ffmpeg à chaque encodage : |
| <code>-threads 0</code> | <code>-threads 0</code> |
| |
| N étant le nombre de threads à utiliser. Vous pouvez donc en utiliser seulement 3 sur un processeur Quad Core pour garder une grande réactivité sur une autre tâche. | N étant le nombre de threads à utiliser. Vous pouvez donc en utiliser seulement 3 sur un processeur Quad Core pour garder une grande réactivité sur une autre tâche. |
| |
| Vous pouvez ensuite compléter par n'importe quelles instructions, et si le codec supporte le multithreading il utilisera automatiquement au mieux votre installation. | Vous pouvez ensuite compléter par n'importe quelles instructions, et si le codec supporte le //[[wpfr>multithreading]]// il utilisera automatiquement au mieux votre installation. |
| |
| === Fichiers d'entrée et de sortie === | === Fichiers d'entrée et de sortie === |
| Ici cependant, on peut se contenter d'utiliser la même extension que le fichier source (.mkv, .ogm, .avi, etc), ou encore changer de conteneur (passer de .flv à .mkv par exemple) sans pour autant transcoder le flux vidéo, ce qui est bien pratique.</note> | Ici cependant, on peut se contenter d'utiliser la même extension que le fichier source (.mkv, .ogm, .avi, etc), ou encore changer de conteneur (passer de .flv à .mkv par exemple) sans pour autant transcoder le flux vidéo, ce qui est bien pratique.</note> |
| __Remarque__: bien que ffmpeg fasse très bien les choses, pour certains formats et en particulier le MKV, il est recommandé d'utiliser les outils dédiés tels que [[mkvtoolnix]]. | __Remarque__: bien que ffmpeg fasse très bien les choses, pour certains formats et en particulier le MKV, il est recommandé d'utiliser les outils dédiés tels que [[mkvtoolnix]]. |
| | |
| ==== Instructions d'encodage Audio ==== | ==== Instructions d'encodage Audio ==== |
| | |
| | <note>Voir la page //[[:Encodage audio]]//.</note> |
| | |
| Il faut paramétrer le son. Et c'est très simple ! | Il faut paramétrer le son. Et c'est très simple ! |
| <code>-acodec "nom du codec"</code> | <code>-acodec "nom du codec"</code> |
| Pour supprimer l'audio | Pour supprimer l'audio |
| <code>-an</code> | <code>-an</code> |
| | |
| ==== Instructions d'encodage vidéo ==== | ==== Instructions d'encodage vidéo ==== |
| |
| C'est là où ça se complique car il y a plein de codecs vidéo, et ils ont souvent des instructions obscures, même pour les utilisateurs les plus avertis... Ce qui est... Déroutant... | <note>Voir la page //[[:Encodage vidéo]]//.</note> |
| | |
| | C'est là où ça se complique car il y a plein de codecs vidéo, et ils ont souvent des instructions obscures, même pour des utilisateurs avertis... ce qui peut être déroutant\_! |
| |
| Mais ne vous inquiétez pas, nous allons vous expliquer comment éviter les plus gros pièges ! | Mais ne vous inquiétez pas, nous allons vous expliquer comment éviter les plus gros pièges ! |
| Si, en revanche, vous voulez une taille de fichier final bien précise, utilisez un encodage en 2 passes. | Si, en revanche, vous voulez une taille de fichier final bien précise, utilisez un encodage en 2 passes. |
| |
| Voir : [[encodage_dvd_mkv|Encodage DVD → MKV]] | Voir : [[:encodage_dvd_mkv|Encodage DVD → MKV]] |
| </note> | </note> |
| |
| |
| === Stabiliser la vidéo === | === Stabiliser la vidéo === |
| Pour réduire les tremblements de la caméra en post-production. | |
| Prérequis : la bibliothèque vidstab doit être intégrée à la configuration de ffmpeg. | Pour réduire en post-production les tremblements de la caméra lors de la prise de vue. |
| | |
| | Prérequis : la bibliothèque vidstab doit être intégrée à la configuration de ffmpeg. |
| Pour le vérifier : | Pour le vérifier : |
| <code>$ ffmpeg | <code>$ ffmpeg |
| ... --enable-libvidstab ... | ... --enable-libvidstab ... |
| </code> | </code> |
| | |
| ffmpeg effectue la stabilisation d'une vidéo en deux passes : | ffmpeg effectue la stabilisation d'une vidéo en deux passes : |
| - une passe d'analyse de la vidéo qui produit un fichier nommé transforms.trf | - une passe d'analyse de la vidéo qui produit un fichier nommé //transforms.trf// |
| - une passe de traitement qui exploite ce fichier et produit la vidéo stabilisée. | - une passe de traitement qui exploite ce fichier et produit la vidéo stabilisée. |
| La [[https://github.com/georgmartius/vid.stab|Bibliothèque vidstab]] utilise de nombreux paramètres pour analyser les tremblements. | |
| | La [[https://github.com/georgmartius/vid.stab|bibliothèque vidstab]] utilise de nombreux paramètres pour analyser les tremblements. |
| Dans une approche simplissime, on peut se reposer sur les valeurs par défaut de ceux-ci. | Dans une approche simplissime, on peut se reposer sur les valeurs par défaut de ceux-ci. |
| Supposons que la vidéo à stabiliser se nomme //inputFile// et qu'on souhaite encoder la version stabilisée avec le codec vidéo x264 et une qualité de crf=20 et l'audio avec le codec aac avec une bande passante de 192 kbit/s. | |
| On saisira les deux lignes ci-dessous: | Supposons que la vidéo à stabiliser se nomme //inputFile// et qu'on souhaite encoder la version stabilisée avec le codec vidéo x264 et une qualité crf=20 et l'audio avec le codec aac avec une bande passante de 192 kbit/s. |
| | On saisira les deux lignes ci-dessous : |
| <code> | <code> |
| ffmpeg -i inputFile -vf vidstabdetect -f null transforms.trf | ffmpeg -i inputFile -vf vidstabdetect -f null transforms.trf |
| ffmpeg -i inputFile -vf vidstabtransform=:input=transforms.trf -c:v libx264 -crf 20 -c:a aac -ab 192k output.mp4 | ffmpeg -i inputFile -vf vidstabtransform=:input=transforms.trf -c:v libx264 -crf 20 -c:a aac -ab 192k output.mp4 |
| </code> | </code> |
| Si le résultat de la stabilisation ne paraît pas satisfaisant mais si on ne souhaite pas se confronter à la complexité du traitement, on peut se limiter à jouer sur le seul paramètre de lissage (smoothing) qui peut montrer une bonne efficacité. | |
| | Si le résultat de la stabilisation ne paraît pas suffisant mais si on ne souhaite pas se confronter à la complexité du traitement, on peut se limiter à jouer sur le seul paramètre de lissage (//smoothing//) qui peut montrer une bonne efficacité. |
| Sa valeur par défaut est 10. On peut tenter de l'augmenter sensiblement et visualiser l'effet. | Sa valeur par défaut est 10. On peut tenter de l'augmenter sensiblement et visualiser l'effet. |
| Ainsi pour lui donner, par exemple, une valeur de 40, on saisira les lignes suivantes (première ligne inchangée donc optionnelle si elle a déjà été exécutée) : | |
| | Ainsi pour lui donner une valeur de 40, par exemple, on saisira les lignes suivantes (première ligne inchangée donc optionnelle si elle a déjà été exécutée) : |
| <code> | <code> |
| ffmpeg -i inputFile -vf vidstabdetect -f null transforms.trf | ffmpeg -i inputFile -vf vidstabdetect -f null transforms.trf |
| ffmpeg -i inputFile -vf vidstabtransform=smoothing=${lissage}:input=$temp -c:v libx264 -crf 20 -c:a aac -ab 192k output.mp4 | ffmpeg -i inputFile -vf vidstabtransform=smoothing=40:input=transforms.trf -c:v libx264 -crf 20 -c:a aac -ab 192k output.mp4 |
| </code> | </code> |
| | |
| À noter que le processus de stabilisation applique une certaine valeur de zoom à l'image pour pouvoir la décaler sans faire apparaître de bordures noires. | À noter que le processus de stabilisation applique une certaine valeur de zoom à l'image pour pouvoir la décaler sans faire apparaître de bordures noires. |
| | <note>Si on ne souhaite pas de ré-encodage de l'audio : remplacer <code>"-c:a aac -ab 192k" par "-c:a copy"</code></note> |
| | |
| ==== Faire des essais de conversion avec FFmpeg sur une portion de fichier ==== | ==== Faire des essais de conversion avec FFmpeg sur une portion de fichier ==== |
| |
| avconv -i 'fichier source' -threads 0 -vcodec libvpx -b 1500k -minrate 0 -maxrate 9000k -rc_lookahead 16 -keyint_min 0 -g 360 -skip_threshold 0 -level 116 -qmin 1 -qmax 51 -acodec libvorbis -ab 192k -pass 2 -passlogfile pass1.fpf "fichier final.webm"</code> | avconv -i 'fichier source' -threads 0 -vcodec libvpx -b 1500k -minrate 0 -maxrate 9000k -rc_lookahead 16 -keyint_min 0 -g 360 -skip_threshold 0 -level 116 -qmin 1 -qmax 51 -acodec libvorbis -ab 192k -pass 2 -passlogfile pass1.fpf "fichier final.webm"</code> |
| |
| ===Convertir un fichier webm en .mp4=== | === Convertir un fichier webm en .mp4 === |
| Le format [[webm|webm]] est largement utilisé sur internet, en particulier pour youtube. Vous pouvez télécharger ces vidéos de différentes façons, par exemple via [[youtube-dl|youtube-dl]]. Pour voir ces vidéos sur une télévision, il vous faudra sans doute modifier le format (il n'est généralement pas reconnu). Pour passer la vidéo webm en .mp4 : | Le format [[webm|webm]] est largement utilisé sur internet, en particulier pour youtube. Vous pouvez télécharger ces vidéos de différentes façons, par exemple via [[youtube-dl|youtube-dl]]. Pour voir ces vidéos sur une télévision, il vous faudra sans doute modifier le format (il n'est généralement pas reconnu). Pour passer la vidéo webm en .mp4 : |
| |
| Attention, ici le chemin n'est pas précisé. Le fichier doit se trouver dans votre dossier personnel pour que cela fonctionne. | Attention, ici le chemin n'est pas précisé. Le fichier doit se trouver dans votre dossier personnel pour que cela fonctionne. |
| |
| === Convertir un grand nombre de fichiers Vidéo vers le format MP3=== | === Extraire un grand nombre de bandes-son à partir de fichiers Vidéo vers le format MP3 === |
| |
| Ce script permet d'automatiser la conversion de vidéos de plusieurs formats ( Mpeg4, Avi, Flv etc... ) vers le format MP3. | Ce script permet d'automatiser, à partir de vidéos de plusieurs formats ( Mpeg4, Avi, Flv etc... ), l'extraction de la bande-son au format MP3. |
| Plusieurs formats de vidéos peuvent se trouver dans le même dossier au moment de la conversion. | Plusieurs formats de vidéos peuvent se trouver dans le même dossier au moment de la conversion. |
| <file bash videos_to_mp3_converter.sh> | <file bash videos_to_mp3_converter.sh> |
| ffmpeg -framerate 1 -pattern_type glob -i 'img*.png' -c:v libx264 -pix_fmt yuv420p output.mp4 | ffmpeg -framerate 1 -pattern_type glob -i 'img*.png' -c:v libx264 -pix_fmt yuv420p output.mp4 |
| </code> | </code> |
| <note important>le //framerate// est le nombre d'images pas seconde en entrée (ips)… si vous avez 24 images et définissez 24… vous n'aurez qu'une seconde de vidéo et n'aurez pas le temps de voir les images si elles sont très différentes. Pour 10 secondes de vidéo à 24 ips, il faut donc 240 images ! Il est possible d'avoir un //framerate// sur les images fournies en entrée et un //fps// en sortie différent, ffmpeg laissera la même image plusieurs fois ou au contraire en enlèvera ((https://trac.ffmpeg.org/wiki/Slideshow#Framerates))</note> | <note important>le //framerate// est le nombre d'images pas seconde en entrée (ips)… si vous avez 24 images et définissez 24… vous n'aurez qu'une seconde de vidéo et n'aurez pas le temps de voir les images si elles sont très différentes. On peut utiliser 1 (1sec/image) 1/3 (3secondes par image)… 1/5 ! Pour le //framerate// en sortie, ajouter l'option **-r** suivi de la valeur, par exemple **//-r 12.5//** ((https://trac.ffmpeg.org/wiki/Slideshow#Framerates)) |
| | |
| | |
| | En cas d'erreur //height not divisible by 2//, ajouter l'option //-vf "pad=ceil(iw/2)*2:ceil(ih/2)*2"// (avant l'option -pix_fmt) |
| | </note> |
| |
| ==== Découper une vidéo ==== | ==== Découper une vidéo ==== |
| <code>ffmpeg -help long</code> | <code>ffmpeg -help long</code> |
| |
| ===== Pour en savoir plus sur Internet ===== | ===== Voir aussi ===== |
| * ''**(en)**'' [[http://ffmpeg.org/|Site officiel]] | |
| * ''**(fr)**'' [[http://www.jcartier.net/spip.php?article36|Exemples d'usages]] | |
| * ''**(fr)**'' [[http://www.korben.info/ffmpeg-pour-les-nuls.html|FFMPEG pour les nuls]] | |
| |
| ---- | * **(//en//)** [[http://ffmpeg.org/|Site officiel]] |
| | * [[http://www.jcartier.net/spip.php?article36|Exemples d'usages]] |
| | * [[http://www.korben.info/ffmpeg-pour-les-nuls.html|FFMPEG pour les nuls]] |
| | * [[:Encodage vidéo]] |
| | * [[:Encodage audio]] |
| |
| //Contributeurs principaux : loup_74, ElGeneralMidi, [[utilisateurs:Wido]], [[utilisateurs:laurentb|Laurent Bellegarde]], Isamaya (pour l'extraction des flux audio et vidéo).// | ---- |
| | //[[:Contributeurs]] : loup_74, ElGeneralMidi, [[:utilisateurs:Wido]], [[:utilisateurs:laurentb|Laurent Bellegarde]], Isamaya, [[:utilisateurs:bcag2]].// |