def appliquer(self, nomSortie=None, ouvert=1): """Fusion de vidéos""" self.recupOrdreAV() # ----- Vidéo ------ # self.stat_dim_video() resolution = self.dimStatVideo # Chemin du répertoire temporaire rep_video_ext_resol = self.repTampon + 'video_extension_resol' + os.sep # Scan des extensions des vidéos chargées pour concaténation des vidéos lVideoExt = [parcVidExt.split('.') for parcVidExt in self.lstFichiersSource] lExtVideo = [parcExtVideo[1].lower() for parcExtVideo in lVideoExt] # On elimine les doublons s'il y en a. TTes les # extensions différentes sont mises en avant uniqExtVideo = list(set(lExtVideo)) # ----- Audio ------ # # Chemin du répertoire temporaire rep_video_audio = self.repTampon + 'concat_audio' + os.sep # Scan des extensions des fichiers audio chargés pour concaténation lAudioExt = [parcAudExt.split('.') for parcAudExt in self.lstFichiersSourceAudio] lExtAudio = [parcExtAudio[1].lower() for parcExtAudio in lAudioExt] # On elimine les doublons s'il y en a. TTes les # extensions différentes sont mises en avant uniqExtAudio = list(set(lExtAudio)) ####################################################################### #=== Récupération du fichier de sortie ===# chemin=unicode(self.ordreVideo.getListFile()) if not nomSortie: # suffix du fichier actif #suffix=os.path.splitext(chemin)[1] suffix = u".avi" ############################################################################## # Si la liste contient plus d'un élément, c'est à dire si elle contient des # extensions différentes et si la résolution des vidéos est différente. # ---------------------------------------------------------------------------- # Ici l'extension à la sortie sera en avi car on encode en Motion JPEG. if len(uniqExtVideo) > 1 or len(self.lStatDimSeq) > 1: suffix = '.avi' ############################################################################## saveDialog = EkdSaveDialog(self, mode="video", suffix=suffix, title=_(u"Sauver")) self.cheminFichierEnregistrerVideo = saveDialog.getFile() #################################################################################################################### else: # module séquentiel self.cheminFichierEnregistrerVideo=nomSortie if not self.cheminFichierEnregistrerVideo: return # Video # Chemin de sortie temporaire de la vidéo self.cheminVideoProv = self.repTampon+u"video" # Audio # Chemin de sortie temporaire de l'audio self.cheminAudioProv = self.repTampon+u"audio.wav" if os.path.isdir(rep_video_ext_resol) is False: os.makedirs(rep_video_ext_resol) #from moteur_modules_animation.mencoder_concat_video import WidgetMEncoderConcatExtResol from gui_modules_common.mencoder_concat_gui import WidgetMEncoderConcatExtResol self.sourceVideo = self.lstFichiersSource # Si la liste contient plus d'un élément, c'est à dire si elle contient des # extensions différentes et si la résolution des vidéos est différente if len(uniqExtVideo) > 1 or len(self.lStatDimSeq) > 1: wmcer = WidgetMEncoderConcatExtResol(self.lstFichiersSource, valeurNum=resolution) wmcer.setWindowTitle(_(u"Traitement vidéo (extension et résolution)")) wmcer.exec_() # Les vidéos chargées en vue de la concaténation sont maintenant ds # le rep tampon .../video_extension_resol self.lstFichiersSource = glob.glob(unicode(rep_video_ext_resol+'*.*')) if debug : #print self.lstFichiersSource EkdPrint(u"%s" % self.lstFichiersSource) # Mise en ordre (numérotation) car cela peut # poser problème au moment de la concaténation self.lstFichiersSource.sort() if debug : #print "sources tmp mise en ordre : ", self.lstFichiersSource EkdPrint(u"sources tmp mise en ordre : %s" % self.lstFichiersSource) # Comme l'encodage se fait ici en Motion JPEG # (AVI) l'extension doit être .avi suffix = '.avi' else: # Au cas où le répertoire existait déjà et qu'il n'était pas vide -> purge # ... ici dans le cas de vidéos avec la même extension et la même résolution if os.path.isdir(rep_video_ext_resol) is True: for toutRepCompoVideo in glob.glob(rep_video_ext_resol+'*.*'): os.remove(toutRepCompoVideo) ################################################################################################## self.sourceAudio = self.lstFichiersSourceAudio self.process = soxProcessMulti(self.lstFichiersSourceAudio, self.cheminAudioProv, u"") self.process.show() self.process.run() self.connect(self.process,SIGNAL("endProcess"),self.endProcess)
def appliquer(self, nomSortie=None, ouvert=1): """Fusion de vidéos""" self.lstFichiersSource = self.ordreVideo.getListFile() self.stat_dim_video() resolution = self.dimStatVideo self.stat_codec_video() # Chemin du répertoire temporaire rep_video_ext_resol = self.repTampon + 'video_extension_resol' + os.sep chemin=unicode(self.ordreVideo.getListFile()) if not nomSortie: suffix = '.avi' ############################################################################## saveDialog = EkdSaveDialog(self, mode="video", suffix=suffix, title=_(u"Sauver")) cheminFichierEnregistrerVideo = saveDialog.getFile() ################################################################################################################### else: # module séquentiel cheminFichierEnregistrerVideo=nomSortie if not cheminFichierEnregistrerVideo: return fichiersSource=self.lstFichiersSource if os.path.isdir(rep_video_ext_resol) is False: os.makedirs(rep_video_ext_resol) ## Dans tous les cas on change le format (mjpeg/avi) ## # Si la liste contient plus d'un élément, c'est à dire si elle contient des ## # extensions différentes et si la résolution des vidéos est différente ########################################################################################################### wmcer = WidgetMEncoderConcatExtResol(self.lstFichiersSource, valeurNum=resolution) wmcer.setWindowTitle(_(u"Traitement vidéo (extension et résolution)")) wmcer.exec_() # Les vidéos chargées en vue de la concaténation sont maintenant ds # le rep tampon .../video_extension_resol self.lstFichiersSource = glob.glob(unicode(rep_video_ext_resol+'*.*')) # Mise en ordre (numérotation) car cela peut # poser problème au moment de la concaténation #print "Debug:: Files to mix : ", self.lstFichiersSource EkdPrint(u"Debug:: Files to mix : %s" % self.lstFichiersSource) self.lstFichiersSource.sort() ### Concaténation élégante ######################################################### cheminVideoProv = self.repTampon + "video" + suffix # on écrit dans "output" (descripteur de fichier de cheminVideoProv) try: output = open(cheminVideoProv, 'wb+') for cheminFichier in self.lstFichiersSource: input = open(cheminFichier, 'rb') output.write(input.read()) input.close() output.close() except Exception, details: #print "**** DEBUG: Erreur dans l'ouverture du fichier : " , details EkdPrint(u"**** DEBUG: Erreur dans l'ouverture du fichier : %s" % details)