IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Petit soucis de déclaration de variable


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Par défaut Petit soucis de déclaration de variable
    Bonjour,

    Je cherche à écrire un programme avec une interface afin d'incruster des sous-titres dans une vidéo.
    J'ai réaliser une bonne partie du programme, mais je bloque sur un point, surement bête car il s'agit de variable non définie, vous saurez surement me dire d'ou viens le problème.

    Il s'agit d'un programme avec 4 boutons : on sélectionne un fichier master, sont contenu rentre dans la variable master, on sélectionne un fichier sous-titre, son contenu rentre dans la variable fichier_srt, et on clique sur encode, qui envois des commandes à ffmpeg.

    Le dernier bouton est pour cliquer.

    Voici la sortie de la fenetre dos :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    fichier master :  C:/Users/Public/Videos/Sample Videos/Wildlife.wmv
    fichier srt =  C:/Users/Yoann/Desktop/srt/fichier.SRT
    nom du fichier sans l'extension :  C:/Users/Yoann/Desktop/srt/fichier
    lancement ffmpeg
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python34\lib\tkinter\__init__.py", line 1482, in __call__
        return self.func(*args)
      File "C:\Users\Yoann\Desktop\script\test5.py", line 28, in encodage
        print ("fichier master : ", master)
    NameError: name 'master' is not defined
    La dernière ligne me dit que master ne contient rien.
    Mais il contient normalement "C:/Users/Public/Videos/Sample Videos/Wildlife.wmv", comme on le voit plus haut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    # importation bibliotheque graphique Tkinter et explorateur windows
     
    from tkinter import *
    from tkinter.filedialog import askopenfilename
    import os
     
    # --- définition des fonctions gestionnaires d'événements : ---
    def openmaster():
        "Explorateur pour fichier master"
        master = askopenfilename()
        print ("fichier master : ", master)
     
    def opensrt():
        "explorateur pour fichier srt"
        fichier_srt = askopenfilename(filetypes = [("srt","*.srt")])
        print ("fichier srt = ", fichier_srt)
        nom_du_fichier = os.path.splitext(fichier_srt)[0]
        print ("nom du fichier sans l'extension : ", nom_du_fichier)
     
    def encodage():
        # fichier_
        "lancement ffmpeg"
        print("lancement ffmpeg")
     
        # path to ffmpeg bin
        FFMPEG_PATH = 'C:\ffmpeg-20160227-git-5156578-win64-shared\bin'
        print ("fichier master : ", master)
        command = [
                FFMPEG_PATH, '-i', master, '-vf subtitles=', fichier_srt, 'test.mp4', ]
        print ("commande = ", command)
        os.system("ping 127.0.0.1") #os.system(cmd) exécute cmd
     
     
    #------ Programme principal -------
     
    # Création du widget principal ("maître") :
    fen1 = Tk()
    # création des boutons :
    bou1 = Button(fen1,text='Quitter',command=fen1.quit)
    bou1.pack(side=BOTTOM)
    bou2 = Button(fen1,text='fichier master',command=openmaster)
    bou2.pack()
    bou3 = Button(fen1,text='fichier srt',command=opensrt)
    bou3.pack()
    bou4 = Button(fen1,text='encoder',command=encodage)
    bou4.pack()
     
    fen1.mainloop()              # démarrage du réceptionnaire d'événements
     
    fen1.destroy()               # destruction (fermeture) de la fenêtre

    Savez-vous pourquoi j'ai name 'master' is not defined ? Et comment utiliser dans la section def encodage() le contenu de la variable master définie dans def openmaster() ? Merci.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    Salut,

    réponse courte et pas forcément bonne qui devrait quand même arranger les chose: fait de "master" (et de toutes les variables que tu utilises dans plusieurs fonctions) une variable globale. Tu peux faire ça en ajoutant le mot clef global devant les déclaration de tes variables dans tes fonctions (ex.: global master).

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Par défaut
    C'est corrigé ! Merci.

    J'ai ajouté cela pour les masters :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    global master
    master = "quelquechose"
    global fichier_srt
    fichier_srt = "quelquechose"
    global nom_du_fichier
    nom_du_fichier = "quelquechose"
    Et mon programme était en fait bourré d’erreur ! (c'est mon premier programme )

    Ensuite j'ai eu plein de soucis, du coup voilà le code corrigé, si ça intéresse quelqu’un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    # importation bibliotheque graphique Tkinter et explorateur windows
     
    from tkinter import *
    from tkinter.filedialog import askopenfilename
    import os
     
     
    global master
    master = "quelquechose"
     
     
    global fichier_srt
    fichier_srt = "quelquechose"
     
     
    global nom_du_fichier
    nom_du_fichier = "quelquechose"
     
    # --- définition des fonctions gestionnaires d'événements : ---
    def openmaster():
        "Explorateur pour fichier master"
        global master
        master = askopenfilename()
        print ("fichier master : ", master)
     
    def opensrt():
        "explorateur pour fichier srt"
        global fichier_srt
        fichier_srt = askopenfilename(filetypes = [("srt","*.srt")])
        print ("fichier srt = ", fichier_srt)
        nom_du_fichier = os.path.splitext(fichier_srt)[0]
        print ("nom du fichier sans l'extension : ", nom_du_fichier)
     
    def encodage():
        # fichier_
        "lancement ffmpeg"
        print("lancement ffmpeg")
     
        # path to ffmpeg bin
        FFMPEG_PATH = 'C:\\ffmpeg-20160227-git-5156578-win64-shared\\bin\\ffmpeg.exe'
        print ("fichier master : ", master)
        command = [
                FFMPEG_PATH, ' -i  "', master, '" -vf subtitles="', fichier_srt, '" test.mp4', ]
        print ("commande = ", command)
        print (type(command))
        command = ''.join(command)
        print(command)
        print (type(command))
        os.system("ping 127.0.0.1") #os.system(cmd) exécute cmd
        os.system(command)
     
    #------ Programme principal -------
     
    # Création du widget principal ("maître") :
    fen1 = Tk()
    # création des boutons :
    bou1 = Button(fen1,text='Quitter',command=fen1.quit)
    bou1.pack(side=BOTTOM)
    bou2 = Button(fen1,text='fichier master',command=openmaster)
    bou2.pack()
    bou3 = Button(fen1,text='fichier srt',command=opensrt)
    bou3.pack()
    bou4 = Button(fen1,text='encoder',command=encodage)
    bou4.pack()
     
    fen1.mainloop()              # démarrage du réceptionnaire d'événements
     
    fen1.destroy()               # destruction (fermeture) de la fenêtre
    Au menu, à été résolut la conversion de command de list vers string, des espace manquant dans la command ffmpeg, ainsi que des gullemets, et les variables globales mieux utilisé.

    Je bloque sur un dernier point, du genre :
    "[AVFilterGraph @ 0000000002395640] Error initializing filter 'subtitles' with ar
    gs 'C:/Users/Yoann/Desktop/srt/Vandana Shiva français ok.SRT'
    Error opening filters!"

    Les chemins vers les fichiers contiennent le caractère / à la place du caractère \, et bien sur un .replace("/", "\") pose un soucis puisque \ est un caractère d' échappement...

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Utilise les outils python.

    Pour créer une ligne avec espace entre les mots:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    s = " ".join(ma liste)
    Pour les noms de fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    master = '"%s"' % master

Discussions similaires

  1. petit soucis de portée de variable
    Par Darkyl dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/06/2012, 13h25
  2. Petit souci de définition de variable
    Par ArnaudMO dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/05/2011, 15h20
  3. Petit souci de label avec variables intégrées
    Par Attila54 dans le forum VB.NET
    Réponses: 7
    Dernier message: 06/04/2011, 14h21
  4. Petit soucis de portée de variable
    Par AthenA714 dans le forum VB.NET
    Réponses: 3
    Dernier message: 20/04/2007, 10h33
  5. [Système] Petit souci de passage de variables
    Par geoffrey38 dans le forum Langage
    Réponses: 2
    Dernier message: 20/12/2006, 17h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo