Added post processing of the chat

This commit is contained in:
Vitalii Lebedynskyi
2022-08-15 14:36:17 +03:00
parent 265bad0267
commit efa6216e2a
6 changed files with 37 additions and 22 deletions

BIN
.DS_Store vendored

Binary file not shown.

2
.gitignore vendored
View File

@@ -160,3 +160,5 @@ cython_debug/
.idea/ .idea/
recorded recorded
.DS_Store

View File

@@ -15,7 +15,6 @@ class ChatAnalyser:
dates = self._read_message_dates(chat_file) dates = self._read_message_dates(chat_file)
messages_per_minute = self._group_dates(dates) messages_per_minute = self._group_dates(dates)
peaks = self._find_peeks(messages_per_minute, peaks_output_file, peaks_output_chart) peaks = self._find_peeks(messages_per_minute, peaks_output_file, peaks_output_chart)
logger.info("Found peaks: %s for file %s", peaks, chat_file)
return peaks return peaks
def _read_message_dates(self, chat_file): def _read_message_dates(self, chat_file):

2
clipper/clipper.py Normal file
View File

@@ -0,0 +1,2 @@
class Clipper:
def run(self):

View File

@@ -1,9 +1,11 @@
import logging import logging
import os import os
import subprocess
import time import time
import sys import sys
from datetime import datetime from datetime import datetime
from clipper.analyser import ChatAnalyser
from clipper.api import TwitchApi, TwitchStreamStatus from clipper.api import TwitchApi, TwitchStreamStatus
from clipper.chat import TwitchChatRecorder from clipper.chat import TwitchChatRecorder
from clipper.video import TwitchVideoRecorder from clipper.video import TwitchVideoRecorder
@@ -26,24 +28,15 @@ class Recorder:
self.api = TwitchApi(config.tw_client, config.tw_secret) self.api = TwitchApi(config.tw_client, config.tw_secret)
self.streamer_folder = os.path.join(self.config.output_folder, self.config.tw_streamer) self.streamer_folder = os.path.join(self.config.output_folder, self.config.tw_streamer)
self.video_recorder = TwitchVideoRecorder() self.video_recorder = TwitchVideoRecorder()
self.chat_recorder = TwitchChatRecorder(self.api, debug=False) self.chat_recorder = TwitchChatRecorder(self.api, debug=True)
self.chat_analyser = ChatAnalyser()
def run(self): def run(self):
logger.info("Start watching streamer %s", self.config.tw_streamer) logger.info("Start recording streamer %s", self.config.tw_streamer)
status = self.api.get_user_status(self.config.tw_streamer) status = self.api.get_user_status(self.config.tw_streamer)
while True: while True:
if self.video_recorder.is_running or self.chat_recorder.is_running: if status == TwitchStreamStatus.ONLINE:
if not (self.video_recorder.is_running and self.chat_recorder.is_running):
self.video_recorder.stop()
self.chat_recorder.stop()
time.sleep(1)
continue
logger.info("Recording in progress. Wait 1m")
time.sleep(60)
elif status == TwitchStreamStatus.ONLINE:
logger.info("Streamer %s is online. Start recording", self.config.tw_streamer) logger.info("Streamer %s is online. Start recording", self.config.tw_streamer)
start_time = datetime.now() start_time = datetime.now()
@@ -51,13 +44,15 @@ class Recorder:
record_folder = os.path.join(self.streamer_folder, record_folder_name) record_folder = os.path.join(self.streamer_folder, record_folder_name)
os.makedirs(record_folder) os.makedirs(record_folder)
chat_file = os.path.join(record_folder, "chat.txt") output_video_file = os.path.join(record_folder, "video.mp4")
video_file = os.path.join(record_folder, "video.mp4") output_chat_file = os.path.join(record_folder, "chat.txt")
output_chat_peaks_file = os.path.join(record_folder, "chat_peaks.txt")
output_chat_chart_file = os.path.join(record_folder, "chat_chart.png")
self.chat_recorder.run(self.config.tw_streamer, chat_file) self.chat_recorder.run(self.config.tw_streamer, output_chat_file)
self.video_recorder.run(self.config.tw_streamer, video_file, quality="160p") self.video_recorder.run(self.config.tw_streamer, output_video_file, quality="160p")
self._loop_recording()
time.sleep(5) self._post_process_video(output_chat_file, output_chat_peaks_file, output_chat_chart_file)
elif status == TwitchStreamStatus.OFFLINE: elif status == TwitchStreamStatus.OFFLINE:
logger.info("Streamer %s is offline. Waiting for 300 sec", self.config.tw_streamer) logger.info("Streamer %s is offline. Waiting for 300 sec", self.config.tw_streamer)
@@ -70,3 +65,19 @@ class Recorder:
elif status == TwitchStreamStatus.NOT_FOUND: elif status == TwitchStreamStatus.NOT_FOUND:
logger.critical(f"Streamer %s not found, invalid streamer_name or typo", self.config.tw_streamer) logger.critical(f"Streamer %s not found, invalid streamer_name or typo", self.config.tw_streamer)
sys.exit(1) sys.exit(1)
def _loop_recording(self):
while True:
if self.video_recorder.is_running or self.chat_recorder.is_running:
if not (self.video_recorder.is_running and self.chat_recorder.is_running):
self.video_recorder.stop()
self.chat_recorder.stop()
break
logger.info("Recording in progress. Wait 1m")
time.sleep(60)
continue
break
def _post_process_video(self, output_chat_file, output_chat_peaks_file, output_chat_chart_file):
peaks = self.chat_analyser.run(output_chat_file, output_chat_peaks_file, output_chat_chart_file)
logger.info("Found peaks: %s for file %s", len(peaks), output_chat_file)

View File

@@ -4,3 +4,4 @@ twitchAPI==2.5.7
irc==20.1.0 irc==20.1.0
scipy==1.9.0 scipy==1.9.0
matplotlib==3.5.2 matplotlib==3.5.2
numpy==1.23.0