logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 12-06-2015 08:01:32

Anonyme
Invité

Multiplier une seule image par temps de fois

Bonjour,

J'aurais une demande assez spéciale.

J'ai une image (une seule) jpg ou png dans un dossier. Je voudrais par un script et par un clic-droit dans le dossier sur cette image la multiplier, pour avoir un total de 25 images identiques.
Bien sûr, toutes ces photos identiques devront se trouver dans ce dossier.
Si cette image se nomme laphoto.jpg les suivantes seraient laphoto-0001.jpg laphoto-0002.jpg etc


Par la suite il faudra que j'utilise une commande dans ce même script mais que je n'ai pas encore testée :

http://www.lemondedustopmotion.fr/news/ … vec_ffmpeg


pour sortir une vidéo de toutes ces images identiques puis la multiplexer avec une bande audio.


Blender peut le faire mais c'est plus fastidieux car je n'ai qu'une seule image.


Merci par avance pour l'aide.


EDIT: Je ne veux pas utiliser Youtube mp3 tongue

Dernière modification par Anonyme (12-06-2015 08:05:32)

#2 12-06-2015 09:21:46

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : Multiplier une seule image par temps de fois

Plop,

#!/bin/sh
image=$1
base=$(basename "$image" $extension)
nbcopies=25
extension=$(echo "$image" |sed 's/^.*\(\.[^\.]*\)$/\1/')
for i in $(seq 25)
do
  cp "$image" "$base-"$(printf "%04d" "$i")"$extension"
done



./nomduscript nom-de-limage.jpg



Que l'on peut bien sûr donner comme script à son explorateur de fichiers préféré.


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#3 12-06-2015 09:27:38

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : Multiplier une seule image par temps de fois

Et si tu veux que le script fasse la conversion en vidéo à la volée :

#!/bin/sh
image=$1
nbcopies=25
extension=$(echo "$image"|sed 's/^.*\(\.[^\.]*\)$/\1/')
base=$(basename "$image" $extension)
for i in $(seq 25)
do
  cp "$image" "$base-"$(printf "%04d" "$i")"$extension"
done

avconv -f image2 -i "$base-%04d$extension" -r 24 -c:v mpeg4 -b 15000k "$base.mp4"
 



./nomduscript nom-de-limage.jpg


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#4 12-06-2015 09:39:16

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : Multiplier une seule image par temps de fois

Si tu ne veux que la conversion vidéo, la regexp est un peu plus louche pour que ça marche que tu fasses le clic droit sur l'img d'origine ou sur une des copies:

#!/bin/sh
image=$1
extension=$(echo "$image"|sed 's/^.*\(\.[^\.]*\)$/\1/')
extensionlouche=$(echo "$image"|sed 's/^.*\(\-?[0-9]*\.[^\.]*\)$/\1/')
base=$(basename "$image" $extensionlouche)

avconv -f image2 -i "$base-%04d$extension" -r 24 -c:v mpeg4 -b 15000k "$base.mp4"
 



./nomduscript nom-de-limage.jpg


ou

./nomduscript nom-de-limage-0123.jpg


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#5 12-06-2015 09:58:34

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : Multiplier une seule image par temps de fois

Et si tu veux rajouter l'audio, la difficulté est de trouver le fichier en question. On peut faire plusieurs suppositions. Soit que tu sélectionnes un fichier image et un fichier son. Soit que le fichier audio a même nom que le fichier image…

#!/bin/sh
for i in $@
do
  if file --mime-type $i | grep audio
  then audio=$i
  else image=$i
  fi
done

extension=$(echo "$image"|sed 's/^.*\(\.[^\.]*\)$/\1/')
extensionlouche=$(echo "$image"|sed 's/^.*\(\-?[0-9]*\.[^\.]*\)$/\1/')
base=$(basename "$image" $extensionlouche)

avconv -f image2 -i "$base-%04d$extension" -i"$audio" -map 1:0 -r 24 -c:a copy -c:v mpeg4 -b 15000k "$base.mp4"
 



./nomduscript nom-de-limage.truc nom-de-la-bande-son.machin


ou

./nomduscript nom-de-limage-0123.truc nom-de-la-bande-son.machin



Je n'ai pas testé les derniers scripts, mais ça devrait le faire, quitte à modifier quelques trucs smile


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#6 12-06-2015 10:36:40

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : Multiplier une seule image par temps de fois

Belle réponse étagée.  big_smile cool

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#7 12-06-2015 10:58:03

Anonyme
Invité

Re : Multiplier une seule image par temps de fois

Bojour à vous,

Oups !!! Beaucoup de lecture.  big_smile
Je m'en vais essayer tout cela et faire de suite des retours.
Merci le roi du script wink

#8 12-06-2015 11:08:48

Anonyme
Invité

Re : Multiplier une seule image par temps de fois

captnfab a écrit :

Et si tu veux que le script fasse la conversion en vidéo à la volée :

#!/bin/sh
image=$1
nbcopies=25
extension=$(echo "$image"|sed 's/^.*(\.[^\.]*)$/\1/')
base=$(basename "$image" $extension)
for i in $(seq 25)
do
  cp "$image" "$base-"$(printf "%04d" "$i")"$extension"
done

avconv -f image2 -i "$base-%04d$extension" -r 24 -c:v mpeg4 -b 15000k "$base.mp4"
 



./nomduscript nom-de-limage.jpg




Je viens de tester celui cité.
J'ai bien 25 images qui se génèrent smile

Info : image01.png-0004 etc (là par contre l'extention est bizarre)

Je sors une vidéo de 0 octet peut-être à cause de ces fameuses extensions hmm


EDIT: D'ou ton script extension louche peut-être. Je teste wink

Dernière modification par Anonyme (12-06-2015 11:20:53)

#9 12-06-2015 11:23:36

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : Multiplier une seule image par temps de fois

L'extension est bizarre ? Ça donne quoi ?

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#10 12-06-2015 11:31:01

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : Multiplier une seule image par temps de fois

Hum, ok, ce sont les parenthèses qui devraient être échappées. C'est bizarre, j'avais corrigé pourtant chez moi… \( et \)

J'ai corrigé ça et une autre petite erreur: le ?\- au lieu du \-?

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#11 12-06-2015 11:37:11

Anonyme
Invité

Re : Multiplier une seule image par temps de fois

Voilà,

une image nommé image.png dans un dossier

Je lance celui-ci :


#!/bin/sh
image=$1
nbcopies=24
extension=$(echo "$image"|sed 's/^.*(\.[^\.]*)$/\1/')
base=$(basename "$image" $extension)
for i in $(seq 24)
do
  cp "$image" "$base-"$(printf "%04d" "$i")"$extension"
done
 



Je me retrouve avec :

l'image d'origine image.png et 24 images nommées image.png-0001 à image.png-0024

A noter que j'ai changé la valeur 25 pour 24

J'aimerai bien  image-0001.png

Dernière modification par Anonyme (12-06-2015 11:38:13)

#12 12-06-2015 11:39:57

Anonyme
Invité

Re : Multiplier une seule image par temps de fois

Mince j'ai pas vu ton dernier post hmm

#13 12-06-2015 11:44:57

Anonyme
Invité

Re : Multiplier une seule image par temps de fois

C'est mieux smile

image.png-0001.png mais ...

image-0001.png ça serait encore mieux smile

#14 12-06-2015 11:49:14

Anonyme
Invité

Re : Multiplier une seule image par temps de fois

C'est bon pour celui-ci. Ne change rien smile


#!/bin/sh
image=$1
nbcopies=25
extension=$(echo "$image"|sed 's/^.*\(\.[^\.]*\)$/\1/')
base=$(basename "$image" $extension)
for i in $(seq 25)
do
  cp "$image" "$base-"$(printf "%04d" "$i")"$extension"
done

avconv -f image2 -i "$base-%04d$extension" -r 24 -c:v mpeg4 -b 15000k "$base.mp4"
 
 




Par contre pour :


avconv -f image2 -i "$base-%04d$extension" -r 24 -c:v mpeg4 -b 15000k "$base.mp4"
 



image2 ça représente quoi ?

C'est déjà magnifique big_smile


EDIT: Pour image2, je viens de m'en rendre compte en le supprimant. C'est l'image.mp4

Dernière modification par Anonyme (12-06-2015 11:55:18)

#15 12-06-2015 11:56:12

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : Multiplier une seule image par temps de fois

C'est le format d'entrée. En l'occurrence, une succession d'image dont le nom correspond à un patern.

man avconv a écrit :

   image2
       Image file demuxer.

       This demuxer reads from a list of image files specified by a pattern.

       The pattern may contain the string "%d" or "%0Nd", which specifies the position of the characters representing a sequential
       number in each filename matched by the pattern. If the form "%d0Nd" is used, the string representing the number in each
       filename is 0-padded and N is the total number of 0-padded digits representing the number. The literal character '%' can be
       specified in the pattern with the string "%%".

       If the pattern contains "%d" or "%0Nd", the first filename of the file list specified by the pattern must contain a number
       inclusively contained between 0 and 4, all the following numbers must be sequential. This limitation may be hopefully
       fixed.

       The pattern may contain a suffix which is used to automatically determine the format of the images contained in the files.

       For example the pattern "img-%03d.bmp" will match a sequence of filenames of the form img-001.bmp, img-002.bmp, ...,
       img-010.bmp, etc.; the pattern "i%%m%%g-%d.jpg" will match a sequence of filenames of the form i%m%g-1.jpg, i%m%g-2.jpg,
       ..., i%m%g-10.jpg, etc.

       The size, the pixel format, and the format of each image must be the same for all the files in the sequence.

       The following example shows how to use avconv for creating a video from the images in the file sequence img-001.jpeg,
       img-002.jpeg, ..., assuming an input framerate of 10 frames per second:

               avconv -i 'img-%03d.jpeg' -r 10 out.mkv

       Note that the pattern must not necessarily contain "%d" or "%0Nd", for example to convert a single image file img.jpeg you
       can employ the command:

               avconv -i img.jpeg img.png


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#16 12-06-2015 12:01:52

Anonyme
Invité

Re : Multiplier une seule image par temps de fois

Bien merci smile

Maintenant, une fois le fichier mp4 généré, supprimer tous le png ?

#17 12-06-2015 12:09:58

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : Multiplier une seule image par temps de fois

#!/bin/sh
image=$1
nbcopies=24
extension=$(echo "$image"|sed 's/^.*\(\.[^\.]*\)$/\1/')
base=$(basename "$image" $extension)
for i in $(seq $nbcopies)
do
  cp "$image" "$base-"$(printf "%04d" "$i")"$extension"
done

avconv -f image2 -i "$base-%04d$extension" -r 24 -c:v mpeg4 -b 15000k "$base.mp4"
 
rm -f "$base-*$extension"
 


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#18 12-06-2015 12:20:15

Anonyme
Invité

Re : Multiplier une seule image par temps de fois

n'efface rien big_smile

#19 12-06-2015 12:25:12

vv222
Administrateur
Lieu : Bretagne
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : Multiplier une seule image par temps de fois

Plutôt que :

extension=$(echo "$image"|sed 's/^.*\(\.[^\.]*\)$/\1/')


Je propose :

extension=".${image##*.}"


 
Pas pour les caractères qu’on économise, sans importance dans un script de cette taille, mais pour éviter ce petit sed particulièrement cryptique wink


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#20 12-06-2015 13:11:22

Anonyme
Invité

Re : Multiplier une seule image par temps de fois

Merci vv222 smile

@captnfab


Par contre le :


rm -f "$base-*$extension"
 



post 17 ne fonctionne pas hmm

Dernière modification par Anonyme (12-06-2015 13:12:01)

#21 12-06-2015 14:05:16

vv222
Administrateur
Lieu : Bretagne
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : Multiplier une seule image par temps de fois

Anonyme a écrit :


rm -f "$base-*$extension"
 



post 17 ne fonctionne pas hmm


Essaye en le remplaçant par :

rm -f "$(dirname "$image")/$base-*$extension"


 
Encore que personnellement je n’incluerais pas cette ligne de cette façon, pour éviter des suppressions inattendues en cas de noms proches (image.png et image-différente.png par exemple).
 
-----
 
Ah non, je viens de comprendre, ce sont les guillemets qui empêchent l’interprétation du caractère spécial '*'.
Cette ligne devrait avoir l’effet voulu :

rm -f "$(dirname "$image")/$base"-*"$extension"


(le dirname est peut-être inutile, je le garderai par précaution pour m’assurer que la suppression ne va pas s’effectuer sous $HOME plutôt quand dans le répertoire contenant $image)

Dernière modification par vv222 (12-06-2015 14:11:56)


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#22 12-06-2015 14:15:04

Anonyme
Invité

Re : Multiplier une seule image par temps de fois

C'est vrai que ça peut-être dangereux.
Ou les nommées avec l'année le mois le jour l'heure les minutes les secondes etc big_smile

J'essaie ton code.

EDIT : ça fonctionne wink

Dernière modification par Anonyme (12-06-2015 14:21:14)

#23 12-06-2015 14:47:52

vv222
Administrateur
Lieu : Bretagne
Distrib. : Debian Sid
(G)UI : sway
Inscription : 18-11-2013
Site Web

Re : Multiplier une seule image par temps de fois

Pour limiter à coup sûr la suppression des fichiers à ceux créés par le script, en reprenant la base proposée par captnfab :

#!/bin/sh
image=$1
nbcopies=24
extension=".${image##*.}"
base=$(basename "$image" $extension)
liste_copies=""
for i in $(seq $nbcopies)
do
  image_copie="$base-$(printf "%04d" "$i")$extension"
  liste_copies="$liste_copies $image_copie"
  cp "$image" "$image_copie"
done

avconv -f image2 -i "$base-%04d$extension" -r 24 -c:v mpeg4 -b 15000k "$base.mp4"
 
for file in $liste_copies
do
  rm -f $(dirname "$image")/$file
done
 

Dernière modification par vv222 (12-06-2015 14:48:16)


Jouer sous Debian ? Facile !

Ceterum censeo Barum esse delendam

Hors ligne

#24 12-06-2015 15:39:09

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian
Noyau : Dur
(G)UI : gui gui, je zuis un doiseau
Inscription : 07-07-2008
Site Web

Re : Multiplier une seule image par temps de fois

@vv222: tu es sûr que ${images##*.} est POSIX ? Si c'est bash-specific, alors il faut changer le #!

Il y a également le problème des dirnames, bien corrigé par vv2222 smile Je considérais que les fichiers étaient dans le répertoire courant, ce qui n'est pas forcément le cas smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.

Hors ligne

#25 12-06-2015 16:38:27

Anonyme
Invité

Re : Multiplier une seule image par temps de fois

Merci à vous deux smile

le script fonctionne bien.
L'encodage aussi ainsi le multiplexage audio/vidéo que j'ai rajouté. Mais je vais laisser tomber l'encodage pour l'instant car ça prend trop de ressources.
Le but premier, c'est de multiplier les images, pour importer tout ça dans Blender.  Mission accompli pour ça.
Donc je commente encodage et rm

Maintenant, mais là je demande peut-être le diable, si j'ai dans ce dossier  une première image1 que je veux multiplier par tant pour avoir par exemple 10 secondes, puis une image2 pour avoir 10 secondes etc, c'est faisable ? Une sorte de diaporama en somme smile

Dernière modification par Anonyme (12-06-2015 16:40:10)

Pied de page des forums