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 :
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
On souhaite extraire la piste audio sans l'altérer:
# 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)
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…
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
.
# 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
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 EVeq
pour gérer brightness, contrast… mais je n'ai pas vu de réglage autohisteq
applique une correction d'histogrammehflip
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
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é, …).
Docs officielles avec les options et comment les utiliser et exemples de résultats d'algorithme
# 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]
# 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
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