Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
ffmpeg [Le 20/12/2021, 23:17] – passage de http à https sur les liens externes (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) wiki-corrector-botffmpeg [Le 18/01/2026, 10:46] (Version actuelle) – [Exemples de conversions] extraction au lieu de conversion (vidéo -> audio) bcag2
Ligne 1: Ligne 1:
- 
 {{tag>Focal audio vidéo encodage montage_vidéo capture_vidéo multimédia}} {{tag>Focal audio vidéo encodage montage_vidéo capture_vidéo multimédia}}
  
Ligne 31: Ligne 30:
  
 ===== Utilisation ===== ===== Utilisation =====
 +
 +**Tout ce qui suit parlera de la partie manipulation de fichier Audio - Video.**
 +
 +Cependant, il est utile de savoir que **ffmpeg** intègre par défaut un lecteur minimaliste audio-video **ffplay** utilisable depuis le terminal.
 +
 +Attention, minimaliste ne veut pas dire peu performant.\\
 +Avec toutes les possibilités de ffmpeg vous pouvez aller bien plus loin que n'importe quel lecteur.\\
 +Seul ressource pour cela ... connaitre les arguments à entrer dans la commande terminal.
 +
 +En bref : plus léger, plus simple et plus qualitatif par défaut. Par choix, plus tout ce que vous voulez pour aller plus loin.
 +
 +
 +**Utilisation pour lire UN SEUL fichier Audio ou Video**
 +
 +Tapez dans le terminal ce qui suit et appuyez sur la touche "Entrée" du clavier\\
 +
 +__Pour un fichier video__\\
 +<code>ffplay "le_chemin_du_fichier_que_je_veux_lire.mkv" (ou .mp4, etc.;l'extension du fichier à lire)</code>
 +
 +__Pour un fichier audio__\\
 +<code>ffplay "le_chemin_du_fichier_que_je_veux_lire.wav" (ou .aac, etc.;l'extension du fichier à lire)</code>
 +
 +//NB les guillemets sont importants car ils vous éviteront une erreur si le chemin a des espaces ou des caractères spéciaux//
 +
 +Pour arrêter la lecture appuyer sur "Echap" ou "q"\\
 +**IMPORTANT** Quitter proprement le terminal en tapant  //exit//  une fois pour terminer le processus son, et une autre fois pour fermer le terminal\\
 +\\
 +
 +**Utilisation pour lire plusieurs fichiers audio ou video CONTENUS __DANS UN SEUL ET MEME REPERTOIRE__**\\
 +
 +
 +Tapez dans le terminal ce qui suit et appuyez sur la touche "Entrée"  du clavier\\
 +
 +<code>cd /le_chemin_de_votre_repertoire_contenant_les_fichiers_a_lire</code>
 +puis\\
 +<code>for f in *.wav ; do ffplay -hide_banner -nodisp -autoexit "$f"; done</code>
 +
 +// si vous lisez une video supprimez dans la commande ci-dessus l'option -nodisp qui indique de ne pas afficher la fenêtre du graph audio//\\
 +//-hide_banner bloque l'affichage des infos sur ffmpeg//\\
 +//-autoexit ferme ffplay quand le fichier est lu//\\
 +//(.wav à remplacer par votre format .flac .ogg .mp3 .mp4 .m4a .aac .opus .mkv .webm etc.)//
 +
 +Ctrl + C pour passer au morceau suivant\\
 +Ctrl + Z pour arrêter\\
 +**IMPORTANT** Quitter proprement le terminal en tapant  //exit//  une fois pour terminer le processus son, et une autre fois pour fermer le terminal\\
 +\\
 +
 +**Utilisation pour lire TOUT LE CONTENU D'UN RÉPERTOIRE contenant PLUSIEURS DOSSIERS avec des fichiers audio**
 +
 +<code>find /chemin_du_repertoire/ma_musique/ -type f > filelist.txt && while [ 1 ]; do SDL_AUDIODRIVER=alsa AUDIODEV=hw:2,0 ffplay -hide_banner -nodisp -autoexit "`shuf -n 1 filelist.txt`"; done</code>\\
 +NB //SDL_AUDIODRIVER=alsa AUDIODEV=hw:2,0// sert à contourner le mixeur du PC pour envoyer cela directement sur la sortie USB, ici hw:2,0; trouvez la vôtre avec la commande\\
 +<code>cat /proc/asound/cards</code>
 +Ctrl + C pour passer au morceau suivant\\
 +Ctrl + Z pour arrêter\\
 +**IMPORTANT** Quitter proprement le terminal en tapant  //exit//  une fois pour terminer le processus son, et une autre fois pour fermer le terminal\\
 +
 +J'invite les pros de ffmpeg à ajouter une rubrique à la fin de cette page pour les commandes détaillées de ffplay en ce qui concerne les fichiers videos et la sélection directe des langues et sous-titres ainsi que l'augmentation du format pour supprimer les bandes noires et utiliser tout l'écran.\\
  
 ==== Commencer sur une bonne base ==== ==== Commencer sur une bonne base ====
Ligne 47: Ligne 103:
     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 :
Ligne 317: Ligne 375:
  
  
-| qqvga   | qvga    | vga     | svga    | wvga    |  +| qqvga   | qvga    | vga     | svga    | wvga    | 
-| 160x120 | 320x240 | 640x480 | 800x600 | 852x480 | +| 160x120 | 320x240 | 640x480 | 800x600 | 852x480 |
  
 | xga      | uxga      | sxga      | wxga     | wsxga     | wuxga     | qxga      | woxga     | qsxga     | wqsxga    | wquxga    | | xga      | uxga      | sxga      | wxga     | wsxga     | wuxga     | qxga      | woxga     | qsxga     | wqsxga    | wquxga    |
Ligne 344: Ligne 402:
 <code>-aspect aspect</code> <code>-aspect aspect</code>
 Aspect étant 4:3, 16:9 ou 1.3333, 1.7777. Vous pouvez faire des aspects spéciaux si vous le voulez. Aspect étant 4:3, 16:9 ou 1.3333, 1.7777. Vous pouvez faire des aspects spéciaux si vous le voulez.
 +
 +=== Stabiliser la vidéo ===
 +
 +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 :
 +<code>$ ffmpeg
 +ffmpeg version n7.0.1 Copyright (c) 2000-2024 the FFmpeg developers
 +  built with gcc 14.1.1 (GCC) 20240522
 +  configuration: 
 +  ... --enable-libvidstab ...
 +</code>
 +
 +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 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.
 +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é 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>
 +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
 +</code>
 +
 +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.
 +
 +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>
 +ffmpeg -i inputFile -vf vidstabdetect -f null transforms.trf
 +ffmpeg -i inputFile -vf vidstabtransform=smoothing=40:input=transforms.trf -c:v libx264 -crf 20 -c:a aac -ab 192k output.mp4
 +</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.
 +<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 ====
Ligne 358: Ligne 457:
 ==== Exemples de conversions ==== ==== Exemples de conversions ====
  
-=== Convertir un fichier video pour les réseaux sociaux et messageries (Signal, WhatsApp, Viber, ...) ===+=== Convertir un fichier video pour faciliter le partage sur les clouds, réseaux sociaux et messageries ===
 Cette conversion est utile pour réduire de façon drastique la taille des fichiers en conservant une qualité suffisante pour le regarder sur un téléphone. Cette conversion est utile pour réduire de façon drastique la taille des fichiers en conservant une qualité suffisante pour le regarder sur un téléphone.
 <code>ffmpeg -i FichierSource.MOV -vcodec libx264 FichierResultat.mp4</code> <code>ffmpeg -i FichierSource.MOV -vcodec libx264 FichierResultat.mp4</code>
-Si la source est en HD, vous pouvez réduire un peu la définition pour réduire de façon importante la taille du fichier :+Si la source est en HD, vous pouvez réduire la définition pour réduire de façon importante la taille du fichier :
 <code>ffmpeg -i FichierSourceHD.MOV -s wvga -vcodec libx264 FichierResultat.mp4</code> <code>ffmpeg -i FichierSourceHD.MOV -s wvga -vcodec libx264 FichierResultat.mp4</code>
 +(on peut remplacer //wvga// par //hd720//, cf. [[wpfr>Format_d'affichage_vidéo]]… ou définir la taille//x//×//y//, mais attention de respecter le ratio
  
 === Convertir une vidéo en WebM (VP8+Vorbis) en deux passes === === Convertir une vidéo en WebM (VP8+Vorbis) en deux passes ===
Ligne 372: Ligne 472:
 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 :
  
Ligne 411: Ligne 511:
 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>
 #!/bin/bash #!/bin/bash
Ligne 497: Ligne 597:
 <code>ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 25 -s 1024x768 -i :0.0 -acodec flac -vcodec libx264 -preset ultrafast -qn 0 output.mkv <code>ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 25 -s 1024x768 -i :0.0 -acodec flac -vcodec libx264 -preset ultrafast -qn 0 output.mkv
 </code> </code>
 +
 +**NB1** vous pouvez changer  flac  par  aac  ou  ac3  ou  mp3  etc. Testez car selon votre PC cela joue sur la qualité et fluidité globales lors de la restitution.
 +
 +**NB2** pour la même raison que NB1 vous pouvez aussi changer l'extension  .mkv  du fichier en  .mp4  .avi   etc.. Une fois de plus, testez et voyez.
 +
 +**PROBLEME DE CAPTURE ECRAN SANS L'AUDIO**
 +
 +Dans le terminal lancez la commande    alsamixer
 +
 +Appuyez sur  F6  et choisissez  default  (normalement c'est la première ligne)
 +
 +Si vous utilisez une carte son, après avoir fait F6 choisissez là afin de vérifier-ajuster le volume à son maximum.
 +Ensuite  esc  et retapez dans le terminal  alsamixer puis F6 pour choisir la valeur  default  puis  esc
 +
 +Ensuite toujours dans le terminal tapez  pavucontrol
 +Vérifiez que vous avez bien choisi la source de sortie que vous utilisez habituellement, déconnectez toutes les autres, micro inclus puis allez à l'onglet  gestion des entrée. Vérifiez qu'il affiche un élément actif pour la source d'entrée retenue avec le volume à 100. Si non, activez le en cliquant sur l'icone d'un haut-parleur (en haut à droite juste au-dessus de la ligne concernée) et ajustez si besoin le volume à 100.
 +
 +ENFIN, redémarrez votre PC car j'ai relevé que sur certains PC tout devenait fonctionnel après un redémarrage (???). Ne me demandez pas pourquoi je ne suis pas un expert hardware-software bas/moyen-niveau donc je n'aurai aucune réponse à vous donner.
 +
  
 ==== Pour créer une vidéo à partir de photos ==== ==== Pour créer une vidéo à partir de photos ====
-À partir des images //img001.png, img002.png, img003.png//:+À partir des images //img001.png, img002.png, img003.png//:\\ 
 +FIXME (le code ci-dessous ne fonctionne pas sous [[:Jammy]]
 <code> <code>
 ffmpeg -framerate 24 -i img%03d.png output.mp4 ffmpeg -framerate 24 -i img%03d.png output.mp4
 </code> </code>
-[[https://trac.ffmpeg.org/wiki/Slideshow|Explication pour créer une vidéo à partir de photo (animation) (en)]]+[[https://trac.ffmpeg.org/wiki/Slideshow|Explication pour créer une vidéo à partir de photo (animation) (en)]]\\ 
 +Alternative ((src (en) : https://stackoverflow.com/a/37478183/6614155)) : 
 +<code bash> 
 +ffmpeg -framerate 1 -pattern_type glob -i 'img*.png' -c:v libx264 -pix_fmt yuv420p output.mp4 
 +</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. 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 ====
Ligne 521: Ligne 650:
 </code> </code>
 </note> </note>
 +<note tip>L'utilisation de -c:v copy et -c:a copy permet une découpe très rapide car il n'y a pas de ré-encodage du fichier. Cependant la découpe est moins précise car calée sur l'image clé la plus proche de la borne de temps définie par l'utilisateur. L'utilisation de la syntaxe suivante permet une découpe plus précise mais prend davantage de temps car il y a ré-encodage de la séquence extraite :
 +<code>
 +ffmpeg -ss 00:18:00.00 -t 00:12:18.25 -i fichieradecouper.mp4 fichierdecoupe.mp4
 +</code></note>
  
 ==== Pivoter une vidéo ==== ==== Pivoter une vidéo ====
Ligne 571: Ligne 704:
 Pour les méta-données, on peut aussi utiliser [[:exiftool]] Pour les méta-données, on peut aussi utiliser [[:exiftool]]
  
 +==== Ajouter une piste son ainsi que des sous-titres ====
 +Dans cet exemple :
 +  * on va ajouter une deuxième piste son (française) au fichier video.mp4 qui en possède déjà une (anglaise)
 +  * on va ajouter des sous-titres dans chacune des deux langues
 +  * on va ajouter une image de couverture image.jpg
 +  * on va mettre à jour des métadonnées
 +<code bash>ffmpeg -i video.mp4 -i son_francais.aac -i st_ang.srt -i st_fr.srt -i image.jpg -map 0 -map 1 -map 2 -map 3 -map 4 -c copy -metadata comment="Paris brûle-t-il (1966) doublé 1080p x265" -metadata:s:a:0 title="Anglais (English)" -metadata:s:a:0 language=eng -metadata:s:a:1 title="Français (French)" -metadata:s:a:1 language=fra -metadata:s:v:0 title="Vidéo" -c:s mov_text -metadata:s:s:0 language=eng -metadata:s:s:1 language=fra output.mp4
 +</code>
 +<note tip>  * -map 0 -map 1 -map 2 -map 3 -map 5 : applique le traitement aux 5 fichiers d'entrée définis avec -i
 +  * -c copy : copie sans réencoder
 +  * -metadata comment="Ceci est un commentaire 1080p x265" : modifie la métadonnée commentaire du fichier
 +  * -metadata title="Le titre de la vidéo" : modifie la métadonnée titre du fichier (en général s'affiche au lancement)
 +  * -metadata:s:a:0 title="Anglais (English)" : titre du premier flux (stream) audio (au cas d'espèces déjà dans le fichier)
 +  * -metadata:s:a:0 language=eng : langue du premier flux audio (anglais)
 +  * -metadata:s:a:1 title="Français (French)" : titre du deuxième flux audio (son_francais.aac)
 +  * -metadata:s:a:1 language=fra : langue du deuxième flux audio (français)
 +  * -metadata:s:v:0 title="Vidéo" : titre du premier flux vidéo
 +  * -c:s mov_text : convertit les fichiers srt en sous-titres mov_text pour mp4
 +  * -metadata:s:s:0 language=eng : métadonnée langue (anglais) du premier fichier de sous-titres (st_ang.srt)
 +  * -metadata:s:s:1 language=fra : métadonnée langue (français) du deuxième fichier de sous-titres (st_fr.srt)
 +  * output.mp4 : fichier de sortie
 +</note>
 ==== Pour consulter le manuel de FFmpeg ==== ==== Pour consulter le manuel de FFmpeg ====
  
Ligne 585: Ligne 740:
  ----  ----
  
-//Contributeurs principaux : loup_74, ElGeneralMidi, [[utilisateurs:Wido]], [[utilisateurs:laurentb|Laurent Bellegarde]], Isamaya (pour l'extraction des flux audio et vidéo).//+//Contributeurs principaux : loup_74, ElGeneralMidi, [[utilisateurs:Wido]], [[utilisateurs:laurentb|Laurent Bellegarde]], Isamaya (pour l'extraction des flux audio et vidéo), [[:utilisateurs:bcag2]].//