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)
Пример #2
0
	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)