aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDH42017-06-02 03:30:51 -0500
committerDH42017-06-02 03:30:51 -0500
commit53598f7a85e0238d5c2c42cd248876fb4e06eb16 (patch)
treeb23053c518d60ebdecf7b92c258113688e1aa49e
parent73a0492585e238d32869bfa9c53ddc95481ab1c5 (diff)
Progressbar enhancement.
-rw-r--r--asdbin0 -> 1310087 bytes
-rw-r--r--asdfbin0 -> 9685175 bytes
-rw-r--r--components/original.py12
-rw-r--r--core.py35
-rw-r--r--main.py23
-rw-r--r--video_thread.py19
6 files changed, 66 insertions, 23 deletions
diff --git a/asd b/asd
new file mode 100644
index 0000000..39f0fa8
--- /dev/null
+++ b/asd
Binary files differ
diff --git a/asdf b/asdf
new file mode 100644
index 0000000..8cccca4
--- /dev/null
+++ b/asdf
Binary files differ
diff --git a/components/original.py b/components/original.py
index e1240e9..6903a5f 100644
--- a/components/original.py
+++ b/components/original.py
@@ -66,6 +66,14 @@ class Component(__base__.Component):
self.smoothConstantDown, self.smoothConstantUp, self.lastSpectrum)
self.spectrumArray[i] = copy(self.lastSpectrum)
+ progress = int(100*(i/len(self.completeAudioArray)))
+ if progress >= 100:
+ progress = 100
+ pStr = "Analyzing audio: "+ str(progress) +'%'
+ self.progressBarSetText.emit(pStr)
+ self.progressBarUpdate.emit(int(progress))
+
+
def frameRender(self, moduleNo, frameNo):
width = int(self.worker.core.settings.value('outputWidth'))
height = int(self.worker.core.settings.value('outputHeight'))
@@ -151,3 +159,7 @@ class Component(__base__.Component):
def reset(self):
self.canceled = False
+
+
+
+
diff --git a/core.py b/core.py
index 0bbe001..96f5670 100644
--- a/core.py
+++ b/core.py
@@ -55,7 +55,24 @@ class Core():
return im
- def readAudioFile(self, filename):
+ def readAudioFile(self, filename, parent):
+ command = [ self.FFMPEG_BIN,
+ '-i', filename]
+
+ try:
+ fileInfo = sp.check_output(command, stderr=sp.STDOUT, shell=False)
+ except sp.CalledProcessError as ex:
+ fileInfo = ex.output
+ pass
+
+ info = fileInfo.decode("utf-8").split('\n')
+ for line in info:
+ if 'Duration' in line:
+ d = line.split(',')[0]
+ d = d.split(' ')[3]
+ d = d.split(':')
+ duration = float(d[0])*3600 + float(d[1])*60 + float(d[2])
+
command = [ self.FFMPEG_BIN,
'-i', filename,
'-f', 's16le',
@@ -67,16 +84,30 @@ class Core():
completeAudioArray = numpy.empty(0, dtype="int16")
+ progress = 0
+ lastPercent = None
while True:
if self.canceled:
break
# read 2 seconds of audio
+ progress = progress + 4
raw_audio = in_pipe.stdout.read(88200*4)
if len(raw_audio) == 0:
break
audio_array = numpy.fromstring(raw_audio, dtype="int16")
completeAudioArray = numpy.append(completeAudioArray, audio_array)
- # print(audio_array)
+
+ percent = int(100*(progress/duration))
+ if percent >= 100:
+ percent = 100
+
+ if lastPercent != percent:
+ string = 'Loading audio file: '+str(percent)+'%'
+ parent.progressBarSetText.emit(string)
+ parent.progressBarUpdate.emit(percent)
+
+ lastPercent = percent
+
in_pipe.kill()
in_pipe.wait()
diff --git a/main.py b/main.py
index 94020b2..f13af7d 100644
--- a/main.py
+++ b/main.py
@@ -260,7 +260,7 @@ class Main(QtCore.QObject):
# create output video if mandatory settings are filled in
if self.window.lineEdit_audioFile.text() and self.window.lineEdit_outputFile.text():
self.canceled = False
- self.startExport = True
+ self.changeEncodingStatus(True)
self.progressBarUpdated(-1)
ffmpeg_cmd = self.settings.value("ffmpeg_cmd", expanduser("~"))
@@ -282,26 +282,15 @@ class Main(QtCore.QObject):
self.showMessage("You must select an audio file and output filename.")
def progressBarUpdated(self, value):
- if value != -1:
self.window.progressBar_createVideo.setValue(value)
-
- if self.canceled:
- self.window.pushButton_createVideo.setEnabled(True)
- self.window.pushButton_Cancel.setEnabled(False)
- self.startExport = False
- return
- if value == 100 or value == 0:
- if not self.startExport:
- self.window.pushButton_createVideo.setEnabled(True)
- self.window.pushButton_Cancel.setEnabled(False)
- else:
- if value == -1:
- self.startExport = True
- else:
- self.startExport = False
+ def changeEncodingStatus(self, status):
+ if status:
self.window.pushButton_createVideo.setEnabled(False)
self.window.pushButton_Cancel.setEnabled(True)
+ 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 504102a..9f3eee2 100644
--- a/video_thread.py
+++ b/video_thread.py
@@ -107,8 +107,8 @@ class Worker(QtCore.QObject):
self.imBackground = None
self.bgI = 0
- self.progressBarSetText.emit('Loading audio file…')
- self.completeAudioArray = self.core.readAudioFile(inputFile)
+ self.progressBarSetText.emit('Loading audio file...')
+ self.completeAudioArray = self.core.readAudioFile(inputFile, self)
# test if user has libfdk_aac
encoders = sp.check_output(self.core.FFMPEG_BIN + " -encoders -hide_banner", shell=True)
@@ -152,12 +152,17 @@ class Worker(QtCore.QObject):
print('loaded components:',
["%s%s" % (num, str(component)) for num, component in enumerate(self.components)])
self.staticComponents = {}
+ numComps = len(self.components)
for compNo, comp in enumerate(self.components):
+ pStr = "Analyzing audio..."
+ self.progressBarSetText.emit(pStr)
properties = None
properties = comp.preFrameRender(
worker=self,
completeAudioArray=self.completeAudioArray,
sampleSize=self.sampleSize,
+ progressBarUpdate=self.progressBarUpdate,
+ progressBarSetText=self.progressBarSetText
)
if properties and 'static' in properties:
@@ -207,7 +212,8 @@ class Worker(QtCore.QObject):
if progressBarValue + 1 <= (i / len(self.completeAudioArray)) * 100:
progressBarValue = numpy.floor((i / len(self.completeAudioArray)) * 100)
self.progressBarUpdate.emit(progressBarValue)
- self.progressBarSetText.emit('%s%%' % str(int(progressBarValue)))
+ pStr = "Exporting video: " + str(int(progressBarValue)) + "%"
+ self.progressBarSetText.emit(pStr)
numpy.seterr(all='print')
@@ -226,6 +232,7 @@ class Worker(QtCore.QObject):
pass
self.progressBarUpdate.emit(0)
self.progressBarSetText.emit('Export Canceled')
+
else:
if self.error:
print("Export Failed")
@@ -240,9 +247,13 @@ class Worker(QtCore.QObject):
self.canceled = False
self.parent.drawPreview()
self.core.deleteTempDir()
-
+ self.parent.changeEncodingStatus(False)
self.videoCreated.emit()
+ def updateProgress(self, pStr, pVal):
+ self.progressBarValue.emit(pVal)
+ self.progressBarSetText.emit(pStr)
+
def cancel(self):
self.canceled = True
self.core.cancel()