# Free Software Foundation, version 3.
from dataclasses import dataclass
+import os
import subprocess
from typing import Callable
@dataclass
class Recording:
+ filename: str
process: subprocess.Popen[bytes]
recording: Recording | None = None
+def make_filename() -> str:
+ directory = os.environ.get(
+ 'XDG_VIDEOS_DIR',
+ os.path.expanduser('~/Videos'))
+ os.makedirs(directory, exist_ok=True)
+ return os.path.join(directory, "screen-recording.mkv")
+
+
def on_start_recording(_: Gtk.Button, stack: Gtk.Stack) -> None:
global recording # pylint: disable=global-statement
assert recording is None
screen_size = '1366x768' # TODO
+ filename = make_filename()
command = [
'ffmpeg',
'-video_size', screen_size,
'-framerate', '25',
'-f', 'x11grab', '-i', ':0.0+0,0',
'-f', 'pulse', '-ac', '2', '-i', 'default',
- 'screen-recording.mkv'] # nopep8
+ filename] # nopep8
# pylint: disable=consider-using-with
recording = Recording(
+ filename=filename,
process=subprocess.Popen(command, stdin=subprocess.PIPE))
stack.set_visible_child_name("recording")