Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
ffmpeg [Le 20/06/2023, 15:04] 134.214.206.243 [Pour créer une vidéo à partir de photos] |
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 600: | 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 ==== | ||