Added video creation via ffmpeg

master
Gina Häußge 2013-01-03 22:58:47 +01:00
parent 02f2436cd5
commit b93750619f
2 changed files with 31 additions and 4 deletions

View File

@ -32,7 +32,8 @@ default_settings = {
},
"folder": {
"uploads": None,
"timelapse": None
"timelapse": None,
"timelapse_tmp": None
}
}
@ -113,7 +114,7 @@ class Settings(object):
folder = self.get("folder", type)
if folder is None:
folder = os.path.join(self.settings_dir, type)
folder = os.path.join(self.settings_dir, type.replace("_", os.path.sep))
if not os.path.isdir(folder):
os.makedirs(folder)

View File

@ -8,6 +8,8 @@ import os
import threading
import urllib
import time
import subprocess
import glob
class Timelapse(object):
def __init__(self):
@ -15,7 +17,8 @@ class Timelapse(object):
self.inTimelapse = False
self.gcodeFile = None
self.captureDir = settings().getBaseFolder("timelapse")
self.captureDir = settings().getBaseFolder("timelapse_tmp")
self.movieDir = settings().getBaseFolder("timelapse")
self.snapshotUrl = settings().get("webcam", "snapshot")
def onPrintjobStarted(self, gcodeFile):
@ -31,11 +34,15 @@ class Timelapse(object):
pass
def startTimelapse(self, gcodeFile):
self.cleanCaptureDir()
self.imageNumber = 0
self.inTimelapse = True
self.gcodeFile = os.path.basename(gcodeFile)
def stopTimelapse(self):
self.createMovie()
self.imageNumber = None
self.inTimelapse = False
@ -43,7 +50,7 @@ class Timelapse(object):
if self.captureDir is None:
return
filename = os.path.join(self.captureDir, "tmp_%i.jpg" % (self.imageNumber))
filename = os.path.join(self.captureDir, "tmp_%05d.jpg" % (self.imageNumber))
self.imageNumber += 1;
captureThread = threading.Thread(target=self.captureWorker, kwargs={"filename": filename})
@ -52,6 +59,25 @@ class Timelapse(object):
def captureWorker(self, filename):
urllib.urlretrieve(self.snapshotUrl, filename)
def createMovie(self):
ffmpeg = settings().get("webcam", "ffmpeg")
if ffmpeg is None:
return
input = os.path.join(self.captureDir, "tmp_%05d.jpg")
output = os.path.join(self.movieDir, "%s_%s.mpg" % (os.path.splitext(self.gcodeFile)[0], time.strftime("%Y%m%d%H%M%S")))
subprocess.call([
ffmpeg, '-i', input, '-vcodec', 'mpeg2video', '-pix_fmt', 'yuv420p', '-r', '25', '-y',
'-b:v', '1500k', '-f', 'vob', output
])
def cleanCaptureDir(self):
if not os.path.isdir(self.captureDir):
return
for filename in glob.glob(os.path.join(self.captureDir, "*.jpg")):
os.remove(filename)
class ZTimelapse(Timelapse):
def __init__(self):
Timelapse.__init__(self)