Listen
Verfasst: Sonntag 30. Juni 2019, 11:46
Huhu und zwar habe ich eine Klasse BoardVideo in welcher in self.board_subvideos Teilvideos für eine Timeline abgespeichert werden. Das klappt auch super allerdings brauche ich in der Klasse SpeakerVideo genau die "entgegengesetzten" Zeiten. Das funktioniert leider nicht mit der Analyse bzw. ist zu ungenau. Bsp. self.board_subvideos: [200,950,1000,2500,...] in self.speaker_subvideos bräuchte ich dann [0,199,201,949,..] um diese Subvideos in der Timeline einzufügen wie stelle ich das am klügsten an ?
MfG Felix

Code: Alles auswählen
class BoardVideo(MediaFile):
"""
This class contains the board video and a method to analyse the video
"""
def __init__(self, file_path):
self.__file_path = str(file_path)
self.board_subvideos = list()
def get(self):
return self.__file_path
def check_board_area(self, progress):
"""
a method that analyse the video frame per frame and save the Clips (Board) in a list
"""
video = cv2.VideoCapture(self.__file_path)
maxframes = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
try:
times = list()
for frame_number in count():
if frame_number % 30 == 0:
progress(frame_number/maxframes*100)
is_ok, frame = video.read()
if not is_ok:
if times:
self.board_subvideos.append((times[0], times[-1]))
break
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
(thresh, frame) = cv2.threshold(frame, 60, 255, cv2.THRESH_BINARY)
average = cv2.mean(frame)
#summe = average[0] + average[1] + average[2]
#percentage_red = (100 * average[0]) / summe
#percentage_green = (100 * average[1]) / summe
#percentage_blue = (100 * average[2]) / summe
if average[0] > 250:
times.append(video.get(cv2.CAP_PROP_POS_MSEC) / 1000)
elif times:
self.board_subvideos.append((times[0], times[-1]))
times.clear()
finally:
video.release()
Code: Alles auswählen
class SpeakerVideo(MediaFile):
"""
This class contains the video
"""
def __init__(self, file_path):
self.__file_path = str(file_path)
self.speaker_subvideos = list()
def get(self):
return self.__file_path
def check_speaker(self, progress):
"""
a method that analyse the video frame per frame and save the Clips (Speaker) in a list
"""
video = cv2.VideoCapture(self.__file_path)
maxframes = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
try:
times = list()
for frame_number in count():
if frame_number % 30 == 0:
progress(frame_number/maxframes*100)
is_ok, frame = video.read()
if not is_ok:
if times:
self.speaker_subvideos.append((times[0], times[-1]))
break
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
(thresh, frame) = cv2.threshold(frame, 60, 255, cv2.THRESH_BINARY)
average = cv2.mean(frame)
if average[0] < 250:
times.append(video.get(cv2.CAP_PROP_POS_MSEC) / 1000)
elif times:
self.speaker_subvideos.append((times[0], times[-1]))
times.clear()
finally:
video.release()