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.

4
.gitignore vendored
View File

@@ -159,4 +159,6 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
.idea/
recorded
recorded
.DS_Store

View File

@@ -15,7 +15,6 @@ class ChatAnalyser:
dates = self._read_message_dates(chat_file)
messages_per_minute = self._group_dates(dates)
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
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 os
import subprocess
import time
import sys
from datetime import datetime
from clipper.analyser import ChatAnalyser
from clipper.api import TwitchApi, TwitchStreamStatus
from clipper.chat import TwitchChatRecorder
from clipper.video import TwitchVideoRecorder
@@ -26,24 +28,15 @@ class Recorder:
self.api = TwitchApi(config.tw_client, config.tw_secret)
self.streamer_folder = os.path.join(self.config.output_folder, self.config.tw_streamer)
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):
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)
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()
time.sleep(1)
continue
logger.info("Recording in progress. Wait 1m")
time.sleep(60)
elif status == TwitchStreamStatus.ONLINE:
if status == TwitchStreamStatus.ONLINE:
logger.info("Streamer %s is online. Start recording", self.config.tw_streamer)
start_time = datetime.now()
@@ -51,13 +44,15 @@ class Recorder:
record_folder = os.path.join(self.streamer_folder, record_folder_name)
os.makedirs(record_folder)
chat_file = os.path.join(record_folder, "chat.txt")
video_file = os.path.join(record_folder, "video.mp4")
output_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.video_recorder.run(self.config.tw_streamer, video_file, quality="160p")
time.sleep(5)
self.chat_recorder.run(self.config.tw_streamer, output_chat_file)
self.video_recorder.run(self.config.tw_streamer, output_video_file, quality="160p")
self._loop_recording()
self._post_process_video(output_chat_file, output_chat_peaks_file, output_chat_chart_file)
elif status == TwitchStreamStatus.OFFLINE:
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:
logger.critical(f"Streamer %s not found, invalid streamer_name or typo", self.config.tw_streamer)
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

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