diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 2d32235..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.gitignore b/.gitignore index 270d79e..97e96d5 100644 --- a/.gitignore +++ b/.gitignore @@ -159,4 +159,6 @@ cython_debug/ # option (not recommended) you can uncomment the following to ignore the entire idea folder. .idea/ -recorded \ No newline at end of file +recorded + +.DS_Store \ No newline at end of file diff --git a/clipper/analyser.py b/clipper/analyser.py index b2ff289..a553aba 100644 --- a/clipper/analyser.py +++ b/clipper/analyser.py @@ -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): diff --git a/clipper/clipper.py b/clipper/clipper.py new file mode 100644 index 0000000..bc99d09 --- /dev/null +++ b/clipper/clipper.py @@ -0,0 +1,2 @@ +class Clipper: + def run(self): diff --git a/clipper/recorder.py b/clipper/recorder.py index 312f54a..2181411 100644 --- a/clipper/recorder.py +++ b/clipper/recorder.py @@ -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) diff --git a/requirements.txt b/requirements.txt index 6c938e4..d4a16d9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,4 +3,5 @@ streamlink==4.2.0 twitchAPI==2.5.7 irc==20.1.0 scipy==1.9.0 -matplotlib==3.5.2 \ No newline at end of file +matplotlib==3.5.2 +numpy==1.23.0 \ No newline at end of file