diff --git a/asd b/asd deleted file mode 100644 index 39f0fa8..0000000 Binary files a/asd and /dev/null differ diff --git a/asdf b/asdf deleted file mode 100644 index 8cccca4..0000000 Binary files a/asdf and /dev/null differ diff --git a/main.py b/main.py index f13af7d..cba4ce7 100644 --- a/main.py +++ b/main.py @@ -263,16 +263,13 @@ class Main(QtCore.QObject): self.changeEncodingStatus(True) self.progressBarUpdated(-1) ffmpeg_cmd = self.settings.value("ffmpeg_cmd", expanduser("~")) - self.videoThread = QtCore.QThread(self) self.videoWorker = video_thread.Worker(self) - self.videoWorker.moveToThread(self.videoThread) self.videoWorker.videoCreated.connect(self.videoCreated) self.videoWorker.progressBarUpdate.connect(self.progressBarUpdated) self.videoWorker.progressBarSetText.connect(self.progressBarSetText) self.videoWorker.imageCreated.connect(self.showPreviewImage) - self.videoThread.start() self.videoTask.emit(self.window.lineEdit_background.text(), self.window.lineEdit_audioFile.text(), @@ -291,6 +288,7 @@ class Main(QtCore.QObject): else: self.window.pushButton_createVideo.setEnabled(True) self.window.pushButton_Cancel.setEnabled(False) + def progressBarSetText(self, value): diff --git a/video_thread.py b/video_thread.py index 9f3eee2..64bbd5f 100644 --- a/video_thread.py +++ b/video_thread.py @@ -8,7 +8,7 @@ import subprocess as sp import sys import os from queue import Queue, PriorityQueue -from threading import Thread +from threading import Thread, Event import time from copy import copy import signal @@ -31,9 +31,10 @@ class Worker(QtCore.QObject): self.sampleSize = 1470 self.canceled = False self.error = False + self.stopped = False def renderNode(self): - while True: + while not self.stopped: i = self.compositeQueue.get() if self.imBackground is not None: @@ -61,11 +62,9 @@ class Worker(QtCore.QObject): for i in range(0, len(self.completeAudioArray), self.sampleSize): self.compositeQueue.put([i, self.bgI]) - self.compositeQueue.join() - print('Compositing Complete.') def previewDispatch(self): - while True: + while not self.stopped: i = self.previewQueue.get() if time.time() - self.lastPreview >= 0.06 or i[0] == 0: self._image = ImageQt(i[1]) @@ -82,7 +81,7 @@ class Worker(QtCore.QObject): ) layer = self.core.drawBaseImage(self.backgroundFrames[i]) background.paste(layer) - return background + return background @pyqtSlot(str, str, str, list) def createVideo(self, backgroundImage, inputFile, outputFile, components): @@ -113,7 +112,7 @@ class Worker(QtCore.QObject): # test if user has libfdk_aac encoders = sp.check_output(self.core.FFMPEG_BIN + " -encoders -hide_banner", shell=True) acodec = self.core.settings.value('outputAudioCodec') - + if b'libfdk_aac' in encoders and acodec == 'aac': acodec = 'libfdk_aac' @@ -143,8 +142,6 @@ class Worker(QtCore.QObject): ffmpegCommand.append(outputFile) self.out_pipe = sp.Popen(ffmpegCommand, stdin=sp.PIPE,stdout=sys.stdout, stderr=sys.stdout) - - # create video for output numpy.seterr(divide='ignore') @@ -167,6 +164,7 @@ class Worker(QtCore.QObject): if properties and 'static' in properties: self.staticComponents[compNo] = copy(comp.frameRender(compNo, 0)) + self.progressBarUpdate.emit(100) self.compositeQueue = Queue() self.compositeQueue.maxsize = 20 @@ -174,11 +172,12 @@ class Worker(QtCore.QObject): self.renderQueue.maxsize = 20 self.previewQueue = PriorityQueue() + self.renderThreads = [] # create threads to render frames and send them back here for piping out for i in range(3): - t = Thread(target=self.renderNode, name="Render Thread") - t.daemon = True - t.start() + self.renderThreads.append(Thread(target=self.renderNode, name="Render Thread")) + self.renderThreads[i].daemon = True + self.renderThreads[i].start() self.dispatchThread = Thread(target=self.renderDispatch, name="Render Dispatch Thread") self.dispatchThread.daemon = True @@ -190,6 +189,9 @@ class Worker(QtCore.QObject): frameBuffer = {} self.lastPreview = 0.0 + self.progressBarUpdate.emit(0) + pStr = "Exporting video..." + self.progressBarSetText.emit(pStr) if not self.canceled: for i in range(0, len(self.completeAudioArray), self.sampleSize): while True: @@ -247,8 +249,11 @@ class Worker(QtCore.QObject): self.canceled = False self.parent.drawPreview() self.core.deleteTempDir() - self.parent.changeEncodingStatus(False) + self.stopped = True self.videoCreated.emit() + self.parent.changeEncodingStatus(False) + + return def updateProgress(self, pStr, pVal): self.progressBarValue.emit(pVal)