onyx_online 已修改 . 還原成這個修訂版本
1 file changed, 106 insertions
stop-record-delete-recording-start-new.py(檔案已創建)
@@ -0,0 +1,106 @@ | |||
1 | + | # Copyright (C) 2025 Onyx and Iris | |
2 | + | # | |
3 | + | # This program is free software: you can redistribute it and/or modify | |
4 | + | # it under the terms of the GNU General Public License as published by | |
5 | + | # the Free Software Foundation, either version 3 of the License, or | |
6 | + | # (at your option) any later version. | |
7 | + | # | |
8 | + | # This program is distributed in the hope that it will be useful, | |
9 | + | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | + | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | + | # GNU General Public License for more details. | |
12 | + | # | |
13 | + | # You should have received a copy of the GNU General Public License | |
14 | + | # along with this program. If not, see <https://www.gnu.org/licenses/>. | |
15 | + | # | |
16 | + | # Special Thanks to OBS Discord user Penwywern for helping to improve this snippet. | |
17 | + | ||
18 | + | """ | |
19 | + | stop-record-delete-recording-start-new.py | |
20 | + | This OBS Python script allows users to register a hotkey that, when pressed, will: | |
21 | + | 1. Stop the current recording (if active). | |
22 | + | 2. Delete the most recent recording file. | |
23 | + | 3. Start a new recording after a short delay. | |
24 | + | Features: | |
25 | + | - Registers a customizable hotkey in OBS under 'Hotkeys'. | |
26 | + | - Ensures the hotkey only works when a recording is active. | |
27 | + | - Handles OBS frontend events to safely delete the last recording after stopping. | |
28 | + | - Provides logging for each major action (stop, delete, start). | |
29 | + | Functions: | |
30 | + | - script_description(): Returns a description of the script for OBS. | |
31 | + | - script_load(settings): Registers the hotkey and loads its settings. | |
32 | + | - callback(pressed): Hotkey callback to initiate the stop/delete/start sequence. | |
33 | + | - on_event(event): Handles OBS events, deletes the last recording, and schedules the new recording. | |
34 | + | - on_timer_tick(): Starts a new recording after a delay. | |
35 | + | Requirements: | |
36 | + | - OBS Studio with Python scripting support. | |
37 | + | - Proper hotkey configuration in OBS settings. | |
38 | + | License: | |
39 | + | - GPL-3.0-or-later | |
40 | + | Copyright (C) 2025 Onyx and Iris | |
41 | + | """ | |
42 | + | ||
43 | + | __version__ = "0.2.0" | |
44 | + | ||
45 | + | from pathlib import Path | |
46 | + | ||
47 | + | import obspython as obs | |
48 | + | ||
49 | + | HOTKEY_ID = obs.OBS_INVALID_HOTKEY_ID | |
50 | + | ||
51 | + | ||
52 | + | ### SCRIPT SETUP ### | |
53 | + | def script_description() -> str: | |
54 | + | """Registers a hotkey to delete the last recording and start a new one.""" | |
55 | + | return ( | |
56 | + | "This script registers a hotkey to delete the last recording and start a new one.\n" | |
57 | + | "The hotkey can be set in the OBS settings under 'Hotkeys'.\n" | |
58 | + | "Make sure to set the hotkey before using this script." | |
59 | + | ) | |
60 | + | ||
61 | + | ||
62 | + | def script_load(settings): | |
63 | + | """Register a hotkey to trigger the script.""" | |
64 | + | HOTKEY_ID = obs.obs_hotkey_register_frontend( | |
65 | + | "record_delete_start", "Delete Last Recording and Start New", callback | |
66 | + | ) | |
67 | + | hotkey_save = obs.obs_data_get_array(settings, "record_delete_start") | |
68 | + | obs.obs_hotkey_load(HOTKEY_ID, hotkey_save) | |
69 | + | obs.obs_data_array_release(hotkey_save) | |
70 | + | ||
71 | + | return HOTKEY_ID | |
72 | + | ||
73 | + | ||
74 | + | ### CALLBACKS ### | |
75 | + | def callback(pressed): | |
76 | + | """Callback function for the hotkey.""" | |
77 | + | if pressed: | |
78 | + | if not obs.obs_frontend_recording_active(): | |
79 | + | obs.script_log(obs.LOG_WARNING, "Recording is not active.") | |
80 | + | return | |
81 | + | ||
82 | + | obs.obs_frontend_add_event_callback(on_event) | |
83 | + | obs.obs_frontend_recording_stop() | |
84 | + | ||
85 | + | ||
86 | + | def on_event(event): | |
87 | + | """Event handler for the hotkey.""" | |
88 | + | if event == obs.OBS_FRONTEND_EVENT_RECORDING_STOPPED: | |
89 | + | obs.obs_frontend_remove_event_callback(on_event) | |
90 | + | ||
91 | + | obs.script_log(obs.LOG_INFO, "Recording stopped.") | |
92 | + | resp = obs.obs_frontend_get_last_recording() | |
93 | + | file_pn = Path(resp) | |
94 | + | if file_pn.exists(): | |
95 | + | file_pn.unlink() | |
96 | + | obs.script_log(obs.LOG_INFO, f"Deleted recording: {file_pn}") | |
97 | + | ||
98 | + | obs.timer_add(on_timer_tick, 1000) | |
99 | + | ||
100 | + | ||
101 | + | def on_timer_tick(): | |
102 | + | """Timer callback to start a new recording.""" | |
103 | + | obs.remove_current_callback() | |
104 | + | ||
105 | + | obs.obs_frontend_recording_start() | |
106 | + | obs.script_log(obs.LOG_INFO, "Recording started.") |
上一頁
下一頁