#1 Le 07/05/2020, à 08:09
- bergeronnette
[résolu] Inscire en masse le temps sur des images
Bonjour,
avec kino, j'ai réussi à extraire les images d'une vidéo sous le format chronophotographie_000001.jpg.
Je voudrais savoir comment mettre le temps sur chaque image.
Pour les quatre première, j'ai tapé ceci
convert -fill white -pointsize 26 -annotate +10+26 'Temps 0 ms' chronophotographie_000001.jpg image0.jpg
convert -fill white -pointsize 26 -annotate +10+26 'Temps 33 ms' chronophotographie_000002.jpg image33.jpg
convert -fill white -pointsize 26 -annotate +10+26 'Temps 67 ms' chronophotographie_000003.jpg image67.jpg
convert -fill white -pointsize 26 -annotate +10+26 'Temps 100 ms' chronophotographie_000004.jpg image100.jpg
Comment est-ce possible avec mogrify ?
Merci
Dernière modification par bergeronnette (Le 07/05/2020, à 13:30)
Hors ligne
#2 Le 07/05/2020, à 09:29
- marcus68
Re : [résolu] Inscire en masse le temps sur des images
bonjour,
en gros :
convert convertit une image ou plusieurs image en une autre
mogrify modifie une image sans en créer une nouvelle
donc pour utiliser mogrify, il faut enlever l'image de destination, exemple avec ta première ligne :
mogrify -fill white -pointsize 26 -annotate +10+26 'Temps 0 ms' chronophotographie_000001.jpg
mais je suppose que ta question porte plutôt sur l'automatisation de la tâche ? si oui je pense que tu peux partir sur une boucle for avec une variable qui s'incrémente à chaque boucle
Hors ligne
#3 Le 07/05/2020, à 10:03
- bergeronnette
Re : [résolu] Inscire en masse le temps sur des images
mais je suppose que ta question porte plutôt sur l'automatisation de la tâche ? si oui je pense que tu peux partir sur une boucle for avec une variable qui s'incrémente à chaque boucle
C'est ça automatiser mais pour la boucle, je ne sais pas programmer ni adapter les codes que je trouve en fonction de mes recherches.
#!/bin/bash
temps=0
for f in *.jpg;
do convert -fill white -pointsize 26 -annotate +10+26 'Temps $temps ms' $f $f
temps=temps+33;
done
Avec ça j'arrive à afficher littéralement Temps $temps ms sur toute les images mais la variable $temps n'est pas remplacé par des valeur
Dernière modification par bergeronnette (Le 07/05/2020, à 10:21)
Hors ligne
#4 Le 07/05/2020, à 10:40
- pingouinux
Re : [résolu] Inscire en masse le temps sur des images
Bonjour,
Il faut déjà remplacer
... 'Temps $temps ms' ...
temps=temps+33;
par
... "Temps $temps ms" ...
((temps+=33))
Hors ligne
#5 Le 07/05/2020, à 11:37
- marcus68
Re : [résolu] Inscire en masse le temps sur des images
C'est pas mal comme début,
Il faut remplacer les ' par des " autour du texte qui contient la variable pour qu'elle soit interprété
Dernière modification par marcus68 (Le 07/05/2020, à 11:37)
Hors ligne
#6 Le 07/05/2020, à 11:39
- bergeronnette
Re : [résolu] Inscire en masse le temps sur des images
Merci,
cela fonctionne mieux.
J'ai pris le modèle ici
Pour ajouter le temps au nom de l'image, dois-je m'inspirer de ce code (même site)
$ for f in *.png; do convert $f $(echo $f | cut -d. -f1).jpg; done
Hors ligne
#7 Le 07/05/2020, à 11:48
- marcus68
Re : [résolu] Inscire en masse le temps sur des images
Pour mettre le temps en ms dans ton nom de fichier, tu peux te servir de ta variable dans la boucle.
Ton $f à la fin de convert désigne l'image de sortie,
Tu peux par exemple mettre à la place "image-$temps.jpg"
Les images seront nommé :
image-33.jpg
Image-66.jpg
image-99.jpg
image-132.jpg
...
Hors ligne
#8 Le 07/05/2020, à 12:36
- pingouinux
Re : [résolu] Inscire en masse le temps sur des images
Ou alors, suivant le résultat que tu souhaites :
#!/bin/bash
temps=0
for f in *.jpg;
do
dest="${f/.jpg}-$temps.jpg"
echo convert -fill white -pointsize 26 -annotate +10+26 "Temps $temps ms" "$f" "$dest"
((temps+=33))
done
Tu enlèves le echo si c'est bon.
Correction (suite à la remarque de kamaris en #10)
Il vaut mieux faire ainsi (traite le cas où le nom d'un fichier contiendrait plusieurs fois la chaîne .jpg) :
#!/bin/bash
temps=0
for f in *.jpg;
do
dest="${f%.jpg}-$temps.jpg"
echo convert -fill white -pointsize 26 -annotate +10+26 "Temps $temps ms" "$f" "$dest"
((temps+=33))
done
Dernière modification par pingouinux (Le 08/05/2020, à 08:59)
Hors ligne
#9 Le 07/05/2020, à 13:27
- bergeronnette
Re : [résolu] Inscire en masse le temps sur des images
Je viens de tester avec vos 2 propositions et cela fonctionne.
Je viens de comprendre que la commande f/.jpg supprime l'extension car $f c'est tout le nom + l’extension.
C'est pour ça que j'avais image.jpg.33.jpg par exemple.
Merci à vous, je garde les scripts dans mon pense-bête.
Dernière modification par bergeronnette (Le 07/05/2020, à 13:30)
Hors ligne
#10 Le 08/05/2020, à 00:50
- kamaris
Re : [résolu] Inscire en masse le temps sur des images
Je viens de comprendre que la commande f/.jpg supprime l'extension car $f c'est tout le nom + l’extension.
Oui et non : ${f/.jpg} supprime la première occurrence de .jpg dans $f.
Si il se trouve qu'il n'y a qu'une occurrence à la fin de $f, qui est donc l'extension, alors ça la supprime effectivement.
Mais si tu as par exemple pour $f le résultat erroné dont tu parlais (image.jpg.33.jpg), alors tu auras :
$ echo ${f/.jpg}
image.33.jpg
Par ailleurs, avec la première méthode, on obtient :
$ echo $f | cut -d. -f1
image
Donc la bonne manière de faire est plutôt :
$ echo ${f%.jpg}
image.jpg.33
Hors ligne
#11 Le 08/05/2020, à 08:55
- pingouinux
Re : [résolu] Inscire en masse le temps sur des images
@kamaris #10 :
Tu as raison, et je corrige mon message #8 dans ce sens.
Hors ligne
#12 Le 08/05/2020, à 14:01
- bergeronnette
Re : [résolu] Inscire en masse le temps sur des images
Merci pour ces précisions. Je corrige mon fichier avec la remarque.
Hors ligne