Outils pour utilisateurs

Outils du site


ffmpeg

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 [2013/11/11 11:16]
luc
ffmpeg [2023/10/14 09:26] (Version actuelle)
luc
Ligne 1: Ligne 1:
-===== FFMPEG =====+====== FFMPEG & IMAGEMAGICK ======
  
-==== Intro ====+===== FFMPEG = STREAM (audio ou video) =====
  
 Cet outil est efficace car autonome : il ne nécessite pas d'autres soft ou autre pour fonctionner ou faire des choses intéressantes.\\ Cet outil est efficace car autonome : il ne nécessite pas d'autres soft ou autre pour fonctionner ou faire des choses intéressantes.\\
 +''ffmpeg'' ne fonctionne que sur des streams, qu'ils soient audio ou vidéo (ou pour les assembler/fabriquer/modifier...). Pour les images fixes, voir ci dessous ''ImageMagick''.
 +
 Ce chapitre recense qques lignes de commandes qui me sont utiles, mais juste avant, en qques mots comment ça marche : Ce chapitre recense qques lignes de commandes qui me sont utiles, mais juste avant, en qques mots comment ça marche :
  
-==== ligne de commande typique ====+===== ligne de commande typique =====
  
-<code>ffmpeg option_générales option_input -i input options_output output</code>+<code bash>ffmpeg option_générales option_input -i input options_output output</code>
 parmis les options intéressantes, on retrouve : parmis les options intéressantes, on retrouve :
-<code>+<code bash>
 # input, output # input, output
 -r fps      # règle le taux de rafraichissement de la vidéo -r fps      # règle le taux de rafraichissement de la vidéo
Ligne 19: Ligne 21:
 </code> </code>
  
-==== Time lapse ====+===== Extraire une piste audio ===== 
 +On souhaite extraire la piste audio sans l'altérer: 
 +<code bash> 
 +# quel est le format du stream ? 
 +ffmpeg -i <mon_fichier> output.ext 
 +# note : l'extension .ext n'est pas reconnue, mais ffmpeg va afficher le contenu du fichier, ex : 
 +#  ... 
 +#  Duration: 00:06:26.45, start: 0.000000, bitrate: 153 kb/s 
 +#  Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 480x360 [SAR 1:1 DAR 4:3], 25 kb/s, 25 fps, 25 tbr, 90k tbn (default) 
 +#    Metadata: 
 +#      creation_time   : 2015-09-14T10:01:24.000000Z 
 +#  ... 
 +#  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default) 
 +#  ... 
 +# Le stream 0:1 correspond donc à notre audio, et le format est aac / mp4 
 + 
 +# Extraire le stream audio  
 +ffmpeg -i <mon_fichier> -map 0:1 -acodec copy <monFichierAudio.mp4> 
 + 
 +# -acodec codec       force audio codec ('copy' to copy stream) 
 +</code> 
 + 
 +===== Time lapse =====
  
 Mon activité (astro)photographique m'a amené à effectuer des timelapse. Ne voulant pas utiliser l'outil intégré àl'appareil car je souhaite conserver le format raw, je dois maintenant me retrousser les manches pour ré-assembler les photos en vidéo... Mon activité (astro)photographique m'a amené à effectuer des timelapse. Ne voulant pas utiliser l'outil intégré àl'appareil car je souhaite conserver le format raw, je dois maintenant me retrousser les manches pour ré-assembler les photos en vidéo...
  
-=== Préparation ===+==== Préparation ====
  
 A l'aide de son logiciel de développement de raw favori, on exporte l'ensemble des photos des la vidéos dans un dossier ''D:\temp'' et en prenant soin de les renommer ''img-0001.jpg''. Il est **important** de commencer la numérotation à ''0001''. A l'aide de son logiciel de développement de raw favori, on exporte l'ensemble des photos des la vidéos dans un dossier ''D:\temp'' et en prenant soin de les renommer ''img-0001.jpg''. Il est **important** de commencer la numérotation à ''0001''.
  
-=== Mes lignes de commandes ===+==== Mes lignes de commandes ====
  
-<code>+<code bash>
 # vidéo en HD pour regarder chez soi # vidéo en HD pour regarder chez soi
-D:\Applis\ffmpeg\bin\ffmpeg -r 24 -i D:\temp\img-%04d.jpg -c:v libx264 -b:v 8M -r 24 -s 1280x720 D:\temp\out.mkv+D:\Applis\ffmpeg\bin\ffmpeg -r 24 -i D:\temp\img-%04d.jpg -c:v libx264 -b:v 8M -s 1280x720 D:\temp\out.mkv
  
 # vidéo en HD pour le web (chrome - webm/VP8) # vidéo en HD pour le web (chrome - webm/VP8)
-D:\Applis\ffmpeg\bin\ffmpeg -r 24 -i D:\temp\img-%04d.jpg -c:v libvpx -b:v 8M -r 24 -s 1280x720 D:\temp\out.webm+D:\Applis\ffmpeg\bin\ffmpeg -r 24 -i D:\temp\img-%04d.jpg -c:v libvpx -b:v 8M -s 1280x720 D:\temp\out.webm
  
 # vidéo en HD pour le web (IE - mp4/h264) # vidéo en HD pour le web (IE - mp4/h264)
-D:\Applis\ffmpeg\bin\ffmpeg -r 24 -i D:\temp\img-%04d.jpg -c:v h264 -b:v 8M -r 24 -s 1280x720 D:\temp\out.mp4+D:\Applis\ffmpeg\bin\ffmpeg -r 24 -i D:\temp\img-%04d.jpg -c:v h264 -b:v 8M -s 1280x720 D:\temp\out.mp4 
 + 
 +# vidéo en SD pour le web (IE - mp4/h264) 
 +D:\Applis\ffmpeg\bin\ffmpeg -r 24 -i D:\temp\img-%04d.jpg -c:v h264 -b:v 2M -r 24 -s 640x360 D:\temp\out.mp4
 </code> </code>
 +
 +===== Filtres vidéos =====
 +On peut traiter la qualité d'image, par exemple pour compenser une exposition. Cela peut être fait dans le cas d'un timelapse, ou d'une conversion de format d'une vidéo.
 +
 +Les filtres sont invoqués avec l'option ''-vf''. On peut en ajouter plusieurs ''-vf "filtre1, fitre2"''.
 +
 +Quelques filtres que j'ai utilisés:
 +  * ''[{https://ffmpeg.org/ffmpeg-filters.html#exposure|exposure]]'' corriger l'exposition de chaque image en EV
 +  * ''[[https://ffmpeg.org/ffmpeg-filters.html#eq|eq]]'' pour gérer brightness, contrast... mais je n'ai pas vu de réglage auto
 +  * ''[[http://www.ffmpeg.org/ffmpeg-filters.html#histeq|histeq]]'' applique une correction d'histogramme
 +  * ''hflip'' applique une inversion horizontal
 +
 +<code bash>
 +# Exemples
 +
 +# correction d'exposition +1,5 EV
 +ffmpeg  -r 24 -i folder/image%08d.jpg -c:v libx264 -b:v 8M -s 1280x720 -vf "exposure=1.5" out.mkv
 +
 +# correction d'expo + hflip
 +ffmpeg  -r 24 -i folder/image%08d.jpg -c:v libx264 -b:v 8M -s 1280x720 -vf "exposure=1.5, hflip" out.mkv
 +
 +</code>
 +
 +===== ImageMagick = Image fixe =====
 +
 +Cet outil, utilisable également en ligne de commande peut servir à la **conversion** de format d'image, au traitement d'image comme le resize, ou encore pour effectuer des transformations (contraste, luminosité, ...).
 +
 +[[https://imagemagick.org/script/magick.php|Docs officielles avec les options et comment les utiliser]] et [[https://imagemagick.org/script/examples.php|exemples de résultats d'algorithme]]
 +
 +==== Exemples de commandes ====
 +<code bash>
 +# Structure typique d'une commande
 +magick fichier_source -option <paramètre de l option - facultatif> fichier_sortie
 +
 +# Conversion de format d'image
 +magick bateau.png -quality 95 bateau.jpeg
 +# quality permet de modifier la qualité de l'encodage avec perte de jpeg [0, 100] ou de png [0, 4]
 +</code>
 +
 +<code bash>
 +# Appliquer un traitement 
 +# AUTO-LEVEL : comme les niveaux de gimp mais en automatique à partir des valeurs min et max de l'image
 +magick bateau_sombre.jpeg -auto-level joli_bateau.jpeg
 +
 +# GAMMA : une valeur > 1 éclaircit l'image, < 1 l'assombrit
 +magick bateau_sombre.jpeg -gamma 1.25 bateau_clair.jpeg
 +
 +# BRIGHTNESS : peut éclaircir l'image, peut être combiné avec une modif de contraste (-100, +100): brightness{xcontrast}
 +magick bateau_brut.jpeg -brightness-contrast 25x33 bateau_retouche.jpeg
 +
 +# CLAHE : Contrast limited adaptive histogram equalization
 +# widthxheight{%}+number-bins+clip-limit
 +# https://imagemagick.org/script/command-line-options.php#clahe
 +magick bateau_moche.jpeg -clahe 50x50%+128+2.5 bateau_chouette.jpeg
 +
 +# On peut combiner plusieurs effets :
 +magick bateau_brut.jpeg -auto-level -gamma 1.5 super_bateau.jpeg
 +
 +</code>
 +
 +==== Traitement par lot de multiples images ====
 +
 +Note, bien qu'on puisse utiliser ''magick'' avec plusieurs images et les combiner pour faire des gif, nous nous intéressons ici à la réalisation d'un traitement similaire sur plusieurs images (par un exemple un lot de 100 images).
 +
 +L'outil ''mogrify'' (fourni avec magick) permet d'effectuer tout pareil que ''magick'' mais en écrasant le fichier d'origine... ou vers un dossier choisi ave c''-path''
 +<code bash>
 +# dans un dossier ne contenant que des image_001.jpg à image_100.jpg et un dossier out/
 +mogrify -path out/ -auto-level *.jpeg
 +</code> 
 +
ffmpeg.1384168610.txt.gz · Dernière modification: 2018/10/13 20:32 (modification externe)