RENAME clip.py to cli.py & RENAME video.py to core.py to better reflect purpose
In addition, added basic mark command
This commit is contained in:
@@ -11,7 +11,7 @@ dependencies = [
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
rewind = "rewind.clip:main"
|
||||
rewind = "rewind.cli:main"
|
||||
rewind-daemon = "rewind.daemon:main"
|
||||
|
||||
[tool.setuptools.package-data]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
import sys
|
||||
import argparse
|
||||
from rewind.video import clip
|
||||
from rewind.core import clip, mark
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
parser = argparse.ArgumentParser(
|
||||
@@ -19,6 +19,14 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
help="Number of seconds to include in the clip (default: 30)"
|
||||
)
|
||||
|
||||
mark = sub.add_parser("mark", help="Mark the current time in the recording for later reference")
|
||||
mark.add_argument(
|
||||
"-n", "--name",
|
||||
type=str,
|
||||
required=True,
|
||||
help="Name of the marker"
|
||||
)
|
||||
|
||||
return parser
|
||||
|
||||
def main(argv=None) -> int:
|
||||
@@ -27,6 +35,8 @@ def main(argv=None) -> int:
|
||||
|
||||
if args.command == "save":
|
||||
clip(args.seconds)
|
||||
elif args.command == "mark":
|
||||
mark(args.name)
|
||||
else:
|
||||
parser.error("Unknown command")
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
import os
|
||||
import datetime
|
||||
import subprocess
|
||||
import json
|
||||
from rewind.paths import load_state
|
||||
|
||||
"""
|
||||
@@ -63,6 +64,27 @@ def clip(seconds_from_end: float) -> None:
|
||||
combine_last_x_ts_files(seconds_from_end, output_file_name)
|
||||
print(f"Created clip: {output_file_name}")
|
||||
|
||||
def mark(name: str) -> None:
|
||||
if not name:
|
||||
raise ValueError("Marker name cannot be empty")
|
||||
|
||||
# writes marker to json file (not state)
|
||||
markers_file = os.path.join(os.path.dirname(__file__), "markers.json")
|
||||
if os.path.exists(markers_file):
|
||||
with open(markers_file, "r") as f:
|
||||
markers = json.load(f)
|
||||
else:
|
||||
markers = []
|
||||
|
||||
markers.append({
|
||||
"name": name,
|
||||
"timestamp": datetime.datetime.now().timestamp()
|
||||
})
|
||||
|
||||
with open(markers_file, "w") as f:
|
||||
json.dump(markers, f, indent=4)
|
||||
print(f"Added marker: {name}")
|
||||
|
||||
def get_duration(file_path: str) -> float:
|
||||
result = subprocess.run(
|
||||
["ffprobe", "-v", "error", "-show_entries",
|
||||
@@ -6,7 +6,7 @@ import time
|
||||
import obsws_python as obs
|
||||
import subprocess
|
||||
|
||||
from rewind.video import get_duration
|
||||
from rewind.core import get_duration
|
||||
from rewind.paths import load_state, write_state, load_config
|
||||
from watchdog.observers import Observer
|
||||
from watchdog.events import FileSystemEventHandler
|
||||
@@ -81,7 +81,13 @@ def main() -> None:
|
||||
time.sleep(5)
|
||||
|
||||
config = load_config()
|
||||
con = open_obs_connection(config["obs"]["host"], config["obs"]["port"], config["obs"]["password"])
|
||||
|
||||
con = None
|
||||
for _ in range(10):
|
||||
con = open_obs_connection(config["obs"]["host"], config["obs"]["port"], config["obs"]["password"])
|
||||
if con is not None:
|
||||
break
|
||||
time.sleep(2)
|
||||
|
||||
recording_dir = con.get_record_directory().record_directory
|
||||
start_recording(con)
|
||||
|
||||
Reference in New Issue
Block a user