Retourner aux forums || Retourner au forum Programmation.python
Programmation.python : Problème utilisation programmes externes (via shell)
Posté par Olivier Ponchaut () le 17 septembre 2007
0
Bonjour à tous,étant amateur de montage vidéo, il y a quelques temps déjà , j'ai adapté un script shell existant (images2mpeg) pour que la sortie soit un fichier .dv au lieu d'un fichier mpeg.
Maintenant, je cherche à faire une interface graphique pour ce script (en fait l'interface est faite et fonctionne).
En premier lieu, j'ai uniquement lancé mon script à partir de Python par une commande
commands.getstatusoutput('monscript'+paramètres)
et ça fonctionne. Seulement, avec cette méthode, pas moyen de visualiser l'avancement du script (la conversion d'image en fichier .dv ça prend vite beaucoup de temps !).
Donc, je cherche à refaire le script shell dans python ... et là, j'ai un problème.
Dans le script shell, il y a une boucle while principale dans laquelle les images sont mises en forme (avec ImageMagick) et transformée en flux d'image ppm (ou pnm ?). La sortie de cette boucle est envoyée dans un pipe vers "l'encodeur" dv (encodedv de libdv).
En code ça donne plus ou moins ceci (en simplifié)
while (condition de la boucle)
do
convert $images :ppm - | cat
done | encodedv [options] > [fichier de sortie]
et donc, la sortie de la boucle while est directement envoyée en entrée (par le pipe) dans encodedv.
Je voudrais donc remplacer la boucle while du script shell par une boucle python et envoyer le résultat dans encodedv par un pipe ...
J'ai essayé le code suivant (python cette fois) :
from subprocess import *
image=[image1,image2,image3]
for img in image :
i=0
while i < 51 :
p1=Popen('convert '+img+' :ppm - | cat', shell=True, stdout=PIPE)
print "Image encodée : "+str(i)
p2=Popen('encodedv [options] > [fichier de sortie]', shell=True, stdin=p1.stdout, stdout=PIPE)
(Attention, il manque l'indentation ! J'ai pas trouvé la balise pour les espaces)
Voilà, mais le problème est que ça ne fonctionne pas !
Si je passe par un fichier intermédiaire ça fonctionne, mais le fichier intermédaire est très volumineux (89 Mo pour seulement 75 itérations) et environ 8 x plus volumineux que le fichier vidéo (.dv) généré en sortie
Quelqu'un a une idée ???
Merci
PS : Pour ceux que ça intéresserait, je compte diffuser le tout prochainement sous licence GPL (V2 ou 3 ... pas encore décidé), même s'il s'agit d'une petite appli sans grandes prétentions.
--
Marmotte
> Lire le message (2 commentaires, moyenne: 1).
Marmotte
Correction
Posté par
Olivier Ponchaut () le 17/09/2007 à 18:51. (lien). Évalué à 1.
Bon, vous aurez corrigé ... il manque l'incrémentation de i dans la boucle while du code python ...
désolé
--
Marmotte
Marmotte
-
[^]Re: Correction
Posté par Sebastien Binet () le 26/09/2007 à 21:58. (lien). Évalué à 1.y a un truc bien sympa dans python pour faire ca:
for idx,obj in enumerate(some_list): assert( some_list[idx] == obj )
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.python



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.