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édentes Révision précédente
Prochaine révision
Révision précédente
ffmpeg [Le 03/11/2022, 18:05]
bcag2 [Exemples de conversions] précisions sur l'option -s
ffmpeg [Le 27/08/2024, 16:29] (Version actuelle)
ouvradou [Transformer la vidéo]
Ligne 30: 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 343: Ligne 400:
 <​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 497: Ligne 595:
 <​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. 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>​
  
 ==== Découper une vidéo ==== ==== Découper une vidéo ====
Ligne 575: Ligne 698:
 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 ====
  
  • ffmpeg.1667495110.txt.gz
  • Dernière modification: Le 03/11/2022, 18:05
  • par bcag2