Added post processing of the chat
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -160,3 +160,5 @@ cython_debug/
|
|||||||
.idea/
|
.idea/
|
||||||
|
|
||||||
recorded
|
recorded
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
@@ -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
2
clipper/clipper.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
class Clipper:
|
||||||
|
def run(self):
|
||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in New Issue
Block a user