Programme python

Bonjour,
J’ai un script fait en python trés simple, je ne l’ai pas ecris moi meme, seulement imaginé et légérement modifié,
j’aimerai y integré d’autre fonction, le choix du format d’encodage par exemple (la taille de la vidéo), cela par une liste déroulante ou des chekbox. mais c’est pas simple du tout. car je ne m’y connait pas en python. il me suffit de déplacer une ligne pour que ca ne marche plus.
Le script peut intéresser les personnes qui utilisent cinelerra, apres le rendu en deux fichier m2v pour la vidéo et ac3 pour l’audio, le multiplexage est neccessaire.

[quote]#!/usr/bin/python

-- coding: utf-8 --

import Tkinter
import tkFileDialog

#from Tkinter import *
#master = Tk()
#Label(text=“Texte de la fenetre avec une largeur”, width=50).pack()

class Main(Tkinter.Tk):

def init(self,):
Tkinter.Tk.init(self)
self._videoPath=".“
self._audioPath=”.“
self._finalPath=”."

self.labelVideo=Tkinter.Label(self)
self.labelAudio=Tkinter.Label(self)
self.labelFinal=Tkinter.Label(self)

self.labelTexte1=Tkinter.Label(self,text=" \nLe script vous permet le multiplexage \n dune vidéo m2v et de l’audio ac3 ou mp3\n" ,width = 75)

self.entry=Tkinter.Entry(self,text=“texte”)

self.buttonVideo=Tkinter.Button(self,text=“Choisir la vidéo”)
self.buttonVideo=Tkinter.Button(self,text=“Choisir la vidéo”)
self.buttonAudio=Tkinter.Button(self,text=“Choisir l’audio”)
self.buttonFinal=Tkinter.Button(self,text=“Choisir le fichier final”)
self.buttonMux=Tkinter.Button(self,text=“Lancer le Mux”)

self.buttonVideo.bind(’’,self.videoPath)
self.buttonAudio.bind(’’,self.audioPath)
self.buttonFinal.bind(’’,self.finalPath)
self.buttonMux.bind(’’,self.mux)

self.labelTexte1.pack(fill=‘x’)
self.buttonVideo.pack(fill=‘x’)
self.labelVideo.pack(fill=‘x’)
self.buttonAudio.pack(fill=‘x’)

self.labelAudio.pack(fill=‘x’)
self.buttonFinal.pack(fill=‘x’)

self.entry.pack(fill=‘x’)

self.labelFinal.pack(fill=‘x’)
self.buttonMux.pack(fill=‘x’)

def videoPath(self,event):
self._videoPath=tkFileDialog.askopenfilename(parent=self,initialdir="$HOME",title=‘Choisissez la video’,filetypes=[(‘Fichiers video’, ‘*.m2v’)])
self.labelVideo.setitem(‘text’,self._videoPath)

print self._videoPath

def audioPath(self,event):
self._audioPath=tkFileDialog.askopenfilename(parent=self,initialdir="$HOME",title=“Choisissez l’audio”,filetypes=[(‘Fichiers audio’, “*.mp3 , *.ac3”)])
self.labelAudio.setitem(‘text’,self._audioPath)

print self._audioPath

def finalPath(self,event):
self._finalPath=tkFileDialog.asksaveasfilename(parent=self,initialdir="$HOME",title=“Choisissez le fichier final”)
self.labelFinal.setitem(‘text’,self._finalPath)

print self._finalPath

def mux(self,event):
import subprocess
args=[‘ffmpeg’,’-aspect’,‘16:9’,’-i’,self._audioPath,’-i’,self._videoPath,’-f’,‘avi’,’-vtag’,‘xvid’,’-vcodec’,‘mpeg4’,’-acodec’,‘copy’,’-sameq’,’-s’,‘1440*1080’,self._finalPath+’.avi’]

try:
subprocess.Popen(args)
except Exception,e:
print “Trying to launch mplex with args : %s” % args
print e

if name==“main”:

root = Main()
root.title(‘Multiplexage m2v avec de l’ ac3 ou mp3’)

root.mainloop()[/quote]
Dans cette ligne c’est bien la taille de la vidéo que je veux changer avec une liste déroulante et les 3 choix possible. 720 / 1280 / 1400

args=[‘ffmpeg’,’-aspect’,‘16:9’,’-i’,self._audioPath,’-i’,self._videoPath,’-f’,‘avi’,’-vtag’,‘xvid’,’-vcodec’,‘mpeg4’,’-acodec’,‘copy’,’-sameq’,’-s’,‘1440*1080’,self._finalPath+’.avi’]

Salut,

C’est très intéressant ton bout de code. Juste une chose toute fois. En Python les espaces en début de ligne sont important (indentation). Ca doit être une mise en page du forum.

Ensuite, si tu as envie de modifier ce script, je peux t’aider. Python est un langage ultra simple a utiliser. Ca m’a pris 2h a apprendre les bases (en ayant des bonnes bases en coding quand même). Donc si tu veux te lancer, pas de soucis.

Génial, suis-je prêt, j’en doute, déja l’indentation c’est pas trés flagrant, j’utilise Jedit, Gedit peut aussi faire l’afffaire, on peut utiliser de la coloration, pour du python ou php, je dit php car Jedit me sert a ca.
Voila mes seules connaissances, php, on ira pas bien loin avec ca, mais aprés tout !
J’ai essayer de tricher avec “Glade” ou “Eric python” et encore “Gambas2”, mais je m’y prend mal.
Faire glisser des boutons ca va, leur donner une fonction, c’est autre chose.
Merci de ton aide.
Impatient, on commence par quoi !
Je devrait déja commencer a regler Jedit pour colorer l’indentation.

Salut,

Quand tu poste du code sur le forum (et à plus forte raison du Python) utilise les balises “Code” (au lieu des balises “Quote” que tu as utilisé sur ton premier message).
Cela respectera l’indentation initiale.

Cela permet de rendre le code plus lisible à ceux qui le lisent, et surtout c’est indispensable en python : un code python mal indenté ne peut pas fonctionner.

Là pour essayer ton script en faisant un copier-coller, j’ai dû me taper toute l’indentation à la main :wink:

Bonne soirée, à + :smt006

Ok c’est pas pareil et c’est justement mon probleme.

[code]#!/usr/bin/python

-- coding: utf-8 --

import Tkinter
import tkFileDialog

#from Tkinter import *
#master = Tk()
#Label(text=“Texte de la fenetre avec une largeur”, width=50).pack()

class Main(Tkinter.Tk):

def __init__(self,):
    Tkinter.Tk.__init__(self)
    self._videoPath="."
    self._audioPath="."
    self._finalPath="."
    
    self.labelVideo=Tkinter.Label(self)
    self.labelAudio=Tkinter.Label(self)
    self.labelFinal=Tkinter.Label(self)

    
self.labelTexte1=Tkinter.Label(self,text=" \nLe script vous permet le multiplexage \n dune vidéo m2v et de l'audio ac3 ou mp3\n" ,width = 75)

self.entry=Tkinter.Entry(self,text=“texte”)

self.buttonVideo=Tkinter.Button(self,text="Choisir la vidéo")
    self.buttonVideo=Tkinter.Button(self,text="Choisir la vidéo")
    self.buttonAudio=Tkinter.Button(self,text="Choisir l'audio")
    self.buttonFinal=Tkinter.Button(self,text="Choisir le fichier final")
    self.buttonMux=Tkinter.Button(self,text="Lancer le Mux")
    
    self.buttonVideo.bind('<Button-1>',self.videoPath)
    self.buttonAudio.bind('<Button-1>',self.audioPath)
    self.buttonFinal.bind('<Button-1>',self.finalPath)
    self.buttonMux.bind('<Button-1>',self.mux)
    
 
    self.labelTexte1.pack(fill='x')
    self.buttonVideo.pack(fill='x')
    self.labelVideo.pack(fill='x')
    self.buttonAudio.pack(fill='x')

    self.labelAudio.pack(fill='x')
self.buttonFinal.pack(fill='x')

self.entry.pack(fill=‘x’)

self.labelFinal.pack(fill='x')
    self.buttonMux.pack(fill='x')


def videoPath(self,event):
    self._videoPath=tkFileDialog.askopenfilename(parent=self,initialdir="$HOME",title='Choisissez la video',filetypes=[('Fichiers video', '*.m2v')])
    self.labelVideo.__setitem__('text',self._videoPath)
   # print self._videoPath



    
def audioPath(self,event):
    self._audioPath=tkFileDialog.askopenfilename(parent=self,initialdir="$HOME",title="Choisissez l'audio",filetypes=[('Fichiers audio', "*.mp3 , *.ac3")])
    self.labelAudio.__setitem__('text',self._audioPath)
   # print self._audioPath

    
def finalPath(self,event):
    self._finalPath=tkFileDialog.asksaveasfilename(parent=self,initialdir="$HOME",title="Choisissez le fichier final")
    self.labelFinal.__setitem__('text',self._finalPath)
   # print self._finalPath

def mux(self,event):
    import subprocess
    args=['ffmpeg','-aspect','16:9','-i',self._audioPath,'-i',self._videoPath,'-f','avi','-vtag','xvid','-vcodec','mpeg4','-acodec','copy','-sameq','-s','1280*720',self._finalPath+'.avi']

    try:
        subprocess.Popen(args)
    except Exception,e:
	print "Trying to launch mplex with args : %s" % args
	print e

if name==“main”:

root = Main() 
root.title('Multiplexage m2v avec de l\' ac3 ou mp3')

root.mainloop()

[/code]

Hum, tu as des souci d’indentation…

Enfait, pour l’indentation en python c’pas dificile:

unBlcoc(par exemple un for):
   tesInstructions
   tesInstructions
   unNouveauBloc(par exemple un if):
      nouvellesInstructions
      nouvellesInstructions

C’est comme en C/C++ lorsque tu met des accolade {} pour tes blocs d’instructions, sauf que la, il n’y pas d’accolades, il se base sur l’indentation…

try: subprocess.Popen(args) except Exception,e:
C’est pas bon ça, si tu veux faire ça préfère la forme:

try:
   p = subprocess.Popen(args)
except:
   .... (évnetuellement tu peux utiliser traceback.format_exc et traceback.print_exc)

Deplus, tu devrais regarder la doc de subprocess uhuh :slightly_smiling: