aboutsummaryrefslogtreecommitdiff
path: root/core.py
diff options
context:
space:
mode:
authortassaron2017-05-18 19:14:27 -0400
committertassaron2017-05-18 19:14:27 -0400
commitff818836dd2221c544afe1fcc17369b17f90b0db (patch)
treeb654ca68fb946dc91cb30f4cb96ac0b933ca98ab /core.py
parent01de150f7401a3f2640999298f9b6f1c0c7a101a (diff)
added ability to use an mp4 as the background
might not be the best way to do this (dumping all the video frames to a temp location), but it works for clips of a few minutes or less
Diffstat (limited to 'core.py')
-rw-r--r--core.py62
1 files changed, 52 insertions, 10 deletions
diff --git a/core.py b/core.py
index b362087..ea17edf 100644
--- a/core.py
+++ b/core.py
@@ -6,6 +6,9 @@ import subprocess as sp
import numpy
from PIL import Image, ImageDraw, ImageFont
from PIL.ImageQt import ImageQt
+import tempfile
+from shutil import rmtree
+import atexit
class Core():
@@ -14,6 +17,8 @@ class Core():
self._image = None
self.FFMPEG_BIN = self.findFfmpeg()
+ self.tempDir = None
+ atexit.register(self.deleteTempDir)
def findFfmpeg(self):
if sys.platform == "win32":
@@ -26,23 +31,34 @@ class Core():
except:
return "avconv"
- def drawBaseImage(self, backgroundImage, titleText, titleFont, fontSize, alignment, xOffset, yOffset):
-
- if self._image == None or not self.lastBackgroundImage == backgroundImage:
- self.lastBackgroundImage = backgroundImage
-
+ def parseBaseImage(self, backgroundImage, preview=False):
+ ''' determines if the base image is a single frame or list of frames '''
if backgroundImage == "":
- im = Image.new("RGB", (1280, 720), "black")
+ return []
else:
- im = Image.open(backgroundImage)
+ _, bgExt = os.path.splitext(backgroundImage)
+ if not bgExt == '.mp4':
+ return [backgroundImage]
+ else:
+ return self.getVideoFrames(backgroundImage, preview)
+
+ def drawBaseImage(self, backgroundFile, titleText, titleFont, fontSize, alignment, xOffset, yOffset):
+ if backgroundFile == '':
+ im = Image.new("RGB", (1280, 720), "black")
+ else:
+ im = Image.open(backgroundFile)
+
+ if self._image == None or not self.lastBackgroundImage == backgroundFile:
+ self.lastBackgroundImage = backgroundFile
# resize if necessary
if not im.size == (1280, 720):
im = im.resize((1280, 720), Image.ANTIALIAS)
self._image = ImageQt(im)
-
+
self._image1 = QtGui.QImage(self._image)
+
painter = QPainter(self._image1)
font = titleFont
font.setPointSizeF(fontSize)
@@ -83,7 +99,6 @@ class Core():
imBottom = imTop.transpose(Image.FLIP_TOP_BOTTOM)
im = Image.new("RGB", (1280, 720), "black")
-
im.paste(image, (0, 0))
im.paste(imTop, (0, 0), mask=imTop)
im.paste(imBottom, (0, 360), mask=imBottom)
@@ -99,7 +114,7 @@ class Core():
'-ac', '1', # mono (set to '2' for stereo)
'-']
in_pipe = sp.Popen(command, stdout=sp.PIPE, stderr=sp.DEVNULL, bufsize=10**8)
-
+
completeAudioArray = numpy.empty(0, dtype="int16")
while True:
@@ -150,3 +165,30 @@ class Core():
x = frequencies[0:int(paddedSampleSize/2) - 1]
return lastSpectrum
+
+ def deleteTempDir(self):
+ if self.tempDir and os.path.exists(self.tempDir):
+ rmtree(self.tempDir)
+
+
+ def getVideoFrames(self, videoPath, firstOnly=False):
+ self.tempDir = os.path.join(tempfile.gettempdir(), 'audio-visualizer-python-data')
+ # recreate the temporary directory so it is empty
+ self.deleteTempDir()
+ os.mkdir(self.tempDir)
+ if firstOnly:
+ filename = 'preview.jpg'
+ options = '-ss 10 -vframes 1'
+ else:
+ filename = '$frame%05d.jpg'
+ options = ''
+ sp.call( \
+ '%s -i "%s" -y %s "%s"' % ( \
+ self.FFMPEG_BIN,
+ videoPath,
+ options,
+ os.path.join(self.tempDir, filename)
+ ),
+ shell=True
+ )
+ return sorted([os.path.join(self.tempDir, f) for f in os.listdir(self.tempDir)])