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.