better exporter for single layers
This commit is contained in:
parent
acaf2dbfdc
commit
0df1bc2119
|
|
@ -5,6 +5,7 @@ from Application.Layer import Layer
|
||||||
import cv2
|
import cv2
|
||||||
from Application.VideoReader import VideoReader
|
from Application.VideoReader import VideoReader
|
||||||
import pickle
|
import pickle
|
||||||
|
import time
|
||||||
|
|
||||||
class Exporter:
|
class Exporter:
|
||||||
fps = 30
|
fps = 30
|
||||||
|
|
@ -25,7 +26,7 @@ class Exporter:
|
||||||
self.exportLayers(layers)
|
self.exportLayers(layers)
|
||||||
|
|
||||||
|
|
||||||
def exportLayers(self, layers):
|
def exportLayers(self, layers):
|
||||||
|
|
||||||
listOfFrames = self.makeListOfFrames(layers)
|
listOfFrames = self.makeListOfFrames(layers)
|
||||||
videoReader = VideoReader(self.config, listOfFrames)
|
videoReader = VideoReader(self.config, listOfFrames)
|
||||||
|
|
@ -37,33 +38,43 @@ class Exporter:
|
||||||
|
|
||||||
self.fps = videoReader.getFPS()
|
self.fps = videoReader.getFPS()
|
||||||
writer = imageio.get_writer(self.outputPath, fps=self.fps)
|
writer = imageio.get_writer(self.outputPath, fps=self.fps)
|
||||||
while not videoReader.videoEnded():
|
|
||||||
frameCount, frame = videoReader.pop()
|
start = time.time()
|
||||||
if frameCount % (60*self.fps) == 0:
|
for i, layer in enumerate(layers):
|
||||||
print("Minutes processed: ", frameCount/(60*self.fps))
|
print(f"{round(i/len(layers)*100,2)} {round((time.time() - start), 2)}")
|
||||||
if frame is None:
|
start = time.time()
|
||||||
print("ContourExtractor: frame was None")
|
if len(layer.bounds[0]) == 0:
|
||||||
continue
|
continue
|
||||||
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
|
||||||
|
|
||||||
frame2 = np.copy(underlay)
|
listOfFrames = self.makeListOfFrames([layer])
|
||||||
for xi, layer in enumerate(layers):
|
|
||||||
if layer.startFrame <= frameCount and layer.startFrame + len(layer.bounds) > frameCount:
|
videoReader = VideoReader(self.config, listOfFrames)
|
||||||
for (x, y, w, h) in layer.bounds[frameCount - layer.startFrame]:
|
videoReader.fillBuffer()
|
||||||
if x is None:
|
|
||||||
continue
|
while not videoReader.videoEnded():
|
||||||
factor = videoReader.w / self.resizeWidth
|
frameCount, frame = videoReader.pop()
|
||||||
x = int(x * factor)
|
|
||||||
y = int(y * factor)
|
if frameCount % (60*self.fps) == 0:
|
||||||
w = int(w * factor)
|
print("Minutes processed: ", frameCount/(60*self.fps))
|
||||||
h = int(h * factor)
|
|
||||||
|
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
||||||
frame2[y:y+h, x:x+w] = np.copy(frame[y:y+h, x:x+w])
|
|
||||||
cv2.putText(frame2, str(xi) + " " + str(int(frameCount/self.fps)), (int(x+w/2), int(y+h/2)), cv2.FONT_HERSHEY_SIMPLEX, 1,(255,255,255), 2)
|
frame2 = np.copy(underlay)
|
||||||
writer.append_data(frame2)
|
for (x, y, w, h) in layer.bounds[frameCount - layer.startFrame]:
|
||||||
|
if x is None:
|
||||||
|
continue
|
||||||
|
factor = videoReader.w / self.resizeWidth
|
||||||
|
x = int(x * factor)
|
||||||
|
y = int(y * factor)
|
||||||
|
w = int(w * factor)
|
||||||
|
h = int(h * factor)
|
||||||
|
|
||||||
|
frame2[y:y+h, x:x+w] = np.copy(frame[y:y+h, x:x+w])
|
||||||
|
cv2.putText(frame2, str(i) + " " + str(int(frameCount/self.fps)), (int(x+w/2), int(y+h/2)), cv2.FONT_HERSHEY_SIMPLEX, 1,(255,255,255), 2)
|
||||||
|
writer.append_data(frame2)
|
||||||
|
|
||||||
|
|
||||||
videoReader.thread.join()
|
videoReader.thread.join()
|
||||||
|
|
||||||
|
|
||||||
def exportOverlayed(self, layers):
|
def exportOverlayed(self, layers):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue