====== FFMPEG & IMAGEMAGICK ======
===== 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.\\
''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 :
===== ligne de commande typique =====
ffmpeg option_générales option_input -i input options_output output
parmis les options intéressantes, on retrouve :
# input, output
-r fps # règle le taux de rafraichissement de la vidéo
-s 1280x720 # règle la définition de la vidéo
# output
-c:v h264 # règle le codec de la vidéo de sortie
-b:v 8M # règle le bitrate de la vidéo de sortie
===== Extraire une piste audio =====
On souhaite extraire la piste audio sans l'altérer:
# quel est le format du stream ?
ffmpeg -i 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 -map 0:1 -acodec copy
# -acodec codec force audio codec ('copy' to copy stream)
===== 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...
==== 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''.
==== Mes lignes de commandes ====
# 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 -s 1280x720 D:\temp\out.mkv
# 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 -s 1280x720 D:\temp\out.webm
# 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 -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
===== 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
# 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
===== 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 ====
# Structure typique d'une commande
magick fichier_source -option 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]
# 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
==== 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''
# dans un dossier ne contenant que des image_001.jpg à image_100.jpg et un dossier out/
mogrify -path out/ -auto-level *.jpeg