diff options
Diffstat (limited to 'components')
| -rw-r--r-- | components/__base__.py | 7 | ||||
| -rw-r--r-- | components/color.py | 16 | ||||
| -rw-r--r-- | components/image.py | 14 | ||||
| -rw-r--r-- | components/original.py | 20 | ||||
| -rw-r--r-- | components/text.py | 8 | ||||
| -rw-r--r-- | components/video.py | 68 |
6 files changed, 69 insertions, 64 deletions
diff --git a/components/__base__.py b/components/__base__.py index 45c148d..f564aad 100644 --- a/components/__base__.py +++ b/components/__base__.py @@ -7,6 +7,13 @@ class Component: def version(self): # change this number to identify new versions of a component return 1 + + def cancel(self): + # make sure your component responds to these variables in frameRender() + self.canceled = True + + def reset(self): + self.canceled = False def preFrameRender(self, **kwargs): for var, value in kwargs.items(): diff --git a/components/color.py b/components/color.py index ae818e2..c2a49e2 100644 --- a/components/color.py +++ b/components/color.py @@ -42,13 +42,17 @@ class Component(__base__.Component): self.x = self.page.spinBox_x.value() self.y = self.page.spinBox_y.value() self.parent.drawPreview() - + def previewRender(self, previewWorker): width = int(previewWorker.core.settings.value('outputWidth')) height = int(previewWorker.core.settings.value('outputHeight')) return self.drawFrame(width, height) - - def frameRender(self, moduleNo, frameNo): + + def preFrameRender(self, **kwargs): + super().preFrameRender(**kwargs) + return ['static'] + + def frameRender(self, moduleNo, arrayNo, frameNo): width = int(self.worker.core.settings.value('outputWidth')) height = int(self.worker.core.settings.value('outputHeight')) return self.drawFrame(width, height) @@ -81,9 +85,3 @@ class Component(__base__.Component): else: self.page.lineEdit_color2.setText(RGBstring) self.page.pushButton_color2.setStyleSheet(btnStyle) - - def cancel(self): - self.canceled = True - - def reset(self): - self.canceled = False diff --git a/components/image.py b/components/image.py index 021bb9e..ffbb117 100644 --- a/components/image.py +++ b/components/image.py @@ -27,8 +27,12 @@ class Component(__base__.Component): width = int(previewWorker.core.settings.value('outputWidth')) height = int(previewWorker.core.settings.value('outputHeight')) return self.drawFrame(width, height) - - def frameRender(self, moduleNo, frameNo): + + def preFrameRender(self, **kwargs): + super().preFrameRender(**kwargs) + return ['static'] + + def frameRender(self, moduleNo, arrayNo, frameNo): width = int(self.worker.core.settings.value('outputWidth')) height = int(self.worker.core.settings.value('outputHeight')) return self.drawFrame(width, height) @@ -49,12 +53,6 @@ class Component(__base__.Component): return { 'image' : self.imagePath, } - - def cancel(self): - self.canceled = True - - def reset(self): - self.canceled = False def pickImage(self): imgDir = self.settings.value("backgroundDir", os.path.expanduser("~")) diff --git a/components/original.py b/components/original.py index 6903a5f..b0a7579 100644 --- a/components/original.py +++ b/components/original.py @@ -58,6 +58,8 @@ class Component(__base__.Component): self.smoothConstantUp = 0.8 self.lastSpectrum = None self.spectrumArray = {} + self.width = int(self.worker.core.settings.value('outputWidth')) + self.height = int(self.worker.core.settings.value('outputHeight')) for i in range(0, len(self.completeAudioArray), self.sampleSize): if self.canceled: @@ -72,12 +74,9 @@ class Component(__base__.Component): 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')) - return self.drawBars(width, height, self.spectrumArray[frameNo], self.visColor, self.layout) + + def frameRender(self, moduleNo, arrayNo, frameNo): + return self.drawBars(self.width, self.height, self.spectrumArray[arrayNo], self.visColor, self.layout) def pickColor(self): RGBstring, btnStyle = super().pickColor() @@ -154,12 +153,3 @@ class Component(__base__.Component): return im - def cancel(self): - self.canceled = True - - def reset(self): - self.canceled = False - - - - diff --git a/components/text.py b/components/text.py index d2e009d..2650935 100644 --- a/components/text.py +++ b/components/text.py @@ -104,7 +104,7 @@ class Component(__base__.Component): super().preFrameRender(**kwargs) return ['static'] - def frameRender(self, moduleNo, frameNo): + def frameRender(self, moduleNo, arrayNo, frameNo): width = int(self.worker.core.settings.value('outputWidth')) height = int(self.worker.core.settings.value('outputHeight')) return self.addText(width, height) @@ -137,9 +137,3 @@ class Component(__base__.Component): return self.page.lineEdit_textColor.setText(RGBstring) self.page.pushButton_textColor.setStyleSheet(btnStyle) - - def cancel(self): - self.canceled = True - - def reset(self): - self.canceled = False diff --git a/components/video.py b/components/video.py index 3d6ba7a..1a9f344 100644 --- a/components/video.py +++ b/components/video.py @@ -5,6 +5,10 @@ from . import __base__ class Component(__base__.Component): '''Video''' + def __init__(self): + super().__init__() + self.working = False + def widget(self, parent): self.parent = parent self.settings = parent.settings @@ -27,24 +31,35 @@ class Component(__base__.Component): self.width = int(previewWorker.core.settings.value('outputWidth')) self.height = int(previewWorker.core.settings.value('outputHeight')) frames = self.getVideoFrames(True) - if frames: - im = Image.open(frames[0]) - im = self.resize(im) - return im - else: - return Image.new("RGBA", (self.width, self.height), (0, 0, 0, 0)) + if not hasattr(self, 'staticFrame') or not self.working and frames: + frame = Image.new("RGBA", (self.width, self.height), (0, 0, 0, 0)) + if frames: + im = Image.open(frames[0]) + im = self.resize(im) + frame.paste(im) + if not self.working: + self.staticFrame = frame + return self.staticFrame def preFrameRender(self, **kwargs): - super().__init__(**kwargs) + super().preFrameRender(**kwargs) self.width = int(self.worker.core.settings.value('outputWidth')) self.height = int(self.worker.core.settings.value('outputHeight')) self.frames = self.getVideoFrames() + self.working = True - def frameRender(self, moduleNo, frameNo): - i = frameNo if frameNo < len(self.frames)-1 else len(self.frames)-1 - im = Image.open(self.frames[i]) - im = self.resize(im) - return im + def frameRender(self, moduleNo, arrayNo, frameNo): + print(frameNo) + try: + if frameNo < len(self.frames)-1: + self.staticFrame = Image.new("RGBA", (self.width, self.height), (0, 0, 0, 0)) + im = Image.open(self.frames[frameNo]) + im = self.resize(im) + self.staticFrame.paste(im) + except FileNotFoundError: + print("Video component encountered an error") + self.frames = [] + return self.staticFrame def loadPreset(self, pr): self.page.lineEdit_video.setText(pr['video']) @@ -53,12 +68,6 @@ class Component(__base__.Component): return { 'video' : self.videoPath, } - - def cancel(self): - self.canceled = True - - def reset(self): - self.canceled = False def pickVideo(self): imgDir = self.settings.value("backgroundDir", os.path.expanduser("~")) @@ -69,19 +78,27 @@ class Component(__base__.Component): self.page.lineEdit_video.setText(filename) self.update() - def getVideoFrames(self, firstOnly=False): + def getVideoFrames(self, preview=False): # recreate the temporary directory so it is empty - # FIXME: don't dump too many frames at once + # FIXME: don't dump all the frames at once, don't dump more than sound length + # FIXME: make cancellable, report status to user, etc etc etc if not self.videoPath: return + name = os.path.basename(self.videoPath).split('.', 1)[0] + if preview: + filename = 'preview%s.jpg' % name + if os.path.exists(os.path.join(self.parent.core.tempDir, filename)): + return False + else: + filename = name+'-frame%05d.jpg' + + # recreate tempDir and dump needed frame(s) self.parent.core.deleteTempDir() os.mkdir(self.parent.core.tempDir) - if firstOnly: - filename = 'preview%s.jpg' % os.path.basename(self.videoPath).split('.', 1)[0] - options = '-ss 10 -vframes 1' + if preview: + options = '-ss 10 -vframes 1' else: - filename = '$frame%05d.jpg' - options = '' + options = '' #'-vframes 99999' subprocess.call( \ '%s -i "%s" -y %s "%s"' % ( \ self.parent.core.FFMPEG_BIN, @@ -91,6 +108,7 @@ class Component(__base__.Component): ), shell=True ) + print('### Got Preview Frame From %s ###' % name if preview else '### Finished Dumping Frames From %s ###' % name) return sorted([os.path.join(self.parent.core.tempDir, f) for f in os.listdir(self.parent.core.tempDir)]) def resize(self, im): |
