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 04-11-2013 00:46:37

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 27-09-2012
Site Web

bash: forcer le type

J'ai 250 images png qui forment une séquence fabriqué avec Blender ( de 0001.png à 0250.png)
à l'aide de FFmpeg je peux la convertir en vidéo:

 ffmpeg -i %04d.png  -c:v:0 libvpx -crf 10 -vb 12M -c:a copy   test.webm



La séquence dure 10 secondes mais j'aimerai la mettre en boucle, en répétant les 10 secondes et en inversant l'ordre des images. L'image 0249.png serai dupliqué en 0251.png, la 0248 en 0252.png ainsi de suite.

Kdenlive et Pitivi ne me permettent pas de faire cela du coup, je pensais m'en sortir facilement avec un petit bash:

#!/bin/sh
for file in *.png
do
  nom="${file%%.*}";
  number=$(((($nom-250)*(-1))+250));
  echo "cp $file ./0$number.png";
done



Mais au bout de la huitième image, j'obtiens:


cp 0001.png ./0499.png
cp 0002.png ./0498.png
cp 0003.png ./0497.png
cp 0004.png ./0496.png
cp 0005.png ./0495.png
cp 0006.png ./0494.png
cp 0007.png ./0493.png
./reverse.sh: 5: ./reverse.sh: arithmetic expression: expecting ')': "((0008-250)*(-1))+250"


En fait 0008 est interprété comme un chiffre hexadecimal, et le script ne sais plus quoi faire.
Du coup en suivant, les instructions trouvé ici:
http://stackoverflow.com/questions/1051 … -eof-008-1
J'essaye de forcer le script à travailler en base 10:

...
number=$((((10#$nom-250)*(-1))+250));
...



Mais en fait ça ne marche pas mieux parce que la variable $nom est considéré comme une chaîne et pas comme un chiffre.

Du coup j'arrive à ma question: Comment convertir une chaîne (0008) en chiffre .
Je n'arrive pas à forcer le type de la variable dans bash, je m'en remet à votre sagesse smile
Et si on trouve une solution, je posterai ici ma séquence Blender.
Merci
Kao

Hors ligne

#2 04-11-2013 01:17:44

david96
Invité

Re : bash: forcer le type

Ça va être chaud, car Les variables Bash ne sont pas typées
Ceci dit, tu peux les déclarer en entier, type int avec :

declare -i variable=10008

#3 04-11-2013 11:42:39

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 27-09-2012
Site Web

Re : bash: forcer le type

Tu as raison, je n'ai pas trouvé en bash, du coup, je suis passé par python smile :

#!/usr/bin/python
import glob,os,cgi
listefichier = glob.glob('*.png')
listefichier.sort()
for nomfichier in listefichier :
  num = '.'.join(nomfichier.split('.')[:-1])
  destination = (int(num) - 250)*(-1)+250
  os.system("cp {}  ./0{}.png".format(nomfichier, destination))
 


Et voilà le résultat
http://www.youtube.com/watch?v=jmbx5ayr-QY
C'est basé sur le travail de Brandon Cuellar pour la série Motorcity:
http://brandoncuellar.blogspot.com.br/2 … rcity.html
Je n'irai pas plus loin pour les textures, je préfère la modélisation smile

Edit rendu image: http://3.bp.blogspot.com/--hyK_s1vps4/U … 0/0131.png

Hors ligne

Pied de page des forums