def sauverSpin_2(self,i): """conserver le spin dans le fichier de configuration et modifie le curseur""" debug("%s %d" % (self.choixCodec,i)) #EkdConfig.set(self.idSection,self.choixCodec,i) EkdConfig.set('animation_encodage_general_bitrate_video',self.choixCodec,i) # sauver curseur self.curseur_2.setValue(i)
def __init__(self, statusBar, filer=False): QWidget.__init__(self) # Boite d'alignement vertical vbox=QVBoxLayout(self) # On ne passe pas tout le parent, mais juste ce dont on a besoin (ici la bar de status) # Barre des tâches self.statusBar = statusBar #------------------- # Navigateur de répertoires #------------------- # arborescence des fichiers et dossiers permettant l'affichage self.listViewVisioVideo = QListView() filtres_option = QDir.AllDirs | QDir.Files | QDir.Readable filtres = QStringList() filtres << "*.avi" << "*.mpg" << "*.mpeg" << "*.mjpeg" << "*.flv" << "*.mp4" << "*.ogg" << "*.vob" << "*.mov" << "*.h264" << "*.wmv" << "*.3gp" sorting = QDir.DirsFirst if int(EkdConfig.get("general", "ignore_case")): sorting |= QDir.IgnoreCase self.model = QDirModel(filtres, filtres_option, sorting) try : index = self.model.index(EkdConfig.get('general', 'video_input_path')) except Exception, e: index = self.model.index(QDir.homePath())
def changerReglagesNbrImgSec(self): "Fonction pour collecte du nombre d'images/seconde en sortie" # Afficher la valeur choisie par l'utilisateur du nbre d'img/sec self.select_nbreImgSec = self.nbrImage.value() #print "Valeur du nombre d'images par seconde:", self.select_nbreImgSec EkdPrint(u"Valeur du nombre d'images par seconde: %s" % self.select_nbreImgSec) EkdConfig.set(self.idSection, 'images_par_seconde', self.select_nbreImgSec)
def changerReglagesQual(self): "Fonction pour collecte de la qualité de la vidéo en sortie" # Afficher la valeur choisie par l'utilisateur de la qualité de la vidéo self.select_qualite = self.qualite.value() #print "Valeur de la qualité de la vidéo:", self.select_qualite EkdPrint(u"Valeur de la qualité de la vidéo: %s" % self.select_qualite) EkdConfig.set(self.idSection, 'qualite', self.select_qualite)
def nouvelleResolution(self): """Mets une liste de chemins vidéos dans l'ordre alpha-numérique si tel est le choix de l'utilisateur""" i=self.combo.currentIndex() idCombo = str(self.combo.itemData(i).toStringList()[0]) #print "Combo :", idCombo EkdPrint(u"Combo : %s" % idCombo) # Si ordre alpha-numérique choisi, alors on ordonne la liste if idCombo == '16_9': self.idCombo=1.77777 elif idCombo == '16_10': self.idCombo=1.60 elif idCombo == '4_3': self.idCombo=1.33333 elif idCombo == '5_3': self.idCombo=1.66666 elif idCombo == '1_85': self.idCombo=1.85 elif idCombo == '2_35': self.idCombo=2.35 elif idCombo == '2_39': self.idCombo=2.39 elif idCombo == '2_55': self.idCombo=2.55 ###################################################################################### EkdConfig.set(self.idSection,'type',idCombo)
def saveFiles(self): """ # On sauvegarde la liste des fichiers chargés """ self.afficheurVideoSource.saveFileLocation(self.idSection) # Ajout de la sauvegarde des positions début et fin EkdConfig.set(self.idSection, u"valeurDebut", unicode(self.valeurDebut)) EkdConfig.set(self.idSection, u"valeurFin", unicode(self.valeurFin))
def updateColor(self): newcolor = QColorDialog.getColor(QColor.fromRgb(int("%d" % int(self.value, 16))), None )# Non supporté sous Jaunty ?? if newcolor.isValid(): self.value = str("%x" % newcolor.rgb())[2:] self.color.fill(QColor.fromRgb(int("%d" % int(self.value, 16)))) self.boutton.setIcon(QIcon(self.color)) self.line.setText(self.value) EkdConfig.set(self.section, self.id, self.value)
def save(self): ''' Sauvegarde de la configuration de tous les objets ''' self.saveFiles() entry = u"" for files in self.ordreVideo.getListFile() : entry += files+u":" EkdConfig.set(self.idSection, u'ordreVideo', entry[:-1])
def loadFiles(self): """ # On sauvegarde la liste des fichiers chargés """ self.afficheurVideoSource.loadFileLocation(self.idSection) self.valeurDebut = float(EkdConfig.get(self.idSection, "valeurDebut")) self.valeurFin = float(EkdConfig.get(self.idSection, "valeurFin")) self.mettreAJourLabel("debut") self.mettreAJourLabel("fin")
def loadOptions(self): """ On charge les différentes variables necessaire au widget """ idCodec = EkdConfig.get(self.idSection,'codec') self.codecSortie.setCurrentIndex(int(idCodec)) resolution = EkdConfig.get(self.idSection,'resolution') self.resoSortie.setCurrentIndex(int(resolution)) frequence = EkdConfig.get(self.idSection,'images_par_seconde') self.nbrImage.setValue(int(frequence)) qualite = EkdConfig.get(self.idSection,'qualite') self.qualite.setValue(int(qualite))
def ouvrirSource(self, nomEntree=None): """ Récupération des chemins vidéo sélectionnée """ # On n'utilise pas le fonction recupSources du fichier animation_base.py contenu dans # le répertoire gui_modules_animation car pour cette fonction uniquement les fichiers # AVI (donc extension .avi) sont autorisés try: repEntree = EkdConfig.get('general', 'video_input_path') except: repEntree = os.path.expanduser('~') #################################################################################### txt = _(u"Fichiers vidéos") if not nomEntree: liste=QFileDialog.getOpenFileNames(None, _(u"Ouvrir"), repEntree, "%s (*.avi *.mpg *.mpeg *.vob)\n" %txt) self.liste = [unicode(i) for i in liste] #################################################################################### chemin=self.liste if not chemin: return ## On a récupérer la vidéo, on défini le nouveau chemin par défaut des vidéos EkdConfig.set('general', 'video_input_path', os.path.dirname(chemin[0])) self.lstFichiersSource = [] for fichier in chemin: self.lstFichiersSource.append(fichier) # Appel de la fonction nouvelleResolution pour application 16/9 ou 4/3 self.nouvelleResolution() #print 'self.idCombo', self.idCombo EkdPrint(u'self.idCombo %s' % self.idCombo) # Le bouton appliquer devient utilisable self.boutApp.setEnabled(True) self.boutApp.setToolTip("") self.mplayer.setEnabled(True) self.mplayer.listeVideos = self.lstFichiersSource self.radioSource.setChecked(True) self.radioSource.setEnabled(False) self.radioConvert.setEnabled(False) # Affichage du chemin + nom de fichier dans la ligne d'édition self.ligneEditionSource.setText(liste[0]) self.statusBar.showMessage(_(u"La vidéo résultante ne pourra pas être lue avec tous les logiciels"))
def load(self): ''' Chargement de la configuration de tous les objets ''' self.loadFiles() files = EkdConfig.get(self.idSection, 'ordreVideo') if debug : #print files EkdPrint(u"%s" % str(files)) self.ordreVideo.addSoundAction(files.split(u":")) files = EkdConfig.get(self.idSection, 'ordreAudio') if debug : #print files EkdPrint(u"%s" % str(files)) self.ordreAudio.addSoundAction(files.split(u":"))
def __init__(self, cheminVideoEntre, cheminFFmpeg=None): QThread.__init__(self) self.cancel = False #=== Paramètres généraux ===# self.repTampon = unicode(EkdConfig.getTempDir() + os.sep) # Répertoire de sauvegarde ds le rep tampon self.rep_audio = self.repTampon + u'concat_audio' + os.sep # Uniquement pour Linux et MacOSX if os.name in ['posix', 'mac'] or not cheminFFmpeg : self.cheminFFmpeg=u"ffmpeg" elif cheminFFmpeg : self.cheminFFmpeg=unicode(cheminFFmpeg) # Uniquement pour windows else : self.cheminFFmpeg=u"ffmpeg" # chemin(s) des vidéos chargées self.cheminVideoEntre = cheminVideoEntre
def displayLenght(self) : #QT4 OK self.totimage=0 if self.videof.currentText()=="NTSC" : self.n=1 imgpsec=30 ips=float(30000/1001) else : self.n=0 imgpsec=25 ips=imgpsec dicspeed={"0":1,"1":2,"2":4,"3":5,"4":10,"5":20} speedtrans=dicspeed[str(EkdConfig.get("videoporamaconfig","speedt"))] frametransition = 100 / speedtrans k=0 while k<self.timeline.columnCount() : self.totimage += self.timeline.cellWidget(0,k).imagetime(self.n)[1]+self.timeline.cellWidget(0,k).imagetime(self.n)[2] k+=1 self.totimage+=frametransition sec=float(self.totimage) / ips seconde=str(sec % 60).split(".") minute=int(sec / 60) heure=int(minute / 60) timesnd="%s:%s:%s.%s" % (str(heure).rjust(2,'0'),str(minute).rjust(2,'0'),seconde[0].rjust(2,'0'),seconde[1].ljust(3,'0')[0:3]) self.duration.setText(timesnd)
def checkfirsttime(self,p) : #OK QT4 a, b, c, d = 0, 0, 0, 0 pathname = os.path.dirname (sys.argv[0]) refdir = os.path.abspath (pathname) + os.sep + u"videoporama" + os.sep + u"template" + os.sep if p=="o" : self.templatedir=unicode(QDir.homePath()) + os.sep + self.parent.configdir else : self.templatedir=refdir if (not os.path.exists(self.templatedir)) : print "Configuration directory doesn't exist" print "Create configuration directory at "+self.templatedir os.makedirs(self.templatedir) if (not os.path.exists(self.templatedir + os.sep + u"template_data.idv")) : d=1 reffile=open(refdir + os.sep +u"template_data.idv","r") destfile=open(self.templatedir + os.sep + u"template_data.idv","w") destfile.write(reffile.read()) destfile.close() ### check or create temporary dir self.T = EkdConfig.getTempDir() + os.sep + u"videoporamatmp" if (not os.path.exists(self.T)) : os.makedirs(self.T) if (c or d) : print "Configuration files not find (First time open ?)" if (a==c and b==d) : return False else : return True else : return False
def __init__(self, cheminVideoEntre, valeurNum=0, cheminMEncoder=None): QDialog.__init__(self) # === Paramètres généraux ===# self.repTampon = EkdConfig.getTempDir() + os.sep # Répertoire de sauvegarde ds le rep tampon self.rep_video_ext_resol = self.repTampon + "video_extension_resol" + os.sep # Uniquement pour Linux et MacOSX if os.name in ["posix", "mac"] or not cheminMEncoder: self.cheminMEncoder = u"mencoder" # Uniquement pour windows elif os.name == "nt" and cheminMEncoder: self.cheminMEncoder = unicode(cheminMEncoder) # chemin(s) des vidéos chargées self.cheminVideoEntre = cheminVideoEntre # valeur de la boite de spin pour l'encodage self.valeurNum = valeurNum self.fichiers = [os.path.basename(parc) for parc in self.cheminVideoEntre] # Appel de la fonction lanceur self.lanceur()
def changerItemQStacked(self, i): """ L'entrée sélectionnée de la boîte de combo modifie le QWidget de réglage du codec associée """ #print "index", i EkdPrint(u"index %d" % i) idCodec=str(self.combo.itemData(i).toString()) #print "idCodec:", idCodec, type(idCodec) EkdPrint(u"idCodec: %s %s" % (idCodec ,type(idCodec))) for k in self.listeCombo: if k[0]==idCodec: # Utilisation de EkdConfig : modification des sections if self.idSection == "animation_filtresvideo": if k[0] in ('decoupageassiste', 'decoupagelibre'): self.filtreDecouper.setStacked(k[0]) if self.stacked: self.stacked.setCurrentIndex(k[2]) EkdConfig.set(self.idSection,'codec', idCodec)
def ouvrirVideo(self): """Ouverture de la boîte de dialogue de fichiers""" txt = u"Fichiers vidéo" if self.cheminPourBoutonParcourir: chemin = self.cheminPourBoutonParcourir else: try: chemin = EkdConfig.get('general','video_input_path').decode("UTF8") except: chemin = os.path.expanduser('~') liste=QFileDialog.getOpenFileNames(None, u"Ouvrir", chemin, "%s (*.avi *.mpg *.mpeg *.mjpeg *.flv *.mp4 *.ogg *.vob *.mov *.wmv *.3gp *.h264)\n*" %txt) if not liste: return self.listeVideos = liste self.changeRatio(unicode(self.listeVideos[0])) chemin = unicode(self.listeVideos[0]) EkdConfig.set('general','video_input_path',os.path.dirname(chemin).encode("UTF8"))
def recupSourceAudio(self, nomEntree=None): """Récupère le fichier source audio via une boite de dialogue. Utilise et modifie les paramètres de configuration""" if self.ligneEditionSource.text().isEmpty(): lignePleine = False else: lignePleine = True fichier = unicode(self.ligneEditionSource.text()) path = os.path.dirname(fichier) if lignePleine and os.path.exists(path): repEntree = path else: try: repEntree = EkdConfig.get('general','audio_input_path').decode("UTF8") except Exception, e: repEntree = '~' EkdConfig.set('general','audio_input_path', repEntree.encode("UTF8")) if not QFileInfo(repEntree).exists(): repEntree = '~' EkdConfig.set('general','audio_input_path', repEntree.encode("UTF8"))
def recupSourcesAudio(self, nomEntree=None): """Récupère les fichiers sources audio via une boite de dialogue. Utilise et modifie les paramètres de configuration""" if not self.lstFichiersSourceAudio: listePleine = False else: listePleine = True fichier = self.lstFichiersSourceAudio[0] path = os.path.dirname(fichier) if listePleine and os.path.exists(path): repEntree = path else: try: repEntree = EkdConfig.get('general','audio_input_path').decode("UTF8") except Exception, e: repEntree = '~' EkdConfig.set('general','audio_input_path', repEntree.encode("UTF8")) if not os.path.exists(repEntree): repEntree = '~' EkdConfig.set('general','audio_input_path', repEntree.encode("UTF8"))
def getFile(self): ''' Invoque la boite de dialogue et retourne le fichier saisi ''' ## Ajout d'une boite de dialogue avertissant du format des fichier de sortis dans le cas de multiples fichier à enregistrer show = Qt.Unchecked try : show = int(EkdConfig.get("general", "show_warning_messages")) except Exception, e: #print "%s" % e EkdPrint("%s" % e) pass
def __init__(self): # Identifiant de la classe self.idSection = "animation_encodage_web" # Pas d'"empilement" car pas de paramètre d'encodage self.stacked = None # ------------------------------------------------------------------- # # Chemin des répertoires temporaires pour la gestion des fichiers # mod (extension .mod). Ce sont (apparemment) des fichiers mpeg avec # une extension .mod. Les fichiers en question ont juste besoin # d'être renommés avec une extension .mpg avant le traitement. # ------------------------------------------------------------------- # self.repTempEntree = EkdConfig.getTempDir() + os.sep # création des répertoires temporaires if os.path.isdir(self.repTempEntree) is False: os.makedirs(self.repTempEntree) # Chemin exact d'écriture pour le tampon des fichiers mod self.repTempFichiersMod = self.repTempEntree + "transcodage" + os.sep + "fichiers_mod" + os.sep # Création du chemin if os.path.isdir(self.repTempFichiersMod) is False: os.makedirs(self.repTempFichiersMod) # Epuration/elimination des fichiers tampon contenus dans le rep tampon for toutRepTemp in glob.glob(self.repTempFichiersMod + "*.*"): os.remove(toutRepTemp) # ---------------------------------------------------------------------------------- # Paramètres de la liste de combo: [(identifiant, nom entrée, instance, extension), ...] # ---------------------------------------------------------------------------------- self.listeCombo = [ ("youtube_16/9_HQ", _(u"Transcodage YouTube 16/9 Haute Qualité"), 0, ".avi"), ("youtube_16/9_MQ", _(u"Transcodage YouTube 16/9 Moyenne Qualité"), 1, ".avi"), ("youtube_16/9_LQ", _(u"Transcodage YouTube 16/9 Basse qualité"), 2, ".avi"), ("youtube_4/3_HQ", _(u"Transcodage YouTube 4/3 Haute Qualité"), 3, ".avi"), ("youtube_4/3_MQ", _(u"Transcodage YouTube 4/3 Moyenne Qualité"), 4, ".avi"), ("youtube_4/3_LQ", _(u"Transcodage YouTube 4/3 Basse qualité"), 5, ".avi"), ("google_video_16/9_HQ", _(u"Transcodage Google vidéo 16/9 Haute qualité"), 6, ".avi"), ("google_video_16/9_MQ", _(u"Transcodage Google vidéo 16/9 Qualité moyenne"), 7, ".avi"), ("google_video_16/9_LQ", _(u"Transcodage Google vidéo 16/9 Basse qualité"), 8, ".avi"), ("google_video_4/3_HQ", _(u"Transcodage Google vidéo 4/3 Haute qualité"), 9, ".avi"), ("google_video_4/3_MQ", _(u"Transcodage Google vidéo 4/3 Qualité moyenne"), 10, ".avi"), ("google_video_4/3_LQ", _(u"Transcodage Google vidéo 4/3 Basse qualité"), 11, ".avi"), ("dailymotion_sd_4/3", _(u"Transcodage Dailymotion SD 4/3"), 12, ".mp4"), ("dailymotion_sd_16/9", _(u"Transcodage Dailymotion SD 16/9"), 13, ".mp4"), ("dailymotion_HD720p", _(u"Transcodage Dailymotion HD720p"), 14, ".mp4"), ] # --------------------------- # Dérivation de la classe # --------------------------- Base_EncodageFiltre.__init__(self, titre=_(u"Transcodage: Pour le Web"))
def add2(self,files) : #Different de videoporama try : self.lastdir=self.findDir(files[0]) except : None try : bgf=EkdConfig.get("videoporamaconfig","bgfile") except : bgf="" for file in files : k=self.timeline.columnCount() if file != u"" : self.DisplayThumb(file,k, EkdConfig.get("videoporamaconfig","time"), bgf, int(EkdConfig.get("videoporamaconfig","bgcolor"),16), EkdConfig.get("videoporamaconfig","typet"), 0, EkdConfig.get("videoporamaconfig","speedt")) if self.timeline.columnCount() != 0 : self.serieBut.setEnabled(True) self.displayLenght()
def load(self) : self.afficheurImgSource.loadFileLocation(self.idSection) self.spin1_ImTrait.setValue(int(EkdConfig.get(self.idSection, 'spin1_ImTrait'))) self.spin2_ImTrait.setValue(int(EkdConfig.get(self.idSection, 'spin2_ImTrait'))) self.stacked_redim_avec_ratio.spin.setValue(int(EkdConfig.get(self.idSection, 'stacked_redim_avec_ratio'))) self.stacked_redim_sans_ratio.spin.setValue(int(EkdConfig.get(self.idSection, 'stacked_redim_sans_ratio1'))) self.stacked_redim_sans_ratio.spin2.setValue(int(EkdConfig.get(self.idSection, 'stacked_redim_sans_ratio2'))) self.comboReglage.setCurrentIndex(int(EkdConfig.get(self.idSection, 'type_redim')))
def load(self) : self.selectionAudioFile.loadFileLocation(self.idSection) self.selectionFile.reglageExp.loadConfig(self.idSection) self.choix1.setChecked(int(EkdConfig.get(self.idSection, 'choix1'))) self.choix2.setChecked(int(EkdConfig.get(self.idSection, 'choix2'))) self.choix3.setChecked(int(EkdConfig.get(self.idSection, 'choix3'))) self.choixm1.setChecked(int(EkdConfig.get(self.idSection, 'choixm1'))) self.choixm2.setChecked(int(EkdConfig.get(self.idSection, 'choixm2'))) self.choixm3.setChecked(int(EkdConfig.get(self.idSection, 'choixm3')))
def changerReglagesSon_DNxHD(self): "Fonction pour collecte du réglage du flux audio en sortie uniquement pour l'Avid DNxHD" # Afficher le changement de sélection dans le combo de # sélection du flux audio en sortie pour l'Avid DNxHD self.select_son_DNxHD = self.sonSortie_DNxHD.currentText() son_DNxHD = EkdConfig.set(self.idSection, 'audio_DNxHD', self.sonSortie_DNxHD.currentIndex())
def changerReglagesSpec_DNxHD(self): "Fonction pour collecte du réglage des spécificités pour l'Avid DNxHD" # Afficher le changement de sélection dans le combo de # sélection des spécificités en sortie pour l'Avid DNxHD self.select_spec_DNxHD = self.specSortie_DNxHD.currentText() spec_DNxHD = EkdConfig.set(self.idSection, 'spec_DNxHD', self.specSortie_DNxHD.currentIndex())
def changerReglagesResol(self): "Fonction pour collecte du réglage de la résolution en sortie" # Afficher le changement de sélection dans le combo # de sélection de la résolution en sortie self.select_resolution = self.resoSortie.currentText() resolution = EkdConfig.set(self.idSection, 'resolution', self.resoSortie.currentIndex())
def changerReglagesCodec(self): """Fonction pour collecte du réglage du codec en sortie""" self.select_codec = self.codecSortie.currentText() #print 'Codec sélectionné en sortie:', self.select_codec EkdPrint(u'Codec sélectionné en sortie: %s' % str(self.select_codec)) EkdConfig.set(self.idSection, 'codec', self.codecSortie.currentIndex())
def __init__(self, statusBar, parent=None): vbox=QVBoxLayout() #=== Variable de configuration ===# self.config=EkdConfig # Identifiant de la classe self.idSection = "animation_montage_video_et_audio" super(Animation_MontagVideoVidPlusAudio, self).__init__(boite='vbox', titre=_(u"Montage: Vidéo et audio")) self.printSection() self.repTampon = EkdConfig.getTempDir() + os.sep if os.path.isdir(self.repTampon) is False: os.makedirs(self.repTampon) # Au cas où le répertoire existait déjà et qu'il n'était pas vide -> purge (simple précaution) for toutRepCompo in glob.glob(self.repTampon+'*.*'): os.remove(toutRepCompo) # Liste de fichiers initiaux (contenu dans le fichier de configuration) self.lstFichiersSource = [] self.lstFichiersSourceProv = [] # idem mais provisoire (sert à récupérer les chemins dans l'ordre de sélection) self.lstFichiersSourceAudio = [] self.lstFichiersSourceProvAudio = [] # Par soucis de lisibilité, on préfère ne pas utiliser des objets présent dans le parent de cette façon # mais plutôt le passer en paramètre (le code est plus facile à lire de cette façon) self.statusBar = statusBar #------------------------------------------------------------------- self.afficheurVideoSource=SelectWidget(extensions = ["*.avi", "*.mpg", "*.mpeg", "*.mjpeg", "*.flv", "*.mp4", "*.h264", "*.dv", "*.vob"], mode="texte", video = True) ################################################################################### # Onglets self.indexVideoSource = self.add(self.afficheurVideoSource, _(u'Video(s) source')) self.connect(self.afficheurVideoSource,SIGNAL("fileSelected"),self.getFile) self.connect(self.afficheurVideoSource, SIGNAL("pictureChanged(int)"), self.getFile) #-------------------------------------------------------------------- # ------------------------------------------------------------------- # Boîte de groupe : "Fichiers source" # ------------------------------------------------------------------- extFormat=[] for fmt in parent.soxSuppFormat : extFormat.append("*."+fmt) self.afficheurAudioSource=SelectWidget(extensions=extFormat ,mode="texte", audio = True) # Onglets self.indexAudioSource = self.add(self.afficheurAudioSource, _(u'Audio(s) source')) self.connect(self.afficheurAudioSource,SIGNAL("fileSelected"), self.getFileA) self.connect(self.afficheurAudioSource, SIGNAL("pictureChanged(int)"), self.getFileA) ## --------------------------------------------------------------------- # Variables pour la fonction tampon ## --------------------------------------------------------------------- self.typeEntree = ["video","audio"] # Défini le type de fichier source. self.typeSortie = "video" # Défini le type de fichier de sortie. self.sourceEntrees = [self.afficheurVideoSource, self.afficheurAudioSource] # Fait le lien avec le sélecteur de fichier source. self.addReglage("vbox") #=== Widget qui seront inclus dans la boite de réglage ===# self.ordreVideo = selectJoinMultipleSound(0, self) self.ordreVideo.setTitleAndTips(_(u"Fichiers vidéos à joindre"), _(u"Liste des fichiers vidéo à joindre. <b>Pour information, vous pouvez monter et descendre les fichiers grâce aux flèches haut et bas (les fichiers apparaissant en haut de la liste sont ceux qui seront au début du montage)</b>")) self.ordreAudio = selectJoinMultipleSound(0, self) self.ordreAudio.setTitleAndTips(_(u"Fichiers audios à joindre"), _(u"Liste des fichiers audio à joindre. <b>Pour information, vous pouvez monter et descendre les fichiers grâce aux flèches haut et bas (les fichiers apparaissant en haut de la liste sont ceux qui seront au début du montage)</b>")) self.layoutReglage.addWidget(self.ordreVideo) self.layoutReglage.addWidget(self.ordreAudio) # --------------------------- # Boite de groupe de mplayer # --------------------------- self.addPreview() self.addLog()