le script plus haut ne sert à rien, c’est juste un bout de code que je serais amené à utiliser bientôt :
au lieu du echo final, je le passe en argument pour ffmpeg, afin de faire de toutes les images d’un dossier particulier un film.
une syntaxe précise existe, mais qui ne fonctionne apparemment pas très bien. Et surtout, que je ne comprends pas du tout. Donc plutôt que de la reprendre, j’écris une routine qui devrait faire la même chose.
En l’occurence, la syntaxe que je souhaites éviter c’est
ffmpeg -f image2 -i image%d.jpg ./film.mpg
car image%d.jpg, même si je sais bien ce que ça doit donner (image1.jpg, image2.jpg), je n’ai aucune info sur son fonctionnement : pas dans la doc ffmpeg, j’en conclus que c’est une syntaxe de shell… Mais là encore, rien n’est précisé, donc je pense que ça viens de bash. Je ne sais pas par exemple si ça peut prendre un nombre illimité, ou plutôt non définis d’image, ou si ça trie correctement les images. Si j’en ai 20 une fois, 300 l’autre, j’aimerais que ça marche quand même. Et là, je ne sais pas si image%03d.jpg fonctionne tout autant pour les 20, etc… Enfin bref :
Pour résumer, je me construit mon argument “manuellement”, pour ne pas avoir de mauvaise surprise, et pour comprendre ce qui se passe. Et parce que je pense que la commande en question ne peut pas fonctionner, ou alors il me manque des bouts de syntaxe et de doc.
là en tout cas, j’ai
./test: 14: 0=1: not found
./test: 14: =image0.jpg : not found
i = 0
./test: 14: 0=1: not found
var =
en sortie.
donc $i=$(($i+1)) ne fonctionne pas… ni $i=‘expr $i + 1’, ni (($i++))…
Et ce qui me frustre, c’est que dans un autre script, j’ai utilisé la syntaxe $i=$(($i+1)), sans aucun problème ! alors là, je ne comprends rien.
Enfin, ce matin ça faisait quelques heures que je travaillais dessus, j’en avais vraiment assez et j’étais fatigué, mais je vais continuer de chercher.
Edit : cette syntaxe semble fonctionner :
[code]#!/bin/zsh
#script de test
cnt=$(ls -cr ./ | grep .jpg | tr -d ‘[a-z+.]’ | tail -n 1)
i=0
var=""
while [ “$i” -ne “$cnt” ]
do
set $i $i+1
set $var "${var}image${i}.jpg "
echo "i = ${i}"
echo "var = ${var}"
done
echo $var
exit 0[/code]
enfin, fonctionner… il n’y a pas d’erreur, ce n’est pas pour autant qu’elle fonctionne. Voici la sortie :
i = 0
var =
i = 0
var =
i = 0
var =
i = 0
var =
i = 0
var =
i = 0
var =
enfin.
si j’écris #!/bin/sh à la première ligne, il faut que j’utilise la syntaxe de sh, non ? pour les questions de compatibilités évoquées plus haut, autant que j’abandonne le zsh pour le script, et que je l’écrive avec une syntaxe courante…
sinon, la syntaxe
ffmpeg -f image2 -i ./image[0-$cnt].jpg ./film.mpg ne pourrait-elle pas avantageusement remplacer toute cette débauche d’efforts ? (où $cnt désignerait le nombre max d’image, et les images ayant été nommées avec une convention qui vas bien…)