From e3a56743fa6221d21bc1ef1dec1fd67408abe4ec Mon Sep 17 00:00:00 2001 From: eric Date: Thu, 18 Sep 2025 23:23:15 +0800 Subject: [PATCH] 's' --- live.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/live.py b/live.py index eafe091..67ada38 100644 --- a/live.py +++ b/live.py @@ -23,7 +23,7 @@ IS_WINDOWS = platform.system() == "Windows" # ----------------- Douyin Recorder ----------------- class DouyinRecorder: - def __init__(self, audio_bitrate=128, max_minutes=8): + def __init__(self, audio_bitrate=128, max_minutes=8, loop_record=False): self.record_proc = None self.stop_flag = threading.Event() self.audio_bitrate = audio_bitrate @@ -32,6 +32,7 @@ class DouyinRecorder: self.out_file = None self.temp_file = None self.max_minutes = max_minutes + self.loop_record = loop_record # <-- 新增循环开关 os.makedirs("records", exist_ok=True) # ---- 构建 FFmpeg 命令 ---- @@ -85,8 +86,10 @@ class DouyinRecorder: threading.Thread(target=monitor_proc, args=(self.record_proc,), daemon=True).start() + # ---- 录制循环 ---- def _run_record_loop(self, real_url): + first_run = True while not self.stop_flag.is_set(): try: self.start_time = time.time() @@ -94,11 +97,23 @@ class DouyinRecorder: while not self.stop_flag.is_set(): elapsed = time.time() - self.start_time - if elapsed >= self.max_minutes * 60: + + # 如果循环开关关闭,则只录一次,达到 max_minutes 就停止 + if not self.loop_record and elapsed >= self.max_minutes * 60: + logging.info(f"[{self.room_name}] 达到 {self.max_minutes} 分钟,录制完成(循环关闭)") + self.stop_flag.set() + # break + self.stop() + # ⚠️ 这里自动退出整个程序 + os._exit(0) + + # 如果循环开启,达到 max_minutes 就切分录制 + if self.loop_record and elapsed >= self.max_minutes * 60: logging.info(f"[{self.room_name}] 达到 {self.max_minutes} 分钟,切分录制段") self._finalize_recording() self.start_time = time.time() self._start_new_record(real_url) + if self.record_proc.poll() is not None: logging.warning(f"[{self.room_name}] FFmpeg 进程退出,1秒后重启") time.sleep(1) @@ -107,7 +122,6 @@ class DouyinRecorder: except Exception as e: logging.error(f"[{self.room_name}] FFmpeg异常: {e}") time.sleep(1) - # ---- 停止 FFmpeg ---- def _terminate_proc(self): if self.record_proc and self.record_proc.poll() is None: @@ -207,7 +221,7 @@ def start_douyin_record(record_url, room_name=None, proxy_addr=None, cookies='', # ----------------- Main ----------------- if __name__ == "__main__": - DOUYIN_URL = "https://live.douyin.com/846050151095" + DOUYIN_URL = "https://live.douyin.com/163813589919" recorder_instance = start_douyin_record(DOUYIN_URL) if not recorder_instance: logging.error("录制实例创建失败,程序退出")