Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

marcus68 a écrit :

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

bergeronnette a écrit :

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